Main Content

ラドン変換

メモ

ファンビーム投影と呼ばれる単一ソースから出る放射状のパスに沿った線積分からの投影データを作成する方法の詳細については、ファンビーム投影を参照してください。パラレル ビーム投影データをファンビーム投影データに変換するには、関数 para2fan を使用します。

関数 radon は特定の方向にイメージ行列の "投影" を計算します。

2 次元関数 "f(x,y)" の投影は、線積分の集合です。関数 radon はある方向に平行なパスに沿って、すなわち "ビーム" に沿って、複数のソースから線積分を計算します。ビームは 1 ピクセルの間隔で分布しています。イメージを表すために、関数 radon はイメージの中心の周りにソースを回転させることで、さまざまな角度からイメージの複数のパラレル ビーム投影を行います。次の図は、指定した回転角での単一投影を示しています。

回転角 Theta でのパラレル ビーム投影

Single projection of parallel beams at a rotation angle of theta about the center of the coordinate system.

たとえば、f(x,y) の垂直方向での線積分は f(x,y)x 軸上への投影です。そして、水平方向での線積分は y 軸上への f(x,y) の投影です。次の図は、簡単な 2 次元関数に関する水平方向と垂直方向の投影です。

単純な関数の水平方向と垂直方向の投影

For a 2-D rectangular object aligned with the x and y axes, the horizontal and vertical projections are 1-D box functions with the same vertical and horizontal spatial extents as the rectangle, respectively.

投影は、任意の角度 "theta" (θ) に沿っても計算できます。一般に、"f(x,y)" のラドン変換は "y" 軸に平行な "f" の線積分です。

Rθ(x)=f(xcosθysinθ,xsinθ+ycosθ)dy

ここで、

[xy]=[ cosθsinθsinθcosθ][xy]

次の図は、ラドン変換を幾何学的に示しています。

ラドン変換の幾何形状

The Radon transform of a square at an arbitrary projection angle is an isosceles trapezoid whose axis of symmetry is the y'-axis.

イメージのラドン変換のプロット

この例では、特定の回転角度のセットについて、イメージのラドン変換を関数 radon を使用して計算する方法を説明します。

1 つの正方形オブジェクトから成る小さいサンプル イメージを作成し、そのイメージを表示します。

I = zeros(100,100);
I(25:75,25:75) = 1;
imshow(I)

角度 0° と 30° に対するイメージのラドン変換を計算します。この関数は R を返します。その列には theta 内の各角度に対するラドン変換が含まれています。また、関数はベクトル xp も返します。このベクトルには x 軸に沿って対応する座標が含まれています。I の中央ピクセルは floor((size(I)+1)/2) となるように定義されています。これは、x' = 0 に対応する x 軸上のピクセルです。

theta = [0 30];
[R,xp] = radon(I,theta);

変換を 0° でプロットします。

figure
plot(xp,R(:,1))
title("Radon Transform of Square Function at 0 Degrees")

変換を 30° でプロットします。

plot(xp,R(:,2));
title("Radon Transform of Square Function at 30 Degrees")

ラドン変換は、通常、多数の角度に対して計算され、1 つのイメージとして表示されます。正方形イメージに対するラドン変換を 0° から 180° まで 1 度刻みで計算します。

theta = 0:180;
[R,xp] = radon(I,theta);

2 次元ラドン変換をシノグラムとして表示します。

figure
imagesc(theta,xp,R)
title("R_{\theta} (X\prime)")
xlabel("\theta (degrees)")
ylabel("X\prime")
set(gca,"XTick",0:20:180)
colormap(hot)
colorbar