1. 程式人生 > >halcon學習筆記(9)——例子fin區域運算分割影象學習

halcon學習筆記(9)——例子fin區域運算分割影象學習

        例子還是手冊中的,例子叫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 ()