【计算机视觉】图像配准(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
【计算机视觉】图像配准(Image Registration)的更多相关文章
- 深度图像配准(Registration)原理
机器视觉中,3D相机产生的深度图像(depth image)通常需要配准(registration),以生成配准深度图像(registed depth image).实际上配准的目的就是想让深度图和彩 ...
- 深度学习图像配准 Image Registration: From SIFT to Deep Learning
Image Registration is a fundamental step in Computer Vision. In this article, we present OpenCV feat ...
- 图像配准:从SIFT到深度学习
图像配准(Image Registration)是计算机视觉中的基本步骤.在本文中,我们首先介绍基于OpenCV的方法,然后介绍深度学习的方法. 什么是图像配准 图像配准就是找到一幅图像像素到另一 ...
- 非刚性图像配准 matlab简单示例 demons算法
2011-05-25 17:21 非刚性图像配准 matlab简单示例 demons算法, % Clean clc; clear all; close all; % Compile the mex f ...
- Opencv探索之路(二十):制作一个简易手动图像配准工具
近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了.然后老师叫我尝试 ...
- CV 两幅图像配准
http://www.cnblogs.com/Lemon-Li/p/3504717.html 图像配准算法一般可分为: 一.基于图像灰度统计特性配准算法:二.基于图像特征配准算法:三.基于图像理解的配 ...
- 图像配准建立仿射变换模型并用RANSAC算法评估
当初选方向时就由于从小几何就不好.缺乏空间想像能力才没有选择摄影測量方向而是选择了GIS. 昨天同学找我帮他做图像匹配.这我哪里懂啊,无奈我是一个别人有求于我,总是不好意思开口拒绝的人.于是乎就看着他 ...
- 【图像配准】基于互信息的图像配准算法:MI、EMI、ECC算法
简单介绍: 基于互信息的图像配准算法以其较高的配准精度和广泛的适用性而成为图像配准领域研究的热点之中的一个.而基于互信息的医学图像配准方法被觉得是最好的配准方法之中的一个.基于此.本文将介绍简单的基于 ...
- Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正
图像配准需要将一张测试图片按照第二张基准图片的尺寸.角度等形态信息进行透视(仿射)变换匹配,本例通过Surf特征的定位和匹配实现图像配准. 配准流程: 1. 提取两幅图像的Surf特征 2. 对Sur ...
随机推荐
- LightOJ - 1102 - Problem Makes Problem(组合数)
链接: https://vjudge.net/problem/LightOJ-1102 题意: As I am fond of making easier problems, I discovered ...
- [VSCode] Custom settings
{ // UI IMPROVEMENTS —————————————————— // Part 1. "editor.minimap.enabled": false, " ...
- mage Ansible学习2 Playbook
一.上集回顾 1.运维: 手动 --> 标准化 --> 工具化 --> 自动化 --> 智能化 2.工具化 OS Install:PXE ,Cobbler:Virutaliza ...
- HTML5全屏操作API
一.定义:HTML5规范允许自定义网页上的任一元素全屏显示,存在兼容问题 二.使用: ①基本: Node.RequestFullScreen()开启全屏显示 Node.CancelFullScreen ...
- PHP操作数据库(以MySQL为例)
一.开启扩展配置: 在php.ini的extension板块中增加一行extension=php_mysqli.dll 重启PHP,在phpinfo查看 <?php echo phpinfo() ...
- C结构体struct 和 共用体union的使用测试
#include <stdio.h> struct { char name[10]; char sex; char job; int num; union{ //联合只能共用同一个内存 i ...
- cf 799E
$des$有 $n$ 个物品,第 $i$ 个物品的价格是 $v_i$ ,有两个人,每个人都喜欢 $n$ 个物品中的一些物品.要求选出正好 $m$ 个物品,满足选出的物品中至少有 $k$ 个物品被第一个 ...
- Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...
- Angular惰性加载的特性模块
一:Angular-CLI建立应用 cmd命令:ng new lazy-app --routing (创建一个名叫 lazy-app 的应用,而 --routing 标识生成了一个名叫 app- ...
- Vue.js 十五分钟入门
本文经授权转载,仅用于学习,版权归原作者所有. TypeScript 为 JavaScript 带来静态类型检查,让 JavaScript 编写中大型应用的时候可以应用工具来避免部分错误. Vue 很 ...