ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

imregdemons

2 つの 2 次元イメージまたは 3 次元イメージを位置合わせさせる変位場の推定

説明

[D,moving_reg] = imregdemons(moving,fixed) はレジストレーションされるイメージ moving を参照イメージ fixed と位置合わせする変位場 D を推定します。各ピクセル位置の変位ベクトルは、fixed イメージ グリッドの位置を moving イメージの対応する位置にマッピングします。moving_reg は、moving イメージを変位場 D に従ってワープし、線形内挿によってリサンプルしたバージョンです。

オプションで、変位場の推定を GPU を使用して実行できます (Parallel Computing Toolbox™ が必要)。詳細は、GPU での画像処理を参照

[D,moving_reg] = imregdemons(moving,fixed,N) は計算の反復回数を指定します。この関数は収束基準を使用しないため、指定または既定の回数反復されることが常に保証されます。

[D,moving_reg] = imregdemons(___,Name,Value) は、名前と値のペアを使用して重み計算の特性を制御し、移動イメージをレジストレーションします。

すべて折りたたむ

この例では、同じ手が 2 つの異なるポーズで撮影されている場合のレジストレーション問題を解決する方法を説明します。イメージ間の位置ずれは、それぞれのイメージの各所で異なります。したがって、非剛体レジストレーション問題です。

2 つのイメージをワークスペースに読み取ります。

fixed  = imread('hands1.jpg');
moving = imread('hands2.jpg');

イメージを処理するためにグレースケールに変換します。

fixed  = rgb2gray(fixed);
moving = rgb2gray(moving);

初期の位置ずれを観察します。指のポーズが異なっています。

imshowpair(fixed,moving,'montage')

イメージの相違点がわかりやすいように 2 つのイメージを重ね合わせます。相違点が緑とマゼンタで強調表示されています。

imshowpair(fixed,moving)

ヒストグラム マッチングを使用して、moving イメージと fixed イメージの照度差を補正します。これは一般的な前処理手順です。

moving = imhistmatch(moving,fixed);

2 つのイメージの位置合わせに必要な変換を推定します。

[~,movingReg] = imregdemons(moving,fixed,[500 400 200],...
    'AccumulatedFieldSmoothing',1.3);

レジストレーションの結果を表示します。下の最初の図では、位置合わせを示すために 2 つのイメージが重ね合わされています。

imshowpair(fixed,movingReg)

imshowpair(fixed,movingReg,'montage')

非剛体レジストレーションを GPU で実行します。

イメージをワークスペースに読み取ります。

fixed  = imread('hands1.jpg');
moving = imread('hands2.jpg');

初期の位置ずれを観察します。(指のポーズが異なっています)。

figure
imshowpair(fixed,moving,'montage')
figure
imshowpair(fixed,moving)

gpuArray を作成し、イメージをグレースケールに変換します。

fixedGPU  = gpuArray(fixed);
movingGPU = gpuArray(moving);
 
fixedGPU  = rgb2gray(fixedGPU);
movingGPU = rgb2gray(movingGPU);

ヒストグラム マッチングを使用して、移動イメージと固定イメージの照度差を補正します。これは一般的な前処理手順です。

fixedHist = imhist(fixedGPU);
movingGPU = histeq(movingGPU,fixedHist);

レジストレーションを実行します。

[~,movingReg] = imregdemons(movingGPU,fixedGPU,[500 400 200],'AccumulatedFieldSmoothing',1.3);

レジストレーションされたイメージを CPU に戻します。

 movingReg = gather(movingReg);

結果を表示します。

figure
imshowpair(fixed,movingReg)
figure
imshowpair(fixed,movingReg,'montage')

入力引数

すべて折りたたむ

レジストレーションされるイメージであり、2 次元または 3 次元のグレースケール イメージとして指定されます。

GPU を使用して計算を実行するには、moving を 2 次元または 3 次元のグレースケール イメージを含む gpuArray として指定します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

ターゲット方向の参照イメージであり、2 次元または 3 次元のグレースケール イメージとして指定されます。

GPU を使用して計算を実行するには、fixed を 2 次元または 3 次元のグレースケール イメージを含む gpuArray として指定します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

反復回数。正の整数のスカラーまたはベクトルとして指定します。

ベクトルを指定する場合、N にはピラミッド レベル (解像度レベル) 1 つ当たりの反復回数を指定します。たとえば、ピラミッド レベルが 3 つある場合は、ベクトル [100,50,25] というように指定します。この場合、imregdemons は最低の解像度レベルで 100 回の反復、次のピラミッド レベルで 50 回の反復、最後のピラミッド レベル (最高の解像度レベル) で 25 回の反復を実行します。解像度レベルが低い方が処理に時間がかからないため、ピラミッドの低い解像度で実行する反復回数を増やし、高い解像度で実行する反復回数を減らすと、パフォーマンスが改善されます。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: [D,movingReg] = imregdemons(moving,fixed,[500 400 200],'AccumulatedFieldSmoothing',1.5);

反復ごとに適用される平滑化。'AccumulatedFieldSmoothing' と数値で構成されるコンマ区切りのペアとして指定します。このパラメーターは、拡散的な正則化の量をコントロールします。imregdemons は、ガウス平滑化の標準偏差を適用して各反復で蓄積された場を正則化します。大きい値を指定すると、出力される変位場がより滑らかになります。小さい値を指定すると、出力される変位場の変形がより局所化されます。通常、値は [0.5, 3.0] の範囲内です。PyramidLevels で複数のレベルを指定した場合は、ガウス平滑化で使用される標準偏差がすべてのピラミッド レベルで同じになります。

データ型: double

使用する多重解像度イメージのピラミッド レベル数。'PyramidLevels' と正の整数スカラーとで構成されるコンマ区切りのペアとして指定します。

データ型: double

進行状況を示すウエイトバーの表示。'DisplayWaitbar' と値 true または false で構成されるコンマ区切りのペアとして指定します。true に設定すると、imregdemons は長時間かかる処理の進行状況を示すウエイトバーを表示します。imregdemons のウエイトバーを非表示にするには、DisplayWaitbarfalse に設定します。

メモ

GPU では 'DisplayWaitbar' パラメーターはサポートされていません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

出力引数

すべて折りたたむ

変位場。数値配列として指定します。変位値の単位はピクセルです。

  • fixed が m 行 n 列の 2 次元グレースケール イメージの場合、この変位場配列は m × n × 2 になります。D(:,:,1) には x 軸方向の変位が格納され、D(:,:,2) には y 軸方向の変位が格納されます。

  • fixed が m × n × p の 3 次元グレースケール イメージの場合、変位場配列は m × n × p x 3 になります。D(:,:,:,1) には x 軸方向の変位、D(:,:,:,2) には y 軸方向の変位、D(:,:,:,3) には z 軸方向の変位が格納されます。

GPU を使用して変位場を計算する場合、D は数値配列を含む gpuArray として返されます。

データ型: double

レジストレーションされたイメージ。変位場 D に従ってワープされ、線形内挿によってリサンプルされた 2 次元または 3 次元のグレースケール イメージとして返されます。

GPU を使用して変位場を計算する場合、moving_reg は 2 次元または 3 次元のグレースケール イメージを含む gpuArray として返されます。

ヒント

  • 変位場 D を使用してイメージを変換するには、imwarp を使用します。

参照

[1] Thirion, J.-P. "Image matching as a diffusion process: an analogy with Maxwell’s demons". Medical Image Analysis. Vol. 2, Number 3, 1998, pp. 243–260.

[2] Vercauteren, T., X. Pennec, A. Perchant, N. Ayache, "Diffeomorphic Demons: Efficient Non-parametric Image Registration", NeuroImage. Vol. 45, Number 1, Supplement 1, March 2009, pp. 61–72.

拡張機能

R2014b で導入