ドキュメンテーション

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

レジストレーションの前処理手順としての位相相関の使用

この例では、自動イメージ レジストレーションの準備手順として位相相関を使用する方法を説明します。このプロセスでは、関数 imregcorr を使用して位相相関を実行し、そのレジストレーション結果を関数 imregister に渡して最適化ベースのレジストレーションの初期条件として使用します。位相相関と最適化ベースのレジストレーションは相補アルゴリズムです。位相相関は全体的な配置を検出するのに適しており、イメージの位置が大幅にずれている場合でも使用できます。最適化ベースのレジストレーションは、初期条件が適切であれば正確な位置合わせの解を求めるのに適しています。

レジストレーションの参照イメージとなるイメージを読み取ります。

fixed = imread('cameraman.tif');
imshow(fixed);

回転、等方性スケーリングおよび y 方向のせん断を使用して、このイメージを意図的に歪めることにより、レジストレーションされていないイメージを作成します。

theta = 170;
rot = [cosd(theta) sind(theta) 0;... 
    sind(theta) cosd(theta) 0;... 
    0 0 1]; 
sc = 2.3;
scale = [sc 0 0; 0 sc 0; 0 0 1]; 
sh = 0.5;
shear = [1 sh 0; 0 1 0; 0 0 1]; 

tform = affine2d(shear*scale*rot);
moving = imwarp(fixed,tform); 

ノイズをイメージに追加し、結果を表示します。

moving = moving + uint8(10*rand(size(moving)));
imshow(moving)

これら 2 つのイメージを位置合わせするために必要なレジストレーションを推定します。関数 imregcorr により、変換を定義する affine2d オブジェクトが返されます。

tformEstimate = imregcorr(moving,fixed);

推定された幾何学的変換を位置がずれているイメージに適用します。'OutputView' を指定して、レジストレーションされたイメージが必ず参照イメージと同じサイズになるようにします。元のイメージとレジストレーションされたイメージを左右に並べて表示します。imregcorr によって、2 つのイメージの回転やスケーリングの相違点がうまく処理されていることがわかります。レジストレーションされたイメージ movingReg は元のイメージ fixed とほぼ同じ位置にあります。しかし、いくらかずれが残っています。imregcorr では、回転やスケーリングの歪みは適切に処理できますが、せん断の歪みは十分に処理できません。

Rfixed = imref2d(size(fixed));
movingReg = imwarp(moving,tformEstimate,'OutputView',Rfixed);
imshowpair(fixed,movingReg,'montage');

関数 imshowpair を使用して元のイメージの上に位置合わせされたイメージを重ねて表示します。この表示では、imshowpair は色を使用して、位置のずれがある領域を強調表示しています。

imshowpair(fixed,movingReg,'falsecolor');

レジストレーションを完了するには、imregcorr によって返された推定された変換を関数 imregister に初期条件として渡します。imregister は演算の開始時に 2 つのイメージの位置がほぼ合っている場合、より効果的です。この情報は imregister によって推定された変換を使用して imregcorr に提供します。この例では、同一センサーで得られた 2 つのイメージ レジストレーションに対する既定のオプティマイザーおよびメトリクスの値 ('monomodal') を使用します。

[optimizer, metric] = imregconfig('monomodal');
movingRegistered = imregister(moving, fixed,...
    'affine', optimizer, metric,'InitialTransformation',tformEstimate);

このレジストレーションの結果を表示します。imregcorr によって適切な初期条件が提供されたため、imregister では正確なレジストレーションが行われています。

imshowpair(fixed, movingRegistered,'Scaling','joint');

参考

| | |