ドキュメンテーション

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

表示を向上させるために空間参照を使用する 2 つのイメージのレジストレーション

この例では、イメージ レジストレーションにおける 2 つのイメージの空間的関係を理解すると共にこれらのイメージを効果的に表示するために空間参照オブジェクトを使用する方法を説明します。この例では、moving イメージと呼ばれる一方のイメージを fixed イメージと呼ばれるもう片方のイメージに位置合わせします。

同じシーンのわずかに位置のずれたイメージを 2 つ読み取ります。

fixed = imread('westconcordorthophoto.png');
moving = imread('westconcordaerial.png');

移動イメージ (レジストレーションされていないイメージ) を表示します。

iptsetpref('ImshowAxesVisible','on')
imshow(moving)
text(size(moving,2),size(moving,1)+30, ...
    'Image courtesy of mPower3/Emerge', ...
    'FontSize',7,'HorizontalAlignment','right');

fixed および moving イメージに対してあらかじめ選択したコントロール ポイントが入っている MAT ファイルを読み込み、fitgeotrans を使用してコントロール ポイントの幾何学的変換近似を作成します。

load westconcordpoints
tform = fitgeotrans(movingPoints, fixedPoints, 'projective');

関数 imwarp を使用して、moving イメージを fixed イメージにレジストレーションするのに必要な変換を実行します。この例では、'FillValues' のオプションのパラメーターで塗りつぶしの値 (白) を指定します。これは、変換後の moving イメージの上に fixed イメージを重ねて表示してレジストレーションを確認するときに役立ちます。幾何学的に変換された moving イメージの内容全体が registered という名前で表示されていることに注目してください。また、空白の行や列がないことにも注目してください。

registered = imwarp(moving, tform,'FillValues', 255);
figure, imshow(registered);

関数 imshowpair を使用して、fixed イメージの上に変換したイメージ registered を重ねます。2 つのイメージは位置合わせされていません。これは、関数 imshowpair がいずれのイメージも既定の固有座標系を使用していると想定しているためです。次の手順で、この表示の問題を修正する 2 とおりの方法を説明します。

figure, imshowpair(fixed,registered,'blend');

変換したイメージ registeredfixed イメージと同数の行と列および同じ空間範囲に制約します。これにより、レジストレーションされたイメージが固定イメージにレジストレーションされた状態で表示されますが、固定イメージの範囲を超えて外挿されることになるレジストレーションされたイメージの領域は破棄されます。これを行うには、fixed イメージのサイズと位置を指定する既定の空間参照オブジェクトを作成すると共に、imwarp's'OutputView' パラメーターを使用してリサンプリングされた制約付きのイメージ registered1 を作成します。固定イメージの上にレジストレーションされたイメージを表示します。このビューではイメージがレジストレーションされているように見えますが、レジストレーションされていないイメージの全体が表示されているわけではありません。

Rfixed = imref2d(size(fixed));
registered1 = imwarp(moving,tform,'FillValues', 255,'OutputView',Rfixed);
figure, imshowpair(fixed,registered1,'blend');

代わりに、fixed イメージと同じ既定の固有座標系における変換したイメージ全体の位置を示す空間参照オブジェクトを出力として返す、imwarp のオプションの構文を使用します。固定イメージの上にレジストレーションされたイメージを表示すると、registered イメージ全体が表示されるようになることを確認してください。

[registered2, Rregistered] = imwarp(moving, tform,'FillValues', 255);
figure, imshowpair(fixed,Rfixed,registered2,Rregistered,'blend');

クリーンアップします。

iptsetpref('ImshowAxesVisible','off')