XLD_相關算子


 

threshold_sub_pix (GrayImage, Border, 148)  //獲得亞像素輪廓
dev_set_color ('red')
* edges_sub_pix (GrayImage, Edges, 'sobel', 1, 20, 40)  //獲得亞像素輪廓的另一種方式
* area_center_xld (Border, Area, Row, Column, PointOrder)
* gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)

union_cocircular_contours_xld (Border, UnionContours, 0.5, 0.1, 0.2, 30, 10, 10, 'true', 1)  //連接同一圓上的輪廓
union_adjacent_contours_xld (UnionContours, UnionContours1, 10, 1, 'attr_keep')    //連接鄰近的輪廓
select_contours_xld (UnionContours1, SelectedContours, 'contour_length', 100, 200000, -0.5, 0.5)  //篩選輪廓,此為輪廓長度
select_contours_xld (SelectedContours, SelectedContours1, 'closed', 0.5, 200, -0.5, 0.5)   //篩選輪廓,此為閉合的類型

fit_circle_contour_xld (SelectedContours1, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)    //擬合成圓
* gen_circle_contour_xld (ContCircle, Row, Column, Radius, StartPhi, StartPhi, 'positive', 1)
gen_circle (Circle, Row, Column, Radius)  //生成圓
dev_display (Circle)

shape_trans_xld (SelectedContours1, XLDTrans, 'rectangle1')  //生成外接矩形

count_obj (XLDTrans, Number)  

dev_set_color ('orange')
select_obj (XLDTrans, ObjectSelected, 1)  //選擇某一對象
dev_display (ObjectSelected)


* segment_contours_xld (SelectedContours1, ContoursSplit, 'lines_circles', 5, 4, 2)

* get_contour_xld (SelectedContours, Row, Col)

---------------------------------------------------------------------------------------------------------------

segment_contours_xld (SelectedContours, ContoursSplit, 'lines_circles', 5, 4, 3)   //以線和圓作為分類切割

count_obj (ContoursSplit, Number)

for Index := 1 to Number by 1

select_obj (ContoursSplit, ObjectSelected, Index)   //逐一選擇
*返回亞像素輪廓的全局屬性
*如果Attrib =-1,這一部分輪廓最適合被擬合為直線段。
*如果Attrib =0,這一部分輪廓最適合被擬合為橢圓弧。
*如果Attrib =1,這一部分輪廓最適合被擬合為圓弧。
get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)  //判斷是圓還是線
dev_set_color ('green')
if(Attrib > 0)  // 若是圓弧
fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
gen_circle (Circle, Row, Column, Radius)
dev_display (Circle)
endif

if(Attrib = -1) // 若是直線
fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
gen_line (Line, RowBegin, ColBegin, RowEnd, ColEnd, 'xld')
dev_display (Line)
endif
endfor

----------------------------------------------------

union_collinear_contours_xld:合並在同一直線的XLD

union_cocircular_contours_xld:合並在同圓的XLD

union_adjacent_contours_xld:合並鄰近的XLD

===================

算子:select_counters_XLD

功能:選擇“輪廓”-根據幾個特征選擇XLD輪廓。

格式:select_contours_xld(Contour,SelectedContour, Featours,Min1,Max1, Min2,Max2)

根據以下特征(參數特征)從輸入輪廓輪廓輪廓中選擇XLD輪廓:

‘contour_length’:
“輪廓”長度:
所有長度小於min1或大於max1的輪廓都不會返回(min2和max2在這里沒有影響)。

‘maximum_extent’:
‘最大范圍’:
所有最大范圍(根據Haralick和Shapiro:Computer and Robot Vision,Addison-Wesley 1992,第3.2章)小於min1或大於max1的輪廓(根據其行和列方向上的八個極端點測量)都不會返回(min2和max2在這里沒有影響)。

‘direction’:
“方向”:
僅返回回歸線方向在min1和max1之間(以弧度表示,逆時針)的輪廓。min1和max1映射到[0,2*pi]的范圍。(min2和max2在這里沒有影響)。

‘curvature’:
“曲率”:
僅返回距離回歸線平均距離在min1和max1之間,距離的標准偏差在min2和max2之間的輪廓。

‘closed’:
“關閉”:
僅返回起點和終點之間的距離小於或等於max1像素的輪廓。(min1、min2和max2在這里沒有影響。)

‘open’:
“打開”:
僅返回其起點和終點之間的距離大於min1像素的輪廓。(max1、min2和max2在這里沒有影響)。
如果根據曲率選擇min1=max1=0或min2=max2=0,則各自的特征對選擇沒有影響。
————————————————

halcon中什么是xld?

  xld(eXtended Line Descriptions) 擴展的線性描述,它不是基於像素的,人們稱它是亞像素,只不過比像素更精確罷了,可以精確到像素內部的一種描述。

  而image和region這些數據結構都是像素級別的。

  亞像素精度數據可以通過亞像素閾值分割或者亞像素邊緣提取來獲得,這些處理得到的結果就是用亞像素輪廓來表示。

  上面提到的亞像素輪廓其實在halcon中指的就是xld,它可以表示直線或多邊形,是一組有序的控制點集合,控制點順序用來說明彼此相連的關系。

  當然亞像素輪廓可以分為兩種:

  1.閉輪廓:首尾相交

  2.開輪廓:首尾不相交

 --------------------------------------------------------------------------------------------------------------

 

  我們可以通過如下算子得到xld:

  threshold_sub_pix(Image:Boreder:Threshold:):提取xld並不是沿着像素與像素邊界交界的地方,而是halcon經過某種計算得出的位置(一種描述)。其中Threshold為提取xld的閾值,灰度值以閾值為界提取xld。

  xld的特征部分和region有很多相同的部分:

  1.基礎特征:xld面積,中心,寬高,左上角及右下角坐標。

  2.形狀特征:圓度,緊密度,長度,矩形度,凸性,偏心率,蓬松度(bulkiness),外接圓半徑,外接矩形的方向及兩邊長度等。

  3.雲點特征:雲點面積,中心,等效橢圓半軸及角度,雲點方向等。

  4.幾何特征:二階矩等。

 

 --------------------------------------------------------------------------------------------------------------

 

 

  選取特定xld:

  使用算子:

  select_shape_xld(XLD:SelectedXLD:Features,Operation,Min,Max:)

  作用:選擇特定形狀特征要求的xld輪廓或多邊形

  XLD:要提取的XLD

  SelectedXLD:提取到的XLD

  Features:提取XLD的特征依據

  Operation:特征之間的邏輯關系(and or)

  Min,Max:特征值的要求范圍

 

 --------------------------------------------------------------------------------------------------------------

 

  Select_Contours_xld(Contours:SelectedContours:Features,Min,Max,Min2,Max2:)

  作用:選擇多種特征要求的XLD輪廓 (如長度  開閉  方向 等特征,不支持多邊形)

  Contours:要提取的XLD輪廓

  SelectedContours:提取到的XLD輪廓

  Features:提取XLD輪廓的依據(篩選)

  Min,Max,Min2,Max2:特征值的范圍

 

 --------------------------------------------------------------------------------------------------------------

 

 

  area_center_xld(XLD:::Area,Row,Column,PointOrder)

  作用:計算xld的面積和中心位置

 

  下面來看看XLD的合並操作:

  union_collinear_contours_xld:合並在同一直線的XLD

  union_cocircular_contours_xld:合並在同圓的XLD

  union_adjacent_contours_xld:合並鄰近的XLD

  這些算子以后會詳細講解。

 

 --------------------------------------------------------------------------------------------------------------

 

  再來看看XLD的合並操作:

  把XLD轉換成其他規則形狀的XLD,相應說明及算子和region的很類似:

  1.convex hull

  2.outer_circle

  3.retangle1

  4.retangle2

  這四種類型轉換使用同一個算子:

  shape_trans_xld(XLD:XLDTrans:Type:)

  作用:轉換XLD的形狀,其中Type為轉換的類型如上面的四種類型

 

 --------------------------------------------------------------------------------------------------------------

 

  接下來看看XLD的分割操作:

  算子:

  segment_contours_xld(Contours:ContoursSplit:Mode,SmoothCont,Max,LineDist1,MaxLineDist2:)   //將輪廓用圓與線進行分類

       get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)  //求線段為圓還是線

*如果Attrib =-1,這一部分輪廓最適合被擬合為直線段。
*如果Attrib =0,這一部分輪廓最適合被擬合為橢圓弧。
*如果Attrib =1,這一部分輪廓最適合被擬合為圓弧。

 --------------------------------------------------------------------------------------------------------------

  然后就是XLD的擬合操作:(fit_***_contour_xld)

  具體算子如下:

  fit_line_contour_xld:擬合直線

  fit_circle_contour_xld:擬合圓

  fit_ellipse_contour_xld:擬合橢圓

  fit_retangle2_contour_xld:擬合矩形 

---------------------------------------------------------------------------------------------------------------------

 length_xld (Contour, Length) 求輪廓的長度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM