Image Registration
画像レジストレーションでは、特徴点の対応付けやピクセル類似度、変換モデルを使って、同じシーンを写した画像を1つの座標系に位置合わせします。
画像レジストレーションは、同じシーンを撮影した2枚以上の画像を位置合わせし、物理的に同じ点がすべての画像で同じピクセル座標に対応するようにするコンピュータービジョンの処理です。画像の撮影時刻、視点、センサーは異なる場合があります。たとえば、1月と6月に撮影した衛星画像、同じ患者のMRIとCTスキャン、揺れるカメラで撮影した連続フレームなどです。レジストレーション後は、画像をピクセル単位で比較したり、1つのビューに融合したり、モザイクにつなぎ合わせたりできます。
レジストレーションでは、一方の画像を固定画像または参照画像として指定し、もう一方の移動画像を変換して、その座標系に合わせます。そのため、画像の位置合わせをどう測定するか、どの種類の幾何変換を許可するか、最適な変換をどう探索するかという3つの選択が必要です。変換を推定した後、移動画像を再サンプリングします。この際、補間によって新しい位置のピクセル値を計算します。
特徴ベースと輝度ベースの手法#
特徴点ベースのレジストレーションでは、両方の画像からコーナーやブロブなどの特徴的な点を検出し、ORBやSIFTなどの記述子で表現して、画像間で記述子を照合します。一致したキーポイントから対応する位置のペアを得て、RANSACなどのロバスト推定器が誤対応を除外しながら変換を推定します。特徴点手法は高速で大きな変位にも対応するため、パノラマ合成やドローンマッピングで一般的に使われます。また、学習ベースの画像マッチングは、手作業で設計した記述子が苦手とするシーンにも適用できます。この例では、既知の回転、スケール、移動量でテスト写真をワープさせた後、OpenCVで変換を復元します。
import cv2
import numpy as np
from skimage import data
# Fixed image, and a moving copy rotated 10 degrees, scaled 1.1x, and shifted (25, -15) pixels
fixed = data.camera()
warp = cv2.getRotationMatrix2D((256, 256), 10, 1.1)
warp[:, 2] += (25, -15)
moving = cv2.warpAffine(fixed, warp, (512, 512))
# Detect and match ORB features in both images
orb = cv2.ORB_create(1000)
kp_moving, des_moving = orb.detectAndCompute(moving, None)
kp_fixed, des_fixed = orb.detectAndCompute(fixed, None)
matches = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True).match(des_moving, des_fixed)
src = np.float32([kp_moving[m.queryIdx].pt for m in matches])
dst = np.float32([kp_fixed[m.trainIdx].pt for m in matches])
# Fit a similarity transform (rotation, scale, translation) with RANSAC, rejecting wrong matches
M, inliers = cv2.estimateAffinePartial2D(src, dst, method=cv2.RANSAC)
angle, scale = np.degrees(np.arctan2(M[1, 0], M[0, 0])), np.hypot(M[0, 0], M[1, 0])
print(f"Kept {inliers.sum()} of {len(matches)} matches: rotation {angle:.2f} degrees, scale {scale:.3f}")
# Resample the moving image into the fixed image's coordinates
registered = cv2.warpAffine(moving, M, (512, 512))
cv2.imwrite("registered.png", registered)Kept 497 of 567 matches: rotation 10.01 degrees, scale 0.910が出力されます。推定された変換は適用したワープの逆で、10度の回転を元に戻し、スケールを1/1.1にします。また、registered.pngは、重なり合う領域で元の写真と位置が一致します。
輝度ベースのレジストレーションでは、明示的な特徴点を使わず、ピクセル値を直接比較し、類似度指標が最大になるように変換を調整します。この考え方はBruce LucasとTakeo Kanadeにさかのぼります。2人が1981年に発表した「An Iterative Image Registration Technique with an Application to Stereo Vision」は、現在オプティカルフローにも使われる手法を導入しました。相関は同じセンサーで撮影した画像に適しており、1990年代半ばに医用画像レジストレーション向けに導入された相互情報量は、MRIとCTのように同じ組織が異なる明るさで写るモダリティ間の処理に適しています。多くの場合、勾配降下法を用いた粗密画像ピラミッド上でオプティマイザーが最適なパラメーターを探索します。SimpleITKレジストレーションフレームワークなどのツールキットでは、評価指標、オプティマイザー、変換、補間器を個別のコンポーネントとして指定できます。
2019年にGuha Balakrishnanらが発表したVoxelMorphのような深層学習手法では、畳み込みニューラルネットワークをトレーニングして、1回の順伝播で変形場を予測します。これにより、ペアごとの最適化に数分以上かかっていた処理を、GPU上で1秒未満の予測に置き換えられます。
変換モデルの選択#
変換モデルは、画像間で実際に異なる要素に合わせて選ぶ必要があります。
- 並進と剛体変換: 距離を保ったまま移動し、剛体変換の場合は回転も行います。同じ剛体をスキャンした画像によく使われます。
- 相似変換とアフィン変換:相似変換は一様スケーリングを追加し、アフィン変換は非一様スケーリングとせん断を追加します。画像全体に1つの変換を適用します。撮影倍率がわずかに異なる衛星画像に適しています。
- 射影変換(ホモグラフィ): 書類スキャンやパノラマのような、平面シーンや回転カメラの視点変化をモデル化します。
- 変形可能変換: スキャン間で形状が変化する軟組織などを扱うため、領域ごとに独立した移動を許可します。
柔軟性の高いモデルは、分析で検出すべき実際の変化まで、ほぼ何でも当てはめる可能性があります。そのため、位置合わせでは通常、もっともらしい中で最も単純なモデルから始め、位置合わせ誤差が残る場合にのみ柔軟性を高めます。奥行きのあるシーンでカメラが動くと、単一の2D変換では除去できない視差が生じます。この場合の位置合わせには、エピポーラ幾何と3D再構成を利用します。
レジストレーションの活用分野#
リモートセンシングや衛星画像解析では、レジストレーションが変化検出の最初のステップです。同じ地域を数か月の間隔で撮影した画像は、モデルが新しい建設や森林伐採を検出する前に位置を合わせる必要があります。わずかなずれでも、道路の縁に沿った変化として見えてしまうためです。医用画像解析では、異なる診察時に撮影したスキャンを位置合わせすることで、臨床医が腫瘍の成長を測定できます。PETとCTの位置を合わせると、代謝活動と解剖構造を組み合わせられます。また、ラベル付きアトラスを新しいスキャンに位置合わせすると、解剖学的ラベルを転送できます。これは脳構造の画像セグメンテーションでよく使われる手法です。
動画アプリケーションでは、連続フレームを位置合わせしてカメラの動きを推定します。手ぶれ補正はその動きを除去し、トラッカーは移動カメラで撮影した映像において、カメラの動きを物体の動きと誤認しないように利用します。Ultralytics YOLOの物体追跡でデフォルトのTrackTrackトラッカーは、半分の解像度で疎なオプティカルフローを使ってコーナー特徴を追跡し、RANSACで相似変換を推定することで、各フレームを直前のフレームに位置合わせします。これにより、ドローンや車両のカメラ映像でも、トラックを適切な物体に追従させられます。










