【HALCON】sobel_amp 関数について - Sobelフィルタによるエッジ検出
2024-08-22
2024-08-22
sobel_amp 関数とは
sobel_amp
関数は、HALCON
の画像処理ライブラリにおいて、Sobel
オペレーターを使用して画像のエッジを検出するために使用されます。Sobel
フィルタは、画像の一階微分を計算することにより、エッジの強さ(振幅)を抽出します。この関数は、主にエッジ検出の前処理として利用されます。
フィルタマスク
sobel_amp
関数では、以下のフィルタマスクを使用して画像を処理します。
A =
1 2 1
0 0 0
-1 -2 -1
B =
1 0 -1
2 0 -2
1 0 -1
これらのマスクは、縦方向および横方向のエッジ検出にそれぞれ使用され、画像のエッジ強度を計算します。
使用方法
sobel_amp
関数の基本的な構文は以下の通りです。
sobel_amp(Image, EdgeAmplitude, FilterType, Size)
Image
: 処理対象の画像EdgeAmplitude
: 出力されるエッジの振幅画像FilterType
: 使用するフィルタのタイプ(例: sum_abs, x, y)Size
: フィルタマスクのサイズ(3, 5, 7など)
具体例
次に、Sobelオペレーターを使用してエッジを検出する具体的な例を示します。
read_image(Image, 'fabrik')
sobel_amp(Image, Amp, 'sum_abs', 3)
threshold(Amp, Edg, 128, 255)
dev_display(Edg)
この例では、まず画像を読み込み、Sobelオペレーターを使ってエッジ振幅を計算し、その後しきい値処理を行ってエッジを抽出しています。
フィルタタイプとサイズ
sobel_amp
関数は、複数のフィルタタイプとサイズオプションをサポートしています。最も一般的なフィルタタイプは以下の通りです。
sum_abs
: エッジ振幅の絶対値の合計を計算x
: 横方向のエッジのみを検出y
: 縦方向のエッジのみを検出sum_sqrt
: エッジ振幅の平方根を使用して計算
フィルタサイズは、画像のスムージングに影響を与え、3x3から39x39までの範囲で選択できます。大きなサイズを使用すると、エッジ検出前に画像が平滑化され、エッジの精度に影響を与えます。
並列化とパフォーマンス
sobel_amp
関数は、OpenCL
デバイスをサポートし、マルチスレッド処理にも対応しています。特に、大規模なデータセットや複雑な処理において、並列化によるパフォーマンス向上が期待できます。
まとめ
sobel_amp
関数は、Sobel
フィルタを使用して画像内のエッジを検出するための強力なツールです。様々なフィルタタイプとサイズオプションを提供しており、エッジ検出の用途に応じてカスタマイズ可能です。エッジ検出の前処理や、画像の特徴抽出に最適な関数として、多くの画像処理アプリケーションで利用されています。