halcon:(4)halcon中XLD的概念与应用----汽车引擎盖圆孔检测
xld(extended Line Descriptions):擴(kuò)展線的描述。
在halcon中經(jīng)常會用到的兩個概念:
1、region簡單的理解區(qū)域region,就是某種具有結(jié)構(gòu)體性質(zhì)的二值圖,正常像素再圖像放大后你看到的是一個個的小方塊,所有在圖像都會沿著像素單位(方塊)走。
2、xld亞像素輪廓:是一系列有序的控制點(diǎn)集合是halcon中自己通過計算得到的點(diǎn)組成的輪廓,比region更為準(zhǔn)確。
下圖來直觀的看一下region和xld,在圖像上表現(xiàn)的不同:
這個是region,它是用每個小方塊(像素)組成的:
?這個是xld,可以看到線和每個像素(小方塊)會有不同的交點(diǎn),這是haolcon自己計算的:
?XLD代表亞像素級別的輪廓或者多邊形。
XDL就是一個輪廓函數(shù),它不是基于像素,人們通常稱他為亞像素,只不過它比像素更精確,可以精確到像素內(nèi)部的一種描述。
在Halcon中,使用XLD表示亞像素的輪廓和多邊形。常用edges_sub_pix算子來提取亞像素輪廓。
? ? ? ?我們都知道圖片是由像素組成,當(dāng)我們用halcon讀取圖像Image或者region的時候,獲得的數(shù)據(jù)就是像素。這些數(shù)據(jù)結(jié)構(gòu)都是像素級別的。
? ? ? ?獲得圖像后,我們可以通過亞像素閾值分割或者亞像素邊緣提取,這樣這些處理得到的結(jié)果其實(shí)就是用亞像素輪廓來表示。。
? ? ? ?上述所述亞像素輪廓其實(shí)在halcon中指的就是xld,它可以表示直線或多邊形,是一組有序的控制點(diǎn)集合,控制點(diǎn)順序用來說明彼此相連的關(guān)系。
亞像素的輪廓可以分為兩種:
1.閉輪廓:首尾相交
2.開輪廓:首尾不相交
-------------------------xld:像素插值后擬合成得線段------------
汽車引擎蓋圓孔檢測與定位:
*二值化+區(qū)域轉(zhuǎn)輪廓線+橢圓擬合=求取中心點(diǎn)
read_image(Image,'C:/Users/TIMI/Desktop/picture/fin1.png')
*先找亮度區(qū)域
threshold (Image, Regions, 128, 255)
*連通域做拆分connection
*如果存在孔洞要不要先填充一下
*fill_up(Regions,CircleRegion)
*有可能要做閉運(yùn)算
closing_circle(Regions,RegionClosing,43.5)
connection(Regions,ConnectRegions)
*選取
select_shape_std(ConnectRegions,CircleRegion,'max_area',70)
*區(qū)域轉(zhuǎn)凸形(就是多邊形)
shape_trans(CircleRegion,transRegion,'convex')
*剪切出來
dev_set_color('yellow')
reduce_domain(Image,transRegion,ReduceImage)
*再找黑色區(qū)域(使用這個方法自動找到黑色區(qū)域)
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])*找到區(qū)域之后呢,做定位有兩種方法:
*1、區(qū)域轉(zhuǎn)輪廓線
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、
結(jié)果:
概念參考:https://blog.csdn.net/weixin_42258743/article/details/107427493
總結(jié)
以上是生活随笔為你收集整理的halcon:(4)halcon中XLD的概念与应用----汽车引擎盖圆孔检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Halcon:(3)铝板检测与角点坐标计
- 下一篇: Halcon与QT的联合编程(1)