Main Content

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

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

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

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

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

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

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

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object with title R indexOf theta baseline blank ( x toThePowerOf prime baseline ) 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 の弱いピークに関連しています。