1. 问题
现有如下图片,对其进行腐蚀并统计前后region个数。
* 采集图形并设置窗口
read_image (Image, 'C:/Users/lenovo/Desktop/1.PNG')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (2)
* dev_display (Image)
* 将RGB三通道图片转换成单通道图片
decompose3 (Image, Blue, Green, Red)
* 阈值化
threshold (Red, Regions, 0, 230)
* 分割区域
(Regions, ConnectedRegions)
count_obj (ConnectedRegions, Number)
dev_display (ConnectedRegions)
disp_message (WindowHandle, 'before: '+Number, 'window', 0, 0, 'black', 'true')
* 膨胀图片
erosion_circle (ConnectedRegions, RegionErosion, 1.5)
count_obj (RegionErosion, Number1)
dev_clear_window ()
dev_display (RegionErosion)
disp_message (WindowHandle, 'after : '+Number1, 'window', 0, 0, 'black', 'true')
erosion_circle
前,region
个数为16
。erosion_circle
后,图片中可看到的region
个数为8
,但实际region
个数仍为16
。
2. 分析
在变量窗口 -> 图像变量
选择ConnectedRegions
,右键点击显示目录->选择...
可看到腐蚀前region
的详细信息。
在变量窗口 -> 图像变量
选择RegionErosion
,右键点击显示目录->选择...
可看到腐蚀后region
的详细信息。
比较region
前后变化可发现,erosion_circle
只是将region
相应的值缩小为0
,region
个数并未改变。
3. 修改方法
先使用select_shape
筛掉面积为0或中心为(0,0)的region
,再用count_obj
统计region
个数。
* 采集图形并设置窗口
read_image (Image, 'C:/Users/lenovo/Desktop/1.PNG')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (2)
* dev_display (Image)
* 将RGB三通道图片转换成单通道图片
decompose3 (Image, Blue, Green, Red)
* 阈值化
threshold (Red, Regions, 0, 230)
* 分割区域
connection (Regions, ConnectedRegions)
count_obj (ConnectedRegions, Number)
dev_display (ConnectedRegions)
disp_message (WindowHandle, 'before: '+Number, 'window', 0, 0, 'black', 'true')
* 膨胀图片并筛选
erosion_circle (ConnectedRegions, RegionErosion, 1.5)
select_shape (RegionErosion, SelectedRegions, 'area', 'and', 1, 1000000)
count_obj (SelectedRegions, Number1)
dev_clear_window ()
dev_display (SelectedRegions)
disp_message (WindowHandle, 'after : '+Number1, 'window', 0, 0, 'black', 'true')