関数 > 画像処理 > 特徴抽出 > 例: ユークリッド距離変換
例: ユークリッド距離変換
distform関数を使用して、値が fg のピクセルを前景ピクセルと見なして、行列 M のユークリッド距離変換を計算します。
この例の使用方法については、画像処理の例についてを参照してください。
画像行列
1. 画像を定義し、これに distform を適用します。
各出力ピクセルの値は、最も近い入力前景 (値 100) ピクセルからの距離です。
入力前景ピクセルでは、出力距離はゼロ
上下左右の近傍では、この距離は 1
斜めの近傍では、距離は 2 の平方根、つまり 1.414
ゼロ以外のピクセルが 1 つだけの画像
1. ゼロ以外のピクセルが 1 つだけの画像を定義します。
2. distform を画像に次のように適用します。
入力画像内の前景ピクセル (中心ピクセル) から離れるにしたがって、この距離は単調に増えていきます。
距離変換によって、ユークリッド距離の近似値が返ります。上記の例では、行列位置 (0,1) の正確なユークリッド距離変換の出力は次のようになります。
これに対して、出力画像での値は 5.243 になります。
円オブジェクトの画像
1. 円の画像を次のように定義します。
2. scale関数を使用して円を尺度化します。
3. WRITEBMP関数を使用して、尺度化した円をファイルに書き込みます。
4. distform 関数を円に適用して尺度化し、結果を新しいファイルに保存します。
5. 2 つのファイルから画像を挿入して、結果を比較します。
(sc.bmp)
(scdist.bmp)
距離の値は、円の内側にあるすべての点ではゼロで、外側になるほど単調に増えますが、ユークリッド距離と完全に等しくはありません。したがって明暗は完全な同心円状にはならず、かすかに星状になります。
単一オブジェクトの 2 つの 2 値画像
1. 画像を読み込みます。
2. translate関数を使用して、画像の転送バージョンを作成し、翻訳された画像を書き込みます。
3. 3 つのファイルから画像を挿入して、結果を比較します。
(flower.bmp)
(flower_d2.bmp)
(flower_d3.bmp)
4. distform 関数を使用して、D1 の距離変換を計算します。
5. 関数maskおよびmeanを使用して、距離変換画像を画像 D2 および D3 によってマスクし、画像全体の平均値を計算します。これは 2 つの画像間の距離の目安となります。
D1D1 の間の距離はゼロであり、D1 とその他の画像との間の距離は直線移動の距離に従って増えています。
6. ハウスドルフ距離の計算
ハウスドルフ距離は、2 つの画像の対応する点の間の最短距離の最大値として定義されます。2 つの画像の間のハウスドルフ距離を計算するには、関数 mean ではなくmax関数を使用します。
2 つのエッジ画像
2 つのエッジ画像間の距離を計算することで、エッジ検出関数の働きを比較できます。エッジ距離の目安として、マスクした距離の平均値または最大値を使用します。
1. READ_IMAGE関数を使用して画像ファイルを読み取ります。
2. 2 つのエッジ検出関数cannyおよびbinarizeを画像に適用して、結果を外部ファイルに書き込みます。
3. 2 つの画像を挿入して目視で比較します。
(lena_e1.bmp)
(lena_e2.bmp)
4. エッジ間の全体的な距離を計算します。
これは役に立ちましたか?