このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
レジストレーションの前処理手順としての位相相関の使用
この例では、自動イメージ レジストレーションの準備手順として位相相関を使用する方法を説明します。このプロセスでは、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.1; shear = [1 sh 0; 0 1 0; 0 0 1]; tform = affinetform2d(shear*scale*rot); moving = imwarp(fixed,tform);
ノイズをイメージに追加し、結果を表示します。
moving = imnoise(moving,"gaussian");
imshow(moving)
これら 2 つのイメージを位置合わせするために必要なレジストレーションを推定します。関数 imregcorr
により、変換を定義する simtform2d
オブジェクトが返されます。
tformEstimate = imregcorr(moving,fixed)
tformEstimate = simtform2d with properties: Dimensionality: 2 Scale: 0.4300 RotationAngle: -169.1579 Translation: [257.9866 302.4839] R: [2x2 double] A: [3x3 double]
推定された幾何学的変換を位置がずれているイメージに適用します。名前と値の引数 OutputView
を指定して、レジストレーションされたイメージが必ず参照イメージと同じサイズになるようにします。
Rfixed = imref2d(size(fixed)); movingReg = imwarp(moving,tformEstimate,OutputView=Rfixed);
元のイメージとレジストレーションされたイメージをモンタージュに表示します。imregcorr
によって、2 つのイメージの回転やスケーリングの相違点がうまく処理されていることがわかります。レジストレーションされたイメージ movingReg
は元のイメージ fixed
とほぼ同じ位置にあります。しかし、いくらかずれが残っています。imregcorr
では、回転やスケーリングの歪みは適切に処理できますが、せん断の歪みは十分に処理できません。
imshowpair(fixed,movingReg,"montage");
関数 imshowpair
を使用して元のイメージの上に位置合わせされたイメージを重ねて表示します。この表示では、imshowpair
は色を使用して、位置のずれがある領域を強調表示しています。
imshowpair(fixed,movingReg,"falsecolor");
レジストレーションを完了するには、imregcorr
によって返された推定された変換を関数 imregister
に初期条件として渡します。imregister
は演算の開始時に 2 つのイメージの位置がほぼ合っている場合、より効果的です。この情報は imregister
によって推定された変換を使用して imregcorr
に提供します。この例では、同一センサーで得られた 2 つのイメージのレジストレーションに対して既定のオプティマイザーおよびメトリクスの値を使用します (モノモーダル構成) 。
[optimizer,metric] = imregconfig("monomodal"); movingRegistered = imregister(moving,fixed,"affine", ... optimizer,metric,InitialTransformation=tformEstimate);
このレジストレーションの結果を表示します。imregcorr
によって適切な初期条件が提供されれば、imregister
では正確なレジストレーションが行われます。
imshowpair(fixed,movingRegistered,Scaling="joint");
参考
imregcorr
| imregister
| imregconfig
| imwarp