このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
表示を向上させるために空間参照を使用する 2 つのイメージのレジストレーション
この例では、イメージ レジストレーションにおける 2 つのイメージの空間的関係を理解すると共にこれらのイメージを効果的に表示するために空間参照オブジェクトを使用する方法を説明します。この例では、移動イメージと呼ばれる一方のイメージを、固定イメージと呼ばれるもう片方のイメージに位置合わせします。
同じシーンのわずかに位置のずれたイメージを 2 つ読み取ります。
fixed = imread("westconcordorthophoto.png"); moving = imread("westconcordaerial.png");
移動イメージ (レジストレーションされていないイメージ) を表示します。
iptsetpref(ImshowAxesVisible="on") imshow(moving) text(size(moving,2),size(moving,1)+35,"Image courtesy of mPower3/Emerge", ... FontSize=7,HorizontalAlignment="right")
固定イメージおよび移動イメージに対してあらかじめ選択したコントロール ポイントが入っている MAT ファイルを読み込みます。
load westconcordpoints
関数 fitgeotform2d
を使用して射影幾何学的変換をコントロール ポイントのペアに当てはめます。
tform = fitgeotform2d(movingPoints,fixedPoints,"projective");
関数 imwarp
を使用して、moving
イメージを固定イメージにレジストレーションするのに必要な変換を実行します。この例では、オプションの名前と値の引数 "FillValues"
で塗りつぶしの値 (白) を指定します。これは、変換後の移動イメージの上に固定イメージを重ねて表示してレジストレーションを確認するときに役立ちます。幾何学的に変換された移動イメージの内容全体が registered
という名前で表示されていることに注目してください。また、空白の行や列がないことにも注目してください。
registered = imwarp(moving,tform,FillValues=255); imshow(registered)
関数 imshowpair
を使用して、固定イメージの上に変換したイメージ registered
を重ねます。2 つのイメージは位置合わせされていません。これは、関数 imshowpair
がいずれのイメージも既定の固有座標系を使用していると想定しているためです。次の手順で、この表示の問題を修正する 2 とおりの方法を説明します。
imshowpair(fixed,registered,"blend");
変換したイメージ registered
を、固定イメージと同数の行と列および同じ空間範囲に制約します。これにより、レジストレーションされたイメージが固定イメージにレジストレーションされた状態で表示されますが、固定イメージの範囲を超えて外挿されることになるレジストレーションされたイメージの領域は破棄されます。これを行うには、固定イメージのサイズと位置を指定する既定の空間参照オブジェクトを作成すると共に、imwarp
の名前と値の引数 "OutputView"
を使用してリサンプリングされた制約付きのイメージ registered1
を作成します。固定イメージの上にレジストレーションされたイメージを表示します。このビューではイメージがレジストレーションされているように見えますが、レジストレーションされていないイメージの全体が表示されているわけではありません。
Rfixed = imref2d(size(fixed));
registered1 = imwarp(moving,tform,FillValues=255,OutputView=Rfixed);
imshowpair(fixed,registered1,"blend");
代わりに、固定イメージと同じ既定の固有座標系における変換したイメージ全体の位置を示す空間参照オブジェクトを出力として返す、imwarp
のオプションの構文を使用します。固定イメージの上にレジストレーションされたイメージを表示すると、そのレジストレーションされたイメージ全体が表示されるようになることを確認してください。
[registered2,Rregistered] = imwarp(moving,tform,FillValues=255);
imshowpair(fixed,Rfixed,registered2,Rregistered,"blend")
クリーンアップします。
iptsetpref("ImshowAxesVisible","off")