Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ラドン変換を使用したラインの検出

この例では、ラドン変換を使用してイメージ内のラインを検出する方法を説明します。ラドン変換は、ハフ変換として知られている一般的なコンピューター ビジョン演算と密接に関連しています。関数 radon を使用して、直線を検出するために使われるハフ変換を実行できます。

イメージのラドン変換の計算

イメージをワークスペースに読み取ります。それをグレースケール イメージに変換します。

I = fitsread('solarspectra.fts');
I = rescale(I);

元のイメージを表示します。

figure
imshow(I)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

関数 edge を使用して、バイナリ エッジ イメージを計算します。関数 edge によって返されたバイナリ イメージを表示します。

BW = edge(I);
figure
imshow(BW)
title('Edges of Original Image')

Figure contains an axes. The axes with title Edges of Original Image contains an object of type image.

イメージのラドン変換を関数 radon を使用して計算し、その変換を表示します。変換のピークの位置は、元のイメージ内の直線の位置に対応します。

theta = 0:179;
[R,xp] = radon(BW,theta);

ラドン変換の結果を表示します。

figure
imagesc(theta, xp, R); colormap(hot);
xlabel('\theta (degrees)');
ylabel('x^{\prime} (pixels from center)');
title('R_{\theta} (x^{\prime})');
colorbar

Figure contains an axes. The axes with title R_{\theta} (x^{\prime}) contains an object of type image.

R の最も強いピークは θ=1 度、中心から x' = -80 ピクセルの位置に対応します。

ラドン変換のピークの解釈

元の Figure でこのピークを可視化するために、イメージの中心 (以下のイメージ上に重ねて表示した青い十字) を見つけてください。赤い破線は角度 θ=1 度で中心を通る半径方向の直線です。この直線に沿って中心から -80 ピクセル (左方向へ) 移動すると、半径方向の直線は赤い実線と直交します。この赤い実線は、ラドン変換で最も強い信号をもつ直線を示します。

ラドン変換を深く理解するために、R 内で次に強い 4 つのピークを調べます。

R の 2 つの強いピークは、θ=1 度、中心からのオフセット -84 ピクセルおよび -87 ピクセルの位置にあります。以下のイメージに重ねて表示するように、これらのピークは最も強い直線の左にある 2 本の赤い直線です。

強いピークの残り 2 つは、R の中心近くにあります。これらのピークは、θ=91 度、中心からのオフセット -8 ピクセルおよび -44 ピクセルの位置にあります。以下のイメージの緑の破線は角度 91 度で中心を通る半径方向の直線です。この半径方向の直線に沿って中心から -8 ピクセルと -44 ピクセルの距離を移動すると、この直線は緑の実線と直交します。これらの緑の実線が R の強いピークに対応します。

イメージ内の淡い直線は R の弱いピークに関連しています。