halcon:(4)halcon中XLD的概念与应用----汽车引擎盖圆孔检测
xld(extended Line Descriptions):擴展線的描述。
在halcon中經常會用到的兩個概念:
1、region簡單的理解區域region,就是某種具有結構體性質的二值圖,正常像素再圖像放大后你看到的是一個個的小方塊,所有在圖像都會沿著像素單位(方塊)走。
2、xld亞像素輪廓:是一系列有序的控制點集合是halcon中自己通過計算得到的點組成的輪廓,比region更為準確。
下圖來直觀的看一下region和xld,在圖像上表現的不同:
這個是region,它是用每個小方塊(像素)組成的:
?這個是xld,可以看到線和每個像素(小方塊)會有不同的交點,這是haolcon自己計算的:
?XLD代表亞像素級別的輪廓或者多邊形。
XDL就是一個輪廓函數,它不是基于像素,人們通常稱他為亞像素,只不過它比像素更精確,可以精確到像素內部的一種描述。
在Halcon中,使用XLD表示亞像素的輪廓和多邊形。常用edges_sub_pix算子來提取亞像素輪廓。
? ? ? ?我們都知道圖片是由像素組成,當我們用halcon讀取圖像Image或者region的時候,獲得的數據就是像素。這些數據結構都是像素級別的。
? ? ? ?獲得圖像后,我們可以通過亞像素閾值分割或者亞像素邊緣提取,這樣這些處理得到的結果其實就是用亞像素輪廓來表示。。
? ? ? ?上述所述亞像素輪廓其實在halcon中指的就是xld,它可以表示直線或多邊形,是一組有序的控制點集合,控制點順序用來說明彼此相連的關系。
亞像素的輪廓可以分為兩種:
1.閉輪廓:首尾相交
2.開輪廓:首尾不相交
-------------------------xld:像素插值后擬合成得線段------------
汽車引擎蓋圓孔檢測與定位:
*二值化+區域轉輪廓線+橢圓擬合=求取中心點
read_image(Image,'C:/Users/TIMI/Desktop/picture/fin1.png')
*先找亮度區域
threshold (Image, Regions, 128, 255)
*連通域做拆分connection
*如果存在孔洞要不要先填充一下
*fill_up(Regions,CircleRegion)
*有可能要做閉運算
closing_circle(Regions,RegionClosing,43.5)
connection(Regions,ConnectRegions)
*選取
select_shape_std(ConnectRegions,CircleRegion,'max_area',70)
*區域轉凸形(就是多邊形)
shape_trans(CircleRegion,transRegion,'convex')
*剪切出來
dev_set_color('yellow')
reduce_domain(Image,transRegion,ReduceImage)
*再找黑色區域(使用這個方法自動找到黑色區域)
binary_threshold(ReduceImage,BinaryRegion,'max_separability','dark',UsedThreshold)
connection(BinaryRegion,ConnectBinaryRegion)
count_obj(ConnectBinaryRegion,Number1)
fill_up(ConnectBinaryRegion,FillConnectBinaryRegion)
count_obj(FillConnectBinaryRegion,Number2)
select_shape (FillConnectBinaryRegion, SelectedRegions, ['area','circularity'],\'and', [10185.2,0.7269], [33888.9,1])*找到區域之后呢,做定位有兩種方法:
*1、區域轉輪廓線
gen_contour_region_xld(SelectedRegions,Contours,'border')
dev_set_draw('margin')
dev_display(Image)
select_shape_xld(Contours,SelectedXLD,'circularity', 'and', 0.7269,1)
fit_ellipse_contour_xld(SelectedXLD,'fitzgibbon',-1,0,0,200,3,2.0, \Row, Column, Phi, Radius1, Radius2, StartPhi, \EndPhi, PontOrder)
gen_ellipse_contour_xld(ContEllipse,Row,Column,Phi,Radius1,Radius2,0,6.28319, \'positive',1.5)
gen_cross_contour_xld(Cross1,Row,Column,36,rad(45))
dev_clear_window()
dev_display(Image)
dev_set_color('red')
dev_display(ContEllipse)
dev_set_color('green')
dev_display(Cross1)
*2、
結果:
概念參考:https://blog.csdn.net/weixin_42258743/article/details/107427493
總結
以上是生活随笔為你收集整理的halcon:(4)halcon中XLD的概念与应用----汽车引擎盖圆孔检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Halcon:(3)铝板检测与角点坐标计
- 下一篇: Halcon与QT的联合编程(1)