1.mean_n(Image : ImageMean : : )
mean_n生成所有通道的逐像素平均值。
对于每个坐标点,计算该坐标上所有灰度值的和0。
结果是灰度值的平均值(总和除以通道数)。
输出图像有一个通道。
有关平滑滤波器概念的解释,请参阅“滤波/平滑”一章的介绍。
例如:
read_image (Images, ['ic0','ic1','ic2','ic3'])
channels_to_image (Images, Ic)
mean_n (Ic, ImageMean)
2.mean_sp(Image : ImageSPMean : MaskWidth, MaskHeight, MinThresh, MaxThresh : )
mean_sp通过对灰度值求平均值来实现平滑。
只有MinThresh到MaxThresh区间内的灰度值才取平均值。
太亮或太暗的灰色值在求和时将被忽略。
如果求和时没有灰度值位于默认区间内,则采用原始灰度值。
如果阈值分别设置为0或255,除了运行时间外,操作符mean_sp的行为类似于mean_image。
例程:
read_image(Image,'mreut')
dev_display(Image)
mean_sp(Image,ImageMeansp,3,3,101,201)
dev_display(ImageMeansp)
3.median_image(Image : ImageMedian : MaskType, Radius, Margin : )
median_image对带有正方形或圆形掩码的输入图像执行中值过滤器,
并在ImageMedian中返回经过过滤的图像。
掩码的形状可以用MaskType选择。
掩码的半径可以用Radius来选择。
从概念上讲,中值过滤器按升序对掩码内的所有灰度值进行排序,然后选择灰度值的中值。
中值是排序后的灰度值之一,即,为排序后灰度值的秩(位置)(N - 1) / 2 + 1的灰度值,
其中N为滤波掩模所覆盖的像素个数。
这里,秩1对应最小的灰度值,秩N对应掩码内最大的灰度值(也参见rank_image)。
过滤器掩码由半径、大小和掩码类型决定,MaskType定义掩码的形状。
对于后者,有以下选择:
circle 该掩模由掩模中心像素周围半径为圆内的像素组成
square 该掩模由边缘长度为Radius*2+1像素的正方形组成。
median_image可以被使用于,例如median_image抑制不需要小于掩码的对象(例如,点状或行式结构),
因此可以被用来估计阴影校正的背景照明或作为动态阈值分割的预处理步骤操作(见dyn_threshold)。
通过参数Margin可以选择几种边框处理进行过滤:
gray value:假设图像边框外的像素为常量(具有指定的灰度值)。
“continue”:边框像素的延续。
“cyclic”:图像边框的循环延续。
“mirrored”:像素在图像边框上的反射。
当使用半径为1或2的MaskType 'square'(产生一个3x3或5x5像素的过滤器掩模)和边界处理'mirror '时,median_image可以在OpenCL设备上执行。
有关平滑滤波器概念的解释,请参阅“滤波/平滑”一章的介绍。
例程:
read_image (Image, 'mreut')
median_image (Image, ImageMedian, 'circle', 3, 'mirrored')
dev_set_part (111, 205, 111 + 70, 205 + 70)
dev_display (ImageMedian)
4.median_rect(Image : ImageMedian : MaskWidth, MaskHeight : )
median_rect使用大小为MaskWidth×MaskHeight的矩形掩码对输入图像Image 执行中值滤波,并在ImageMedian中返回滤波后的图像。
从概念上讲,中值过滤器按升序对掩码内的所有灰度值进行排序,然后选择灰度值的中值。
中值是排序后的灰度值之一,即,排序后的灰度值的秩(position) (MaskWidth * MaskHeight - 1) / 2 + 1,
其中秩1对应最小的灰度值,秩MaskWidth * MaskHeight对应掩码内最大的灰度值(参见rank_rect)。
median_rect可以被使用于,例如,平滑图像,抑制不需要的小于掩码的对象(例如,点状或行式结构),
因此可以被用来估计阴影校正时的背景照明或作为动态阈值的预处理步骤操作(见dyn_threshold)。
当使用3x3或5x5过滤器掩码时,median_rect可以在OpenCL设备上执行。
有关平滑滤波器概念的解释,请参阅“滤波/平滑”一章的介绍。
例程:
Sequence := [91:-1:1]
read_image (ImageArray, 'dff/focus_pcb_solder_paste_' + Sequence$'02')
channels_to_image (ImageArray, Image)
depth_from_focus (Image, Depth, Confidence, 'bandpass', 'next_maximum')
select_grayvalues_from_channels (Image, Depth, SharpenedImage)
scale_image (SharpenedImage, ImageScaled, 4, 0)
scale_image_max (Depth, ImageScaleMax)
median_rect (ImageScaleMax, DepthMean, 25, 25)
compose2 (DepthMean, ImageScaled, MultiChannelImage)
dev_display (MultiChannelImage)
5.median_separate(Image : ImageSMedian : MaskWidth, MaskHeight, Margin : )
median_separate执行中值滤波的一种变体:
首先创建两个辅助图像。
第一个辅助图像是通过使用一个像素高,MaskWidth像素宽掩码(水平掩码) 进行中值滤波,再使用MaskHeight像素高,一个像素宽掩码(垂直掩码)中值滤波。
第二个辅助图像是通过使用相同的掩码进行滤波创建的,但是操作顺序相反:首先是垂直掩码,然后是水平掩码。
输出图像由两个辅助图像逐像素平均得到。
median_separate显然比普通操作符median_image更快,因为两个掩码都是一个像素宽的,这有助于非常有效的处理。
运行时实际上独立于掩码的大小。
例如,操作符median_separate可以在纹理过滤器之后很好地使用,因为需要较大的掩码。
例程:
read_image (MreutHill, 'mreut_y')
get_image_size (MreutHill, Width, Height)
texture_laws (MreutHill, SS, 'ss', 0, 5)
texture_laws (MreutHill, EE, 'ee', 2, 5)
median_separate (SS, SSMed, 25, 25, 'mirrored')
median_separate (EE, EEMed, 25, 25, 'mirrored')
6.median_weighted(Image : ImageWMedian : MaskType, MaskSize : )
median_weighted计算局部环境中灰色值的中间值。
与median_image相反,median_image只在环境中使用一次所有的灰色值,
操作符median_weighted根据它们的位置对所有灰色值进行几次加权。
将一个灰色值接收到字段中,根据其权重进行多次排序。
以下掩码可供选择:
'gauss'
MaskSize=3
1 2 1
2 4 2
1 2 1
inner
MaskSize=3
1 1 1
1 3 1
1 1 1
例如:
read_image (MreutHill, 'mreut_y')
median_weighted (MreutHill, ImageWMedian, 'inner',3)
7.midrange_image(Image, Mask : ImageMidrange : Margin : )
midrange_image是整幅图像中指定掩模内的最大值和最小值的平均值。
可以选择几种边框处理(Margin )进行过滤:
灰度值 图像边缘外的像素假设为常数(用指定灰度值表示)。
“continued”边缘像素的延续。
“cyclic”图像边缘的循环延拓。
“mirrored”像素在图像边缘的反射。
所指示的掩模(=掩模图像的区域)以掩模中心接触所有像素一次的方式覆盖要过滤的图像。
有关平滑滤波器概念的解释,请参阅“滤波/平滑”一章的介绍。
例程:
read_image(Image,'fabrik')
gen_circle (Circle, 200, 200, 20)
midrange_image(Image,Circle,Midrange,'mirrored')
dev_display(Midrange)
|