ドキュメンテーション

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

imregdemons

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

構文

[D,moving_reg] = imregdemons(moving,fixed)
[___] = imregdemons(moving,fixed,N)
[gpuarrayD,gpuarrayMoving_reg] = imregdemons(gpuarrayMoving,gpuarrayFixed,N)
[___] = imregdemons(___,Name,Value,...)

説明

[D,moving_reg] = imregdemons(moving,fixed) はレジストレーションされるイメージ moving を参照イメージ fixed と位置合わせする変位場 D を推定します。movingfixed は 2 次元または 3 次元の強度イメージです。

各ピクセル位置の変位ベクトルは、fixed イメージ グリッドの位置を moving イメージの対応する位置にマッピングします。moving_reg は、moving イメージを変位場 D に従ってワープし、線形内挿によってリサンプルしたバージョンです。

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

[gpuarrayD,gpuarrayMoving_reg] = imregdemons(gpuarrayMoving,gpuarrayFixed,N) は GPU で推定を実行します。

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

すべて折りたたむ

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

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

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

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

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

初期の位置ずれを観察します。指のポーズが異なっています。2 番目の図では、相違点がわかりやすいように 2 つのイメージが重ね合わせられています。相違点が緑で強調表示されています。

figure
imshowpair(fixed,moving,'montage')

figure
imshowpair(fixed,moving)

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

moving = imhistmatch(moving,fixed);

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

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

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

figure
imshowpair(fixed,movingReg)

figure
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 次元のグレースケール イメージとして指定されます。

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

GPU での処理に用いる入力イメージ。2 次元または 3 次元のグレースケール イメージとして指定します。

GPU での処理に用いる参照イメージ。2 次元または 3 次元のグレースケール イメージを含む gpuArray として指定します。

名前/値のペアの引数

オプションの 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 軸方向の変位が格納されます。

データ型: double

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

変位場。double クラスの行列が格納された gpuArray として指定します。

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

ヒント

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

R2014b で導入

この情報は役に立ちましたか?