Main Content

imregdemons

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

説明

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

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

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

すべて折りたたむ

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

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

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

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

fixed  = im2gray(fixed);
moving = im2gray(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')

入力引数

すべて折りたたむ

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

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

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

データ型: 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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'AccumulatedFieldSmoothing',1.5 は、各反復で標準偏差 1.5 のガウス平滑化を適用します。

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

データ型: double

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

データ型: double

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

データ型: 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 軸方向の変位が格納されます。

データ型: double

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

ヒント

  • 変位場 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 で導入

すべて展開する

参考

アプリ

関数