【计算机视觉】图像配准(Image Registration)
(Source:https://blog.sicara.com/image-registration-sift-deep-learning-3c794d794b7a)
图像配准方法概述
图像配准广泛用于遥感,医学图像,计算机视觉等。通常,它的应用根据图像获取方式主要分为四组:
- 不同视角(多视角分析)——从不同视角获取同一场景图像。其目的是为了获得更大的2D视图或者扫描场景的3D表示。应用示例:遥感-被检区域图像的拼接。计算机视觉-形状恢复(立体形状)。
- 不同时间(多时分析)——从不同时间获取同一场景图像,通常是定期的,可能在不同条件下。其目的是找到和评价连续获得的图像之间场景的改变。应用示例:遥感-全球土地使用监督,景观规划。计算机视觉-安防自动改变检测,运动追踪。医学图像-愈合治疗监督,肿瘤进展监督。
- 不同传感器(多模态分析)——从不同传感器获得同一场景图像。其目的是整合不同来源的信息来获得更复杂更细节的场景表示。应用示例:遥感-不同特征传感器信息融合,如有更好空间分辨率的全色图像,有更好光谱分辨率的彩色/多光谱图像,或与云层和光照无关的雷达图像。研究结果可应用于放射治疗和核医学领域。
- 场景到模型的配准。一个场景的图像和场景的模型配准。模型可以是场景的计算机表示,例如GIS中的地图或数字海拔模型(DEM),有相似内容的另一个场景,'平均'标本等。其目的是在场景/模型中定位获得的图像,并且/或者比较它们。应用示例:遥感-航空或者卫星数据到地图或者其它GIS层的配准。计算机视觉-目标模板匹配实时图像,自动质检。医学图像-病人图像和数字解剖集的比较,标本分类。
由于配准图像的多样性和各种类型的退化,不能设计出适合所有配准任务的通用方法。每种方法不仅要考虑图像之间假定的几何变形类型,还要考虑辐射变形和噪声损坏,所需配准的准确率和应用数据特征。
尽管如此,配准方法主要包含以下四步(图1):
- 特征检测。手动或者可能自动检测显著和独特的对象(闭合边界区域,边缘,轮廓,交线,角点等)。为了进一步处理,这些特征可以通过点来表示(重心,线尾,特征点),这些点称为控制点(CP)。
- 特征匹配。建立场景图像和参考图像特征之间的相关性。使用各种各样的特征描述符,相似性度量,连同特征的空间相关性。
- 转换模型估计。估计将感测图像和参考图像对齐的所谓映射函数的类型和参数。映射函数的参数通过特征相关性计算。
- 图像重采样和转换。使用映射函数转换感测图像。使用合适的插值技术计算非整数坐标的图像值。
图1:图像配准四个步骤:上-特征检测。中-通过不变的描述符来特征匹配。左下-利用建立的相关性估计转换模型。右下-用合适的插值技术进行图像冲采样和转换。
每个配准步骤的实现都有自己典型的问题。首先,必须决定哪种特征适合给定的任务。特征应该是有鉴别性的目标,并且在图像上广泛存在以及容易检测。通常,特征的物理可解释性是需要的。参考图像和感测图像上的特征必须有足够相同的元素,甚至在图像没有准确地覆盖同样的场景或者有物体阻挡又或者其它的改变的情况下。检测方法应该有好的定位准确性,并且应该对假定的图像退化不敏感。理想情况下,算法能在场景所有投影情况下检测到同样的特征,不管特定的图像变形。
在特征匹配步骤,由不正确的特征检测或者图像退化造成的问题可能就出现了。由于不同的图像条件或者传感器的不同光谱敏感性,物理上的相关特征可能是不相似的。特征描述和相似性衡量的选择必须考虑到这些因素。对于假定的退化特征描述符应该是不变的。同时,它们必须有足够的可鉴别性来区分不同特征以及足够的稳定性,为了不被轻微的特征变化和噪音所影响。在不变量空间的匹配算法应该是鲁棒和高效的。在其它图像上没有相关对应的单一特征应该不影响性能。
根据图像获取步骤和期望的图像退化先验知识来选择映射函数的类型。如果没有一个先验信息,模型应该足够灵活和通用来处理所有可能出现的退化。特征检测方法的准确性,特征相关性估计的可靠性,以及可接受的近似误差也需要考虑。此外,必须决定图像中哪种差异通过配准来移除。如果目标是变化检测,则不希望移除正在搜索的差异。这个问题是非常重要的并且很难。
最终,合适的重采样技术的选择要取决于要求的插值准确性和计算复杂度来折中。在大多数情况下最近邻或双线性插值就够了;然而,一些应用要求更准确的方法。
从传统方法到深度学习
- 传统的基于特征的方法
自21世纪初以来,图像配准主要使用基于特征的方法。这些方法有三个步骤:关键点检测和特征描述,特征匹配,图像变换。简单的说,我们选择两个图像中的感兴趣点,将参考图像(reference image)与感测图像(sensed image)中的等价感兴趣点进行关联,然后变换感测图像使两个图像对齐。
Feature-based methods for an image couple associated by a homography transformation
关键点检测和特征描述
关键点就是感兴趣点,它表示图像中重要或独特的内容(边角,边缘等)。每个关键点由描述符表示,关键点基本特征的特征向量。描述符应该对图像变换(定位,缩放,亮度等)具有鲁棒性。许多算法使用关键点检测和特征描述:
- SIFT^4(Scale-invariant feature transform)是用于关键点检测的原始算法,但它不能免费用于商业用途。SIFT特征描述符对于均匀缩放,方向,亮度变化和对仿射失真不变的部分不会发生变化。
- SURF^5(Speeded Up Robust Features)是一个受SIFT启发的探测器和描述符。它的优点是非常快。它同样是有专利的。
- ORB^6(Oriented FAST and Rotated BRIEF)是一种快速的二进制描述符,它基于 FAST^7(Features from Accelerated Segment Test)关键点检测和 BRIEF^8(Binary robust independent elementary features)描述符的组合。它具有旋转不变性和对噪声的鲁棒性。它由OpenCV实验室开发,是SIFT有效的免费替代品。
- AKAZE^9(Accelerated-KAZE)是KAZE^10快速版本。它为非线性尺度空间^11提供了快速的多尺度特征检测和描述方法,具有缩放和旋转不变性。
这些算法都可以在OpenCV中轻松使用。在下面的例子中使用了AKAZE的OpenCV实现。其他算法的代码大致相同,只需要修改算法的名称。
import numpy as np import cv2 as cv img = cv.imread('image.jpg') gray= cv.cvtColor(img, cv.COLOR_BGR2GRAY) akaze = cv.AKAZE_create() kp, descriptor = akaze.detectAndCompute(gray, None) img=cv.drawKeypoints(gray, kp, img) cv.imwrite('keypoints.jpg', img)
Image Keypoints
更多关于特征检测与描述请参见:OpenCV tutorial
特征匹配
一旦在一对图像中识别出关键点,我们就需要将两个图像中对应的关键点进行关联或“匹配”。其中一种方法是BFMatcher.knnMatch()
。这个方法计算每对关键点之间的描述符的距离,并返回每个关键点的k个最佳匹配中的最小距离。
然后我们设定比率来保持正确率。实际上,为了使匹配更可靠,匹配的关键点需要比最近的错误匹配更靠近。
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img1 = cv.imread('image1.jpg', cv.IMREAD_GRAYSCALE) # referenceImage img2 = cv.imread('image2.jpg', cv.IMREAD_GRAYSCALE) # sensedImage # Initiate AKAZE detector akaze = cv.AKAZE_create() # Find the keypoints and descriptors with SIFT kp1, des1 = akaze.detectAndCompute(img1, None) kp2, des2 = akaze.detectAndCompute(img2, None) # BFMatcher with default params bf = cv.BFMatcher() matches = bf.knnMatch(des1, des2, k=2) # Apply ratio test good_matches = [] for m,n in matches: if m.distance < 0.75*n.distance: good_matches.append([m]) # Draw matches img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,good_matches,None,flags=cv.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) cv.imwrite('matches.jpg', img3)
Matched Keypoints
OpenCV中关于特征匹配方法的实现
图像变换
在匹配至少四对关键点之后,我们就可以将一个图像转换为另一个图像,称为图像变换^12(image warping)。空间中相同平面的两个图像通过单应性变换^13(Homographies)进行关联。Homographies是具有8个自由参数的几何变换,由3x3矩阵表示图像的整体变换(与局部变换相反)。因此,为了获得变换后的感测图像,需要计算Homographies矩阵。
为了得到最佳的变换,我们需要使用RANSAC算法检测异常值并去除。它内置在OpenCV的findHomography方法中。同时也存在RANSAC算法的替代方案,例如LMEDS:Least-Median鲁棒方法。
# Select good matched keypoints ref_matched_kpts = np.float32([kp1[m[0].queryIdx].pt for m in good_matches]).reshape(-1,1,2) sensed_matched_kpts = np.float32([kp2[m[0].trainIdx].pt for m in good_matches]).reshape(-1,1,2) # Compute homography H, status = cv.findHomography(ref_matched_kpts, sensed_matched_kpts, cv.RANSAC,5.0) # Warp image warped_image = cv.warpPerspective(img1, H, (img1.shape[1]+img2.shape[1], img1.shape[0])) cv.imwrite('warped.jpg', warped_image)
Sensed image after warping
深度学习方法
目前大多数关于图像配准的研究涉及深度学习。在过去的几年中,深度学习使计算机视觉任务具有先进的性能,如图像分类,物体检测和分割。
特征提取
深度学习用于图像配准的第一种方式是用于特征提取。卷积神经网络设法获得越来越复杂的图像特征并进行学习。2014年以来,研究人员将这些网络应用于特征提取的步骤,而不是使用SIFT或类似算法。
- 2014年,Dosovitskiy等人提出了一种通用的特征提取方法,使用未标记的数据训练卷积神经网络。这些特征的通用性使转换具有鲁棒性。这些特征或描述符的性能优于SIFT描述符以匹配任务。
- 2018年,Yang等人开发了一种基于相同思想的非刚性配准方法。他们使用预训练的VGG网络层来生成一个特征描述符,同时保留卷积信息和局部特征。这些描述符的性能也优于类似SIFT的探测器,特别是在SIFT包含许多异常值或无法匹配足够数量特征点的情况下。
Homography学习
研究人员利用神经网络直接学习几何变换对齐两幅图像,而不仅仅局限于特征提取。
监督学习
在2016年,DeTone等人发表了 Deep Image Homography Estimation,提出了HomographyNe回归网络,这是一种VGG风格模型,可以学习两幅相关图像的单应性。该算法具有以端到端的方式同时学习单应性和CNN模型参数的优势,不需要前两个阶段的过程!
Regression HomographyNet
网络产生八个数值作为输出。以监督的方式进行训练,并计算输出和真实单应性之间的欧几里德损失。
Supervised Deep Homography Estimation
与其他有监督方法一样,该单应性估计方法需要有标记数据。虽然很容易获得真实图像的单应性,但在实际数据上要昂贵得多。
无监督学习
基于这个想法,Nguyen等人提出了一种无监督的深度图像单应性估计方法。他们保留了相同结构的CNN,但是使用适合无监督方法的损失函数:不需要人工标签的光度损失(photometric loss)函数。相反,它计算参考图像和感测变换图像之间的相似性。
他们的方法引入了两种新的网络结构:张量直接线性变换和空间变换层。我们可以简单地使用CNN模型输出的单应性参数获得变换后的感测图像,然后我们使用它们来计算光度损失。
Unsupervised Deep Homography Estimation
作者声称,与传统的基于特征的方法相比,这种无监督方法具有相当或更高的准确率和鲁棒性,并且具有更快的执行速度。此外,与有监督方法相比,它具有更好的适应性和性能。
其他方法
强化学习
强化学习方法作为医学应用的常用方法正在得到越来越多的关注。与预定义的优化算法相反,在这种方法中,我们使用训练好的代理进行配准。
A visualization of the registration pipeline for reinforcement learning’s technics
- 2016年,Liao 等人首先使用强化学习进行图像配准。他们的方法基于有监督算法进行端到端的训练。它的目标是通过寻找最佳的运动动作序列来对齐图像。这种方法优于最先进的方法,但它只能用于刚性转换。
- 强化学习也可以用于更复杂的转换。在Robust non-rigid registration through agent-based action learning论文中,Krebs等人使用人工代理优化变形模型参数。该方法对前列腺MRI图像的患者间的配准进行实验,在2-D和3-D中表现出了较好的结果。
复杂的转换
在当前图像配准研究中占较大比例的是医学影像。通常,由于患者的局部变形(因呼吸,解剖学变化等),两个医学图像之间的变换不能简单地通过单应矩阵描述,这需要更复杂的变换模型,例如由位移矢量场表示微分同胚(diffeomorphisms)。
Example of deformation grid and displacement vector field on cardiac MRI images
研究人员开始尝试使用神经网络来估计这些具有许多参数的大变形模型。
- 一个例子是上面提到的Krebs等人的强化学习方法。
- 2017年De Vos等人提出了DIRNet。它使用CNN来预测控制点网格,该控制点用于生成位移矢量场,然后根据参考图像变换感测图像
Schematics of the DIRNet with two input images from the MNIST data
- Quicksilver配准解决了类似的问题。Quicksilver使用深度编码-解码器网络直接在预测图像上进行变形。
参考文献:
[1] Image registration methods: a survey (2003)
[2] Image Registration: From SIFT to Deep Learning