目視検査では、直線の幅、つまり 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。
お互いから学び、一緒に豊かになりましょう。