1. 程式人生 > >機器視覺halcon軟體:獲取圓形的半徑和圓度

機器視覺halcon軟體:獲取圓形的半徑和圓度

1、要測量一個圓的直徑,可以先通過閾值篩選出所需部分:threshold();

2、然後將選中部分組合connection (),選擇其中類圓度高的部分(根據選中部分與圓的相似度篩選出圓型部分):select_shape ();

3、選擇將所選的類圓區域擴大4個畫素點作為一個區域,縮小2個畫素點作為一個區域,然後將連個區域合併,再得到兩個區域不同的部分,那麼這個圓區域的邊緣就在這個合併區域中。使用的運算元有:dilation_circle,erosion_circle,difference,union1;

4、用運算元edges_sub_pix ()提取其邊緣輪廓;

5、此時的圓形區域並不是真正的圓,需用一個橢圓去

擬合該圓物件:fit_ellipse_contour_xld;

read_image:


Image:


halcon程式碼:

dev_clear_window()

dev_close_window()
read_image (read_Image, 'C:/Users/Leason/Desktop/試驗/2.jpg')
rgb1_to_gray (read_Image, Image)
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width/3, Height/3, WindowHandle)
dev_display (Image)
gen_rectangle1 (ROI, 239.876, 8.5, 513.303, 695.5)
reduce_domain (Image, ROI, ImageReduced)
threshold (ImageReduced, ROI, 80, 255)
connection (ROI, DarkRegions)
select_shape (DarkRegions, Circles, ['circularity','area'], 'and', [0.85,50], [1.0,99999])
count_obj (Circles, Number)//計算圓形的數量

select_obj (Circles, PillSelected,1)

dilation_circle (Circles, ROIOuter, 4)
erosion_circle (Circles, ROIInner, 2)
difference (ROIOuter, ROIInner, ROI_dif)
union1 (ROI_dif, ROIEdges)

reduce_domain (ImageReduced, ROIEdges, ImageReduced1)

*提取其邊緣輪廓

edges_sub_pix (ImageReduced1, Edges, 'lanser2', 0.3, 10, 20)
*區域的中點座標Row, Column,與x軸的角度Phi,半長軸Ra,半短軸Rb,開始角度StartPhi,結束角度EndPhi
fit_ellipse_contour_xld (Edges, 'ftukey', -1, 2, 0, 200, 3, 2, Row, Column, Phi, Ra, Rb, StartPhi, EndPhi, PointOrder)