Image Registration
图像配准会使用特征匹配或像素相似度以及变换模型,将同一场景的图像对齐到同一坐标系中。
图像配准是计算机视觉中的一项技术,用于对齐同一场景的两张或多张图像,使所有图像中的每个实际空间点都落在相同的像素坐标上。图像可能来自不同时间、视角或传感器,例如 1 月和 6 月拍摄的卫星图像、同一患者的 MRI 和 CT 扫描,或抖动相机连续拍摄的帧。配准后,可以逐像素比较图像、将图像融合成一个视图,或拼接成一幅镶嵌图。
配准时会指定一幅图像为固定图像或参考图像,并将另一幅移动图像变换到它的坐标系中。这涉及三个选择:如何衡量图像是否对齐、允许使用哪种几何变换,以及如何搜索最佳变换。估算出变换后,会对移动图像重新采样,并通过插值计算新位置的像素值。
基于特征和基于强度的方法#
基于特征的配准会在两幅图像中检测角点和斑点等显著点,用 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;他们在 1981 年发表的论文《一种用于立体视觉的迭代图像配准技术》中介绍了如今也用于光流的方法。相关性适合来自同一传感器的图像;而 20 世纪 90 年代中期为医学配准引入的互信息,则适用于 MRI 与 CT 等不同模态,因为同一组织在不同模态中的亮度表现不同。优化器通常会在由粗到细的图像金字塔上使用梯度下降搜索最佳参数;SimpleITK 配准框架等工具包会将度量标准、优化器、变换和插值器作为独立组件提供。
诸如 VoxelMorph 这样的深度学习方法由 Guha Balakrishnan 及其同事于 2019 年发表。它们会训练一个卷积神经网络,通过一次前向传播预测形变场,从而用 GPU 上不到一秒的预测取代耗时数分钟甚至更久的逐图像对优化。
选择变换模型#
变换应与图像之间的实际差异相匹配:
- 平移和刚性变换: 平移;刚性变换还包括旋转,且保持距离不变。常用于同一刚性物体的扫描图像。
- 相似变换与仿射变换:相似变换会增加均匀缩放,仿射变换则会增加非均匀缩放和剪切;两者都对整幅图像应用同一个变换。适用于拍摄时比例略有差异的卫星图像。
- 投影变换(单应性): 用于模拟平面场景或旋转相机产生的透视变化,例如文档扫描和全景拼接。
- 可变形变换: 允许各个区域独立移动,适用于扫描间形状发生变化的软组织。
灵活性更高的模型几乎可以拟合任何内容,包括分析原本应该检测到的真实变化,因此配准通常从最简单且合理的模型开始,只有在仍存在对齐误差时才增加灵活性。具有深度信息的场景和移动相机拍摄的画面会出现视差,无法通过单一的 2D 变换消除,因此需要借助极线几何和3D 重建进行对齐。
配准的应用场景#
在遥感和卫星图像分析中,配准是变化检测的第一步:在模型标记新建筑或森林砍伐之前,必须先对齐相隔数月拍摄的同一地区图像,否则轻微偏移会让每条道路边缘看起来都发生了变化。在医学图像分析中,对齐不同时间拍摄的扫描图像有助于临床医生测量肿瘤是否增大;将 PET 与 CT 对齐可以结合代谢活动和解剖结构;将带标签的图谱配准到新扫描图像,则可以迁移其解剖标签,这是图像分割脑部结构的经典方法。
在视频应用中,系统会配准连续帧以估算相机运动。视频稳定会消除这种运动,跟踪器也会利用它避免将相机运动误认为物体运动。在 Ultralytics YOLO 目标跟踪中,默认的 TrackTrack 跟踪器会通过半分辨率稀疏光流跟踪角点特征,将每帧配准到前一帧,并用 RANSAC 拟合相似变换,从而让无人机或车载摄像头拍摄的视频中的跟踪目标始终保持正确。










