median_rectmedian_rectMedianRectMedianRectmedian_rect (算子)

名称

median_rectmedian_rectMedianRectMedianRectmedian_rect — 使用矩形掩模计算中值滤波器。

签名

median_rect(Image : ImageMedian : MaskWidth, MaskHeight : )

Herror median_rect(const Hobject Image, Hobject* ImageMedian, const Hlong MaskWidth, const Hlong MaskHeight)

Herror T_median_rect(const Hobject Image, Hobject* ImageMedian, const Htuple MaskWidth, const Htuple MaskHeight)

void MedianRect(const HObject& Image, HObject* ImageMedian, const HTuple& MaskWidth, const HTuple& MaskHeight)

HImage HImage::MedianRect(Hlong MaskWidth, Hlong MaskHeight) const

static void HOperatorSet.MedianRect(HObject image, out HObject imageMedian, HTuple maskWidth, HTuple maskHeight)

HImage HImage.MedianRect(int maskWidth, int maskHeight)

def median_rect(image: HObject, mask_width: int, mask_height: int) -> HObject

描述

median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect performs a median filter on the input image ImageImageImageImageimageimage with a rectangular mask of size MaskWidthMaskWidthMaskWidthMaskWidthmaskWidthmask_width × MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height and returns the filtered image in ImageMedianImageMedianImageMedianImageMedianimageMedianimage_median.

Conceptually, the median filter sorts all gray values within the mask in ascending order and then selects the median of the gray values. The median is the “middle” one of the sorted gray values, i.e., the gray value with rank (position) (MaskWidthMaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height - 1) / 2 + 1 of the sorted gray values, where the rank 1 corresponds to the smallest gray value and the rank MaskWidthMaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height corresponds to the largest gray value within the mask (see also rank_rectrank_rectRankRectRankRectRankRectrank_rect).

median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect can be used, for example, to smooth images, to suppress unwanted objects (e.g., point-like or line-like structures) that are smaller than the mask, and can therefore be used to estimate the background illumination for a shading correction or as a preprocessing step for the dynamic threshold operation (see dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThresholddyn_threshold).

When using a 3x3 or 5x5 filter mask, median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect can be executed on OpenCL devices.

For an explanation of the concept of smoothing filters see the introduction of chapter Filters / Smoothing.

注意

If even values instead of odd values are passed in MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height or MaskWidthMaskWidthMaskWidthMaskWidthmaskWidthmask_width, median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect uses the next larger odd values instead.

median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect uses an algorithm with constant runtime per pixel, i.e., the runtime only depends on the size of the input image and not on the mask size. Therefore, for large mask sizes median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect is the fastest implementation of the median filter in HALCON. Depending on the computer architecture (processor type, availability of SIMD instructions like SSE2 or MMX, cache size and throughput, memory throughput), for small mask sizes the implementation used in median_imagemedian_imageMedianImageMedianImageMedianImagemedian_image and rank_imagerank_imageRankImageRankImageRankImagerank_image is faster than median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect. Typically, this is the case for MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height 15, but can also happen for larger mask sizes, e.g., if SIMD instructions are unavailable and memory throughput is low.

Furthermore, it should be noted that median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect uses a recursive implementation, which internally computes the filter response on the smallest enclosing rectangle of the domain of the input image. Therefore, if the domain of the input image only covers a small fraction of the smallest enclosing rectangle, it can happen that median_imagemedian_imageMedianImageMedianImageMedianImagemedian_image and rank_imagerank_imageRankImageRankImageRankImagerank_image are faster than median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect even for larger values of MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height.

Note that filter operators may return unexpected results if an image with a reduced domain is used as input. Please refer to the chapter 滤波器.

执行信息

参数

ImageImageImageImageimageimage (输入对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte*) *允许用于计算设备

Image to be filtered.

ImageMedianImageMedianImageMedianImageMedianimageMedianimage_median (输出对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (byte)

Filtered image.

MaskWidthMaskWidthMaskWidthMaskWidthmaskWidthmask_width (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Width of the filter mask.

默认值: 15

List of values (for compute devices): 3, 5

建议值: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 31, 49, 51, 61, 71, 81, 91, 101

值范围: 3 ≤ MaskWidth MaskWidth MaskWidth MaskWidth maskWidth mask_width ≤ 4095

最小增量: 2

建议增量: 2

MaskHeightMaskHeightMaskHeightMaskHeightmaskHeightmask_height (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Height of the filter mask.

默认值: 15

List of values (for compute devices): 3, 5

建议值: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 31, 49, 51, 61, 71, 81, 91, 101

值范围: 3 ≤ MaskHeight MaskHeight MaskHeight MaskHeight maskHeight mask_height ≤ 4095

最小增量: 2

建议增量: 2

复杂性

对于每个像素:O(1)。

结果

If the parameter values are correct the operator median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect returns the value 2 ( H_MSG_TRUE) . The behavior in case of empty input (no input images available) is set via set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>). If necessary, an exception is raised.

可能的前趋

read_imageread_imageReadImageReadImageReadImageread_image

可能的后继

thresholdthresholdThresholdThresholdThresholdthreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThresholddyn_threshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowingregiongrowing

替代

median_imagemedian_imageMedianImageMedianImageMedianImagemedian_image, rank_rectrank_rectRankRectRankRectRankRectrank_rect, rank_imagerank_imageRankImageRankImageRankImagerank_image

另见

gray_erosion_rectgray_erosion_rectGrayErosionRectGrayErosionRectGrayErosionRectgray_erosion_rect, gray_dilation_rectgray_dilation_rectGrayDilationRectGrayDilationRectGrayDilationRectgray_dilation_rect, gray_erosion_shapegray_erosion_shapeGrayErosionShapeGrayErosionShapeGrayErosionShapegray_erosion_shape, gray_dilation_shapegray_dilation_shapeGrayDilationShapeGrayDilationShapeGrayDilationShapegray_dilation_shape, gray_erosiongray_erosionGrayErosionGrayErosionGrayErosiongray_erosion, gray_dilationgray_dilationGrayDilationGrayDilationGrayDilationgray_dilation

参考文献

S. Perreault, P. Hébert; “Median Filtering in Constant Time”; IEEE Transactions on Image Processing vol. 16, no. 9, pp. 2389-2394, 2007.
D. Cline, K.B. White, P.K. Egbert; “Fast 8-Bit Median Filtering Based On Separability”; International Conference on Image Processing, vol. V, pp. 281-284, 2007.

模块

Foundation