Main Content

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

ファンビーム投影

メモ:

平行パスに沿った線積分から投影データを作成する方法の詳細については、ラドン変換を参照してください。ファンビーム投影データをパラレル ビーム投影データに変換するには、関数 fan2para を使用してください。

関数 fanbeam は特定の方向にイメージ行列の "投影" を計算します。2 次元関数 "f(x,y)" の投影は、線積分の集合です。関数 fanbeam は 1 つのソースか出るファンの型をしたパスに沿って線積分を計算します。イメージを表すため、関数 fanbeam はイメージの中心の周りにソースを回転させることで、さまざまな角度からイメージの複数の投影を行います。次の図は、指定した回転角での 1 つのファンビーム投影を示しています。

回転角 θ でのファンビーム投影

関数 fanbeam を使用してファンビーム投影データを計算する場合、引数としてイメージと、ファンビーム投影の頂点と回転の中心 (イメージ内の中心ピクセル) との距離を指定します。関数 fanbeam はイメージのサイズと fanbeam パラメーターの設定からビームの数を決定します。

FanSensorGeometry パラメーターは、センサーの配置方法 ('arc' または 'line') を指定します。

ファン センサーの幾何形状説明
'arc'fanbeam は 1 度の間隔で弧に沿ってセンサーを配置します。FanSensorSpacing パラメーターを使用し、各ビーム間の角度を指定することでセンサー間の距離を制御します。これは既定のファン センサーの幾何形状です。
'line'fanbeam は弧ではなく、直線に沿ってセンサーを配置します。FanSensorSpacing パラメーターを使用し、x 軸に沿ってセンサー間の距離をピクセル単位で指定します。

FanRotationIncrement パラメーターは回転角の増分を指定します。既定の設定では、fanbeam は中心ピクセルの周りでソースを 1 度の間隔で回転することにより、さまざまな角度での投影を行います。

次の図は、これらの幾何配置を示しています。最初の図は FanSensorGeometry'arc' (既定の設定) と設定した場合に、関数 fanbeam で使用される形状を示します。ビームの角度の刻みを指定することでセンサー間の距離を指定する方法を確認してください。

弧の幾何配置を利用したファンビーム投影

次の図は FanSensorGeometry'line' と設定した場合に、関数 fanbeam で使用される形状を示します。ピクセル単位でこれらの間の距離を "x" 軸に沿って設定することによりセンサーの位置を設定する方法を、この図の中で確認してください。

線幾何形状をもつファンビーム投影

ファンビーム投影データからのイメージの再構成

ファンビーム投影データからイメージを復元するには、関数 ifanbeam を使用します。この関数では、投影データとファンビーム投影の頂点と投影データが作成されるときの回転の中心までの距離を引数として設定します。たとえば、次のコードは投影データ P と距離 D からイメージ I を再作成します。

I = ifanbeam(P,D);

既定の設定では、関数 ifanbeam によって、1 度間隔のビームと 360 度全体にわたり 1 度刻みで増分する投影の弧状幾何形状ファン センサーを使用してファンビーム投影データが作成されます。関数 fanbeam と共に、ifanbeam パラメーターを使用して投影データのこれらの特性に他の値を設定できます。投影データの作成時に使用されたこれらのパラメーターと同じ値を使用してください。これらのパラメーターの詳細については、ifanbeamを参照してください。

関数 ifanbeam は、関数 fan2para を使用してファンビーム投影データをパラレル ビーム投影データに変換した後で、関数 iradon を呼び出してイメージを再構成します。このため、関数 ifanfeam は、関数 iradon に渡す特定の iradon パラメーターをサポートしています。関数 iradon の詳細については、逆ラドン変換を参照してください。

ファンビーム逆投影を使用したイメージの再構成

この例では、fanbeam および ifanbeam を使用してサンプル イメージの投影を行い、その投影からイメージを再構成する方法を示します。

テスト イメージを生成し、表示します。テスト イメージは Shepp-Logan の頭部ファントムで、関数 phantom を使用して作成できます。ファントム イメージは、人頭の実際の断層撮影イメージで見られるさまざまな要素を示します。

P = phantom(256);
imshow(P)

Figure contains an axes. The axes contains an object of type image.

テスト イメージのファンビーム投影データを、センサーの間隔を変化させながら計算する FanSensorSpacing パラメーターを使用して計算します。この例ではファンビームの円弧の形状を使用するため、センサーの間隔をビームの角度間隔で指定します。2 番目は一度に配置し、3 番目は 0.25 度に配置します。各呼び出しで、投影の頂点と回転の中心との間の距離は一定で 250 ピクセルです。さらに、fanbeam は中心のピクセルの周りを 1 度刻みで投影を回転させます。

D = 250;

dsensor1 = 2;
F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1);

dsensor2 = 1;
F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2);

dsensor3 = 0.25;
[F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,...
'FanSensorSpacing',dsensor3);

投影データ F3 をプロットします。fanbeam は 0 度から 360 度までの回転角で投影データを計算するため、180 度のオフセットの位置で同じパターンが得られます。同じ特徴が両側からサンプルされています。

figure, imagesc(fan_rot_angles3, sensor_pos3, F3)
colormap(hot); colorbar
xlabel('Fan Rotation Angle (degrees)')
ylabel('Fan Sensor Position (degrees)')

Figure contains an axes. The axes contains an object of type image.

ifanbeam を使用してファンビーム投影データからイメージを再構成します。個々の再構成において、ファン センサーの間隔を以前に投影データを作成したときに使用した間隔に合わせます。この例では、OutputSize パラメーターを使用して各再構成の出力サイズを元のイメージ P のサイズと同じになるように制約を与えています。再構成の質が投影のビーム数を増やすことでどのくらい向上するかを、出力で確認してください。イメージの作成に使用したビーム間隔は、最初のイメージ Ifan1 では 2 度、2 番目のイメージ Ifan2 では 1 度、3 番目のイメージ Ifan3 で 0.25 度です。

output_size = max(size(P));

Ifan1 = ifanbeam(F1,D, ...
       'FanSensorSpacing',dsensor1,'OutputSize',output_size);
figure, imshow(Ifan1)
title('Ifan1')

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

Ifan2 = ifanbeam(F2,D, ...
       'FanSensorSpacing',dsensor2,'OutputSize',output_size);
figure, imshow(Ifan2)
title('Ifan2')

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

Ifan3 = ifanbeam(F3,D, ...
       'FanSensorSpacing',dsensor3,'OutputSize',output_size);
figure, imshow(Ifan3)
title('Ifan3')

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