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')