このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
レジストレーションの前処理手順としての位相相関の使用
この例では、自動イメージ レジストレーションの準備手順として位相相関を使用する方法を説明します。このプロセスでは、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.4182
RotationAngle: -167.1995
Translation: [245.7549 302.3793]
R: [2×2 double]
A: [-0.4078 0.0926 245.7549
-0.0926 -0.4078 302.3793
0 0 1.0000]
推定された幾何学的変換を位置がずれているイメージに適用します。名前と値の引数 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