处理结果显示:
主要思想:
Blob+差分+特征
Blob:选取了待测区域
差分:将待测区域用闭运算填补之后,和原区域进行差分。计算出那一小部分凸起。
特征:使用矩形的开运算,将像素的进行减少,计算出的很多小区域,不是我们想要的,过滤掉
- fin.hdev: Detection of a fin
- blob+差分+特征
dev_update_window (‘off’)
*读取图像,一次性读取了3张,放在了一个数组里面
read_image (Fins, ‘fin’ + [1:3])
*计算读取图像的宽高
get_image_size (Fins, Width, Height)
*关闭窗口
dev_close_window ()
*打开窗口
dev_open_window (0, 0, Width[0], Height[0], ‘black’, WindowID)
*设置字体
set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’)
for I := 1 to 3 by 1
*从图像数组中一个一个的读取图像,索引从1开始
select_obj (Fins, Fin, I)
*显示当前选取的图像
dev_display (Fin)
*用二进制阈值来分割图像。‘max_separability’:最大限度的可分性,‘Light’获取其中亮的部分。UsedThreshold输出的阈值。下面暂时没有用到这个输出阈值
*当前选取的是亮的,所以是右边的白色区域
binary_threshold (Fin, Background, ‘max_separability’, ‘light’, UsedThreshold)
dev_set_color (‘blue’)
dev_set_draw (‘margin’)
dev_set_line_width (4)
dev_display (Background)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*提取出的右边区域有一个小凹坑,想填补该凹坑,就需要增加像素,需要进行闭运算。半径为250像素。
*250为经验值,一开始使用半径为10,发现还没有把凹坑填补完全,一步一步增加到250。
*也可以用膨胀
closing_circle (Background, ClosedBackground, 250)
dev_set_color (‘green’)
dev_display (ClosedBackground)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*然后和之前有凹坑的区域进行差值运算。
difference (ClosedBackground, Background, RegionDifference)
*求取出来的区域有很多小区域,不是我们想要的,然后用矩形的开运算进行像素的减少
opening_rectangle1 (RegionDifference, FinRegion, 5, 5)
dev_display (Fin)
dev_set_color (‘red’)
dev_display (FinRegion)
area_center (FinRegion, FinArea, Row, Column)
if (I < 3)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
endif
endfor
对应示例程序:
fin.hdev