目录
图像处理中的图像配准是什么?
图像配准中使用的变换模型类型
1.仿射变换
2. 射影变换(单应性)
3.非刚性变换:
图像配准方法的类型
基于特征的方法
1. SIFT (Scale-Invariant Feature Transform)
2. SURF (Speeded-Up Robust Features,加速鲁棒特性)
3.ORB (Oriented FAST and Rotated BRIEF)
4. RANSAC (Random Sample Consensus)
基于强度的方法
1. 相互信息
2.均方误差(MSE)
3. B-splines
4. Thin-Plate Splines
基于深度学习的方法
1. U-Net
2. 体素形态
3. DeepReg
实现图像配准
编辑
结论
图像配准将同一场景的多幅图像对齐到共同的坐标系,以便进行准确的比较和分析。
在本文中,我们将探讨图像配准的概念和不同的图像配准方法。
图像处理中的图像配准是什么?
图像对齐或图像配准是将不同时间、从不同视点或使用不同传感器拍摄的同一场景的图像叠加在一起以实现空间对应的过程。目标是对齐这些图像,使它们对应于相同的空间坐标。这在医学成像、遥感和计算机视觉等各个领域都至关重要,因为这些领域需要精确对齐图像才能进行准确的分析和解释。
- 时间对齐:对齐不同时间拍摄的图像以跟踪随时间的变化。
- 空间对齐:对齐从不同视点或传感器捕获的图像以创建统一的视图。
- 多模式对齐:对齐使用不同成像模式拍摄的图像(例如医学成像中的 MRI 和 CT 扫描)。
图像配准中使用的变换模型类型
变换模型是通过将一幅图像的坐标映射到另一幅图像来对齐图像的数学模型。它们大致可分为:
1.仿射变换
保留点、直线和平面的线性变换。它包括旋转、缩放、平移和剪切。
其中 A 是线性变换矩阵, b 是平移向量。
用例:适用于对齐具有相似视角但比例或方向不同的图像。
2. 射影变换(单应性)
一种更复杂的变换,可以模拟透视变化,例如由摄像机角度引起的变化。
用例:适用于对齐从不同视点捕获的图像,其中透视失真很明显。
3.非刚性变换:
考虑非纯线性变形(例如扭曲和拉伸)的模型。
类型:Thin-Plate Splines, B-Splines,
用例:用于对齐具有复杂扭曲或生物结构的图像。
图像配准方法的类型
图像配准涉及对齐图像以实现空间对应。根据图像的性质和应用的具体要求,使用不同的方法。
基于特征的方法
1. SIFT (Scale-Invariant Feature Transform)
SIFT 是一种用于检测和描述图像局部特征的稳健方法。它可识别不受比例和旋转影响的关键点,从而能够有效地匹配大小和方向各异的图像之间的特征。
关键步骤:
- 关键点检测:识别图像中的关键点。
- 功能描述:为捕捉局部图像区域外观的关键点生成描述符。
应用:物体识别、图像拼接和全景图创建。
2. SURF (Speeded-Up Robust Features,加速鲁棒特性)
SURF 是 SIFT 的加速替代方案,旨在提高速度的同时保持相似的稳健性。它使用积分图像来加速检测器和描述符的计算。
关键步骤:
- 关键点检测:使用基于 Hessian 矩阵的方法检测关键点。
- 特征描述:使用基于关键点周围像素强度分布的描述符。
应用:实时物体识别、视频跟踪。
3.ORB (Oriented FAST and Rotated BRIEF)
ORB 将 FAST 关键点检测器与 BRIEF 描述符相结合,提供了一种快速高效的特征提取方法。它包含方向信息以提高对旋转的鲁棒性。
关键步骤:
- 关键点检测:使用带有方向信息的 FAST 算法。
- 特性描述:使用BRIEF描述符,它是二进制的并且计算效率高。
应用程序:实时应用,例如机器人和增强现实。
4. RANSAC (Random Sample Consensus)
RANSAC 是一种稳健的算法,用于在处理异常值的同时估计变换模型。它通常与基于特征的方法结合使用,以估计图像之间的最佳变换。
关键步骤:
- 随机采样:选择随机数据子集来估计转换。
- 模型拟合:计算转换模型并评估其质量。
- 异常值检测:识别并排除异常值以提高模型的稳健性。
应用:图像拼接,3D重建。
基于强度的方法
1. 相互信息
互信息测量图像中对应像素强度之间的统计依赖性。它对于来自不同模态的多模态图像配准特别有用。
关键步骤:
- 直方图分析:计算图像强度的联合直方图。
- 熵计算:测量图像之间共享的信息量。
应用:医学成像、多模式配准。
2.均方误差(MSE)
MSE 量化了对齐图像中像素强度之间的差异。它是衡量对齐质量的直接指标。
关键步骤:
- 误差计算:计算图像中相应像素之间的平均平方差。
应用:图像配准、图像增强中的质量评估。
3. B-splines
B-splines是一种灵活的平滑变形建模方法。它们将变换表示为基函数的组合,从而实现平滑且连续的变换。
关键步骤:
- 样条构造:使用一组基函数定义变换。
- 优化:调整样条参数以最大限度地减少配准误差。
应用:医学图像配准、形状对齐。
4. Thin-Plate Splines
Thin-Plate Splines用于通过最小化弯曲能量来插值非刚性变换。它们提供可处理复杂变形的平滑变换。
关键步骤:
- 样条插值:基于薄板样条模型计算变换。
- 弯曲能量最小化:确保转换的平稳性。
应用:非刚体图像配准,面部表情建模。
基于深度学习的方法
1. U-Net
U-Net 是一种专为图像分割和配准而设计的卷积神经网络 (CNN) 架构。它具有带跳跃连接的编码器-解码器结构,使其能够捕获详细的空间信息。
关键步骤:
- 网络架构:使用带有跳过连接的编码器-解码器结构。
- 训练:对图像进行训练以学习注册过程。
应用:医学图像配准、图像分割。
2. 体素形态
Voxelmorph 是一种专为图像配准而设计的deep learning模型。它通过从训练数据中学习来预测对齐图像的密集变形场。
关键步骤:
- 网络架构:使用 CNN 预测变形场。
- 训练:对已知变换的图像对进行训练。
应用:医学图像配准、脑成像。
3. DeepReg
DeepReg 是一个用于医学图像配准的端到端深度学习框架。它将特征提取和配准集成到一个模型中,并经过训练以直接优化配准。
关键步骤:
- 端到端学习:将特征提取和注册结合在统一模型中。
- 训练:对带注释的图像对进行训练,以学习最佳配准策略。
应用:医学成像、多模式配准。
这些方法各有优势,适用于各种类型的图像配准任务。方法的选择取决于图像特征、变换的性质以及应用的具体要求等因素。
实现图像配准
我们使用以下步骤实现了图像配准:
- 调整图像大小:确保两个图像都调整为相同的尺寸(500x500 像素)。
- 初始化 ORB 检测器:设置 ORB(Oriented FAST and Rotated BRIEF)特征检测器。
- 检测和提取特征:检测关键点并计算两个图像的描述符。
- 匹配描述符:查找并匹配两个图像之间的描述符。
- 绘制匹配:可视化两幅图像之间的关键点及其匹配。
- 检查匹配:确保至少有 4 个匹配才能计算可靠的转换。
- 计算仿射变换:使用 RANSAC 根据匹配稳健地估计仿射变换模型。
- 扭曲图像:应用计算的变换来对齐和扭曲第一张图像以匹配第二张图像。
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.feature import ORB, match_descriptors, plot_matches
from skimage.transform import AffineTransform, warp, resize
from skimage.measure import ransac
# 加载图像
# 以灰度模式读取两张图像,图像路径需根据实际情况进行调整
image1 = cv2.imread('/content/im1-copy.webp', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('/content/im2-copy.webp', cv2.IMREAD_GRAYSCALE)
# 检查图像是否成功加载
# 如果有一张或两张图像都加载失败,则抛出异常,并提示检查文件路径
if image1 is None or image2 is None:
raise ValueError("一张或两张图像加载失败。请检查文件路径。")
# 将图像调整为相同大小
# 使用抗锯齿功能将图像大小调整为(500, 500),方便后续处理
image1 = resize(image1, (500, 500), anti_aliasing=True)
image2 = resize(image2, (500, 500), anti_aliasing=True)
# 初始化ORB特征检测器
# 设置要检测的关键点数量为500个
orb = ORB(n_keypoints=500)
# 检测图像1的特征点和描述子
# 调用ORB对象的方法来检测并提取图像1中的特征点和对应的描述子
orb.detect_and_extract(image1)
keypoints1 = orb.keypoints
descriptors1 = orb.descriptors
# 检测图像2的特征点和描述子
# 同样地,对图像2进行特征点和描述子的检测与提取操作
orb.detect_and_extract(image2)
keypoints2 = orb.keypoints
descriptors2 = orb.descriptors
# 匹配描述子
# 使用交叉验证的方式匹配图像1和图像2的描述子,得到匹配结果
matches = match_descriptors(descriptors1, descriptors2, cross_check=True)
# 提取匹配的特征点
# 根据匹配结果,从图像1的特征点中提取出对应的源特征点
src = keypoints1[matches[:, 0]]
# 从图像2的特征点中提取出对应的目标特征点
dst = keypoints2[matches[:, 1]]
# 绘制特征点和匹配情况
# 创建一个图像展示的子图布局
fig, ax = plt.subplots(1, 1, figsize=(12, 6))
# 设置图像以灰度模式显示
plt.gray()
# 调用函数绘制特征点匹配情况到指定的坐标轴上
plot_matches(ax, image1, image2, keypoints1, keypoints2, matches)
# 关闭坐标轴显示
ax.axis('off')
# 设置图像标题为“特征点匹配情况”
ax.set_title("特征点匹配情况")
# 展示绘制好的图像
plt.show()
# 验证匹配的数量
# 打印出匹配的特征点对数
print(f"匹配的特征点对数: {len(matches)}")
# 检查是否有足够的匹配数量来计算可靠的变换
# 如果匹配数量小于4,则抛出异常,提示无法计算可靠的变换
if len(matches) < 4:
raise ValueError("匹配数量不足,无法计算可靠的变换")
# 使用RANSAC(随机抽样一致性)算法计算仿射变换以增强鲁棒性
# 将目标特征点和源特征点传入,指定最小采样数为4,残差阈值为2,最大尝试次数为1000
# 计算得到可靠的仿射变换模型以及内点(符合模型的点)信息
model_robust, inliers = ransac((dst, src),
AffineTransform, min_samples=4,
residual_threshold=2, max_trials=1000)
# 对图像进行变换(扭曲)
# 根据计算得到的仿射变换模型的逆变换,对图像1进行扭曲操作,使其与图像2对齐
# 输出形状设置为图像2的形状
registered_image = warp(image1, model_robust.inverse, output_shape=image2.shape)
# 显示结果
# 创建一个新的图像展示布局
plt.figure(figsize=(12, 6))
# 第一个子图,展示图像1
plt.subplot(1, 3, 1)
plt.title('图像1')
plt.imshow(image1, cmap='gray')
# 第二个子图,展示图像2
plt.subplot(1, 3, 2)
plt.title('图像2')
plt.imshow(image2, cmap='gray')
# 第三个子图,展示经过变换对齐后的图像
plt.subplot(1, 3, 3)
plt.title('变换对齐后的图像')
plt.imshow(registered_image, cmap='gray')
# 展示所有子图
plt.show()
输出:
结论
总之,图像配准是对齐图像以确保准确分析和解释的重要技术。通过各种方法(从基于特征的方法(如 ORB 和 SIFT)到基于强度的技术和高级深度学习模型),此过程可以整合在不同条件下或从不同传感器捕获的图像。通过实施这些方法,我们可以实现精确对齐,从而促进在医学成像、遥感和计算机视觉等各个领域提高洞察力和决策能力