dual_rank(Image : ImageRank : MaskType, Radius, ModePercent, Margin : )
算子dual_rank对所有输入图像(Image )的灰度值进行非线性变换。
圆或正方形可以用作结构元素。
操作符dual_rank影响rank_image的两个连续调用。
在第一次调用时,使用指定的范围(ModePercent)计算范围灰度值。
这个计算的结果是rank_image的进一步调用的输入,这次使用范围值100-ModePercent。
当过滤时,边界处理(Margin)的不同参数,可以选择:
图像边缘外的灰度值像素假设为常数(带明确的灰度值)。
“continued”边缘像素的延续。
“cyclic”图像边缘的循环延拓。
“mirrored”像素在图像边缘的反射。
根据以下方案计算范围滤波:将指定的掩模置于要滤波的图像上,掩模中心与所有像素接触一次。
对于这些像素中的每一个,掩模覆盖的所有相邻像素都按照与它们的灰度值对应的升序排序。
每个已排序的灰度值序列包含相同数量的灰度值,就像掩码具有图像点一样。
第n个最高的元素,(= ModePercent,秩值在0…在相应的结果图像中选择并设置为结果灰度值。
如果ModePercent为0,则操作符等于gray值opening (gray_opening)。
如果ModePercent为50,则操作符将得到中值过滤器,该过滤器将应用两次(median_image)。
dual_rank中的ModePercent 100表示它计算灰色值关闭(gray_closing)。
在此范围内选择参数值将导致这些操作符的平滑转换。
有关平滑滤波器概念的解释,请参阅“ Filters / Smoothing.”一章的介绍。
2.gen_disc_se( : SE : Type, Width, Height, Smax : )gen_disc_se为图像的灰度形态生成一个椭球结构元素(SE)。
参数Type决定图像类型。
它必须匹配使用此结构元素在后续操作符调用中处理的图像的图像类型。
参数Width,Height决定了椭圆的两个主轴的长度。
Smax的值决定了结构元素的最大灰度值。
要生成任意结构元素,可参见read_gray_se。
在操作符write_image的帮助下,可以将结构元素保存为图像。
不过,要注意使用支持alpha通道的图像格式来保存结构化元素的形状,比如“tiff”、“jp2”或“png”。
然后可以使用操作符read_image再次加载这些文件。
3.gray_tophat(Image, SE : ImageTopHat : : )
gray_tophat使用结构元素SE将一个灰度值顶冒变换应用到输入图像Image。
结构元素SE的图像类型必须匹配输入图像Image的图像类型。
具有结构元素s的图像i,其灰度值top hat变换定义为
bottom hat
即。,图像的差值及其与s的开度(见gray_opening)。
有关生成结构化元素,请参见read_gray_se。
对于平面结构元素,即域内灰度不变的结构元素,top hat变换特别快。
4.gray_bothat(Image, SE : ImageBotHat : : )
函数使用结构元素SE将灰度值底帽变换应用到输入图像Image。
结构元素SE的图像类型必须匹配输入图像Image的图像类型。
具有结构元素s的图像i,其灰度值底帽变换为
即。,则图像与s的闭合差值与图像的闭合差值(见gray_closing)。
有关生成结构化元素,请参见read_gray_se。
对于平面结构元素,即其域内灰度水平恒定的结构元素,灰度值侵蚀尤为迅速。
5.read_gray_se( : SE : FileName : )
read_gray_se从文件中加载用于灰度形态学的结构化元素。
这些结构化元素的文件名必须以'gse'结尾。(用于灰度结构元素)。
这个后缀由read_gray_se自动附加到传递的文件名中,因此不能传递。
结构化元素的数据必须以以下格式包含在文件中:
第一行指定结构化元素的数据类型为“byte”、“uint2”或“real”(不带引号)
它必须匹配使用此结构元素在后续操作符调用中处理的图像的图像类型。
文件中的以下两个数字确定了结构元素的宽度和高度,并确定了包围结构元素的矩形。
两个值都必须大于0。然后是定义区域的弦数。
然后弦本身如下:
每个弦由弦的行(L)、列开始(CB)和列结束(CE)定义,它们之间用空格分隔。
然后,后面的值被视为对应的灰度形态学值(它们的数量取决于结构元素的定义宽度和高度)。
不能省略不属于结构化元素区域的值(因为没有为此点定义弦)。
尽管如此,它们在最终的结构元素中会被忽略。
结构化元素在内部存储为具有上面指定的数据类型的图像。
普通图像也可以用作结构元素,其中图像的区域定义了结构元素的形状。
但是,注意不要使用太大的图像,因为运行时间与图像的面积乘以结构元素的面积成正比。
平面结构元素(即具有固定灰度值的元素)的执行速度会特别快。
结构元素的原点位于定义的宽度和高度的一半。
对于偶数维度,原点将向左上角四舍五入。
在操作符write_image的帮助下,可以将结构元素保存为图像。
不过,要注意使用支持alpha通道的图像格式来保存结构化元素的形状,比如“tiff”、“jp2”或“png”。
然后可以使用操作符read_image再次加载这些文件。
例如:read_gray_se (SE, environment('HALCONROOT')+'/filter/isod4')加载halcon自带的文件
文件内容为
* byte
* 3 3
*
* 3
* 0 1 1
* 1 0 2
* 2 1 1
*
* -1 0 -1
* 0 1 0
* -1 0 -1
例程:
* 使用三种方法提取图像高亮部分
read_image (Mreut, 'mreut_y')
get_image_size (Mreut, Width, Height)
read_image (MreutDem, 'mreut_dgm_2.0')
scale_image_max (MreutDem, ImageScaleMax)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
get_system ('clip_region', Information)
set_system ('clip_region', 'false')
dev_set_draw ('margin')
dev_set_color ('red')
* 方法1 ,使用dual_rank提取
dual_rank (ImageScaleMax, ImageRank, 'circle', 15, 10, 'mirrored')
sub_image (ImageScaleMax, ImageRank, ImageSubRank, 1, 0)
threshold (ImageSubRank, High, 7, 255)
zoom_region (High, HighZoomed, 8, 8)
move_region (HighZoomed, HighZoomedMoved, -250, -600)
clip_region (HighZoomedMoved, HighAreas, 0, 0, 511, 511)
dev_display (Mreut)
dev_display (HighAreas)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*方法2 使用顶冒
gen_disc_se (SE, 'real', 30, 30, 0)
gray_tophat (MreutDem, SE, ImageTopHat)
threshold (ImageTopHat, High, 4, 1000)
zoom_region (High, HighZoomed, 8, 8)
move_region (HighZoomed, HighZoomedMoved, -250, -600)
clip_region (HighZoomedMoved, HighAreas, 0, 0, 511, 511)
dev_display (Mreut)
dev_display (HighAreas)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 方法3 动态阈值分割
mean_image (ImageScaleMax, ImageMean, 51, 51)
dyn_threshold (ImageScaleMax, ImageMean, High, 4, 'light')
zoom_region (High, HighZoomed, 8, 8)
move_region (HighZoomed, HighZoomedMoved, -250, -600)
clip_region (HighZoomedMoved, HighAreas, 0, 0, 511, 511)
dev_display (Mreut)
dev_display (HighAreas)
set_system ('clip_region', Information)
执行结果
工业视觉halcon dual_rank函数介绍
|