ハルコン曲線幅検出アルゴリズムのまとめ

目視検査では、直線の幅、つまり 2 本の平行線間の垂直距離は簡単に検出できますが、曲線の幅検出には別の方法を見つける必要があります。

画像の曲線のエッジの幅を検出し、エッジが壊れているかどうかを判断します. 5つの方法が要約されます.

1. 画像一致判定

概要: 標準画像参照を確立し、検出結果を比較します。

コアオペレーター:

(1) 参照: align_bead;

(2) 検出: apply_bead_inspection_model;

Halcon ルーチンを参照してください: apply_bead_inspection_model.hdev。

この方法は、接着剤の検出に適しています。崩壊の値を取得するのは簡単ではないため、放棄されましたが、参考値があるため、学習することをお勧めします。

2. 点から輪郭までの距離

概要: 2 値化によって境界線 (エッジ) を抽出し、一方のエッジの格子を抽出し、格子のすべての点から他方のエッジまでの距離を計算します。

コアオペレーター:

(1) エッジ上の点行列を取得: get_contour_xld(Contour : : : Row, Col);

(2) 格子からエッジまでの距離を計算する: distance_pc(Contour : : Row, Column : DistanceMin, DistanceMax)

Halcon ルーチンを参照してください: distance_pc.hdev。

参照コード:

*二值化找Border
threshold_sub_pix(ImageReducedM1,Border, 130)
count_obj(Border,Number)
*创建数组,按长度拍排序Border
LengthTuple:=[]
for i:=1 to Number by 1    
select_obj (Border,  ObjectSelected, i)
length_xld(ObjectSelected,length)
LengthTuple:=[LengthTuple,length]
endfor
tuple_sort_index(LengthTuple,Indices)
*找出两条最长的轮廓
if(|Indices|>1)
select_obj(Border,MaxXLD,Indices[|Indices|-1]+1)
select_obj(Border,NextXLD,Indices[|Indices|-1-1]+1)
else
    return()
endif  
*获取最长轮廓的点阵
get_contour_xld(MaxXLD, Rows1, Columns1)
*计算点阵到另一个轮廓的距离
distance_pc(NextXLD,Rows1, Columns1, DistanceMin, DistanceMax)

注: 演算子 distance_pc は、最小距離配列と最大距離配列の 2 つの配列を出力します。値を取得するときは、最小距離配列を使用する必要があります。

3. 輪郭から輪郭までの距離

概要: 2 値化によって一対の輪郭 (輪郭) を抽出し、2 つの輪郭間の距離を計算します。

コアオペレーター:

(1) 輪郭間の距離を計算します。 distance_contours_xld(ContourFrom, ContourTo : ContourOut : Mode : );

(2) 幅の値セットを取得します: get_contour_attrib_xld(Contour : : Name : Attrib);

(3) OK/NG セグメントの抽出: segment_contour_attrib_xld(Contour : ContourPart : Attribute, Operation, Min, Max : )

Halcon ルーチンを参照してください。

(1)inspect_frame_width.hdev;

(2)Apply_distance_transform_xld.hdev。

参照コード:

*测量两条曲线之间的宽度
distance_contours_xld (MaxXLD, NextXLD, ContourOut, 'point_to_segment')
get_contour_attrib_xld (ContourOut, 'distance', Distance)
*提取测量宽度集中合规的部分
segment_contour_attrib_xld (ContourOut, ContourPart, 'distance', 'and', 10, 26)
display_result (MaxXLD, NextXLD, ContourPart)
*取最大值
tuple_max (Distance, WidthMax)
tuple_min (Distance, WidthMin)

4.骨格を抽出して幅を測定する

概要: 曲線の中央の骨格を抽出し、骨格を通して曲線の幅を測定します。

コアオペレーター:

(1) lines_gauss オペレーターに必要な入力パラメーターを計算します。 calculate_lines_gauss_parameters( : : MaxLineWidth, Contrast : Sigma, Low, High);

(2) 骨格とその幅を検出します: lines_gauss(Image : Lines : Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions : ).

Halcon ルーチンを参照してください。

(1)angio.hdev;

(2)lines_gauss.hdev。

5. 極座標展開曲線イメージ

概要: 極座標に従って湾曲した画像を拡大し、拡大された画像を検出し、結果の画像を直角座標の画像に復元します。

コアオペレーター:

(1) 極座標への画像: polar_trans_image;

(2) デカルト座標への画像: polar_trans_region_inv。

Halcon ルーチンを参照してください。

(1)ocr_cd_print_polar_trans.hdev;

(2)vessel.hdev。

お互いから学び、一緒に豊かになりましょう。

おすすめ

転載: blog.csdn.net/m0_62778855/article/details/125999880