halcon學習筆記(9)——例子fin區域運算分割影象學習
阿新 • • 發佈:2018-12-30
例子還是手冊中的,例子叫fin.hdev;是檢測一個圓形結構上出的“小尾巴”;步驟是,第一,分割出背景和目標物;第二,分割並關閉想要的圓形物體的後的背景圖(a);第三,用背景(a)減去分割關閉圓結構的圖(b),得到想多餘的小尾巴(c);第四,優化小尾巴(c),去除干擾,得到優化後的小尾巴(d),下圖即為a-b=c,c優化後得到d處理圖:
原圖如下:
下面是程式碼:
* fin.hdev: Detection of a fin * dev_update_window ('off') read_image (Fin, 'fin2') *read_image (Fin, 'fin1') *read_image (Fin, 'fin3') get_image_size (Fin, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, 'black', WindowID) dev_display (Fin) set_display_font (WindowID, 14, 'mono', 'true', 'false') disp_continue_message (WindowID, 'black', 'true') stop () threshold (Fin, Regions, 0, 244) bin_threshold (Fin, Dark) *自動閾值分割,通過各種內部運算,分割值較低的一部分 difference (Fin, Dark, Background) *比較影象的不同,比較fin和閾值後分割後圖像Dark,目的是分割出背景 dev_set_color ('blue') dev_set_draw ('margin') dev_set_line_width (4) dev_display (Background) disp_continue_message (WindowID, 'black', 'true') stop () closing_circle (Background, ClosedBackground, 250) *關閉圓形結構圖形,小於半徑250的圓形圓形結構將被忽略,也就是去那個小尾巴 dev_set_color ('green') dev_display (ClosedBackground) disp_continue_message (WindowID, 'black', 'true') stop () difference (ClosedBackground, Background, RegionDifference) *還是比較,用灰度影象Background和去掉小尾巴的影象ClosedBackground進行求差運算 opening_circle (RegionDifference,FinRegion, 2.5) *與關閉相反,開啟這部分影象中半徑大於引數的影象,並分割出來 *opening_rectangle1 (RegionDifference, FinRegion, 5, 5) *開啟矩形結構,效果和圓形差不多 dev_display (Fin) dev_set_color ('red') dev_display (FinRegion) area_center (FinRegion, FinArea, Row, Column) dev_set_draw ('fill') dev_set_line_width (1) dev_update_window ('on') disp_continue_message (WindowID, 'black', 'true') stop ()