专栏首页磐创AI技术团队的专栏图像配准:从SIFT到深度学习

图像配准:从SIFT到深度学习

编译 | 小韩

来源 | sicara.com

目录:

  • 图像配准:从SIFT到深度学习
  • 什么是图像配准
  • 传统的基于特征的方法
    • 关键点检测和特征描述
    • 特征匹配
    • 图像变换
  • 深度学习方法
    • 特征提取
    • Homography学习
    • 监督学习
    • 无监督学习
  • 其他方法
    • 强化学习
    • 复杂的转换

图像配准(Image Registration)是计算机视觉中的基本步骤。在本文中,我们首先介绍基于OpenCV的方法,然后介绍深度学习的方法。

什么是图像配准

图像配准就是找到一幅图像像素到另一幅图像像素间的空间映射关系。这些图像可以是不同时间(多时间配准),不同传感器在不同地方拍摄(多模式配准)。这些图像之间的空间关系可以是刚性(rigid)^1(平移和旋转),仿射(affine)^2(例如剪切),单应性^3(homographies)或复杂的大变形模型(complex large deformations models)。

图像配准具有广泛的应用,适用于同一个场景中有多张图像需要进行匹配或叠加。在医学图像领域以及卫星图像分析和光流(optical flow)方面非常普遍。

CT扫描和MRI配准

在本文中,我们将介绍图像配准的几种不同方法。

传统的基于特征的方法

自21世纪初以来,图像配准主要使用基于特征的方法。这些方法有三个步骤:关键点检测和特征描述,特征匹配,图像变换。简单的说,我们选择两个图像中的感兴趣点,将参考图像(reference image)与感测图像(sensed image)中的等价感兴趣点进行关联,然后变换感测图像使两个图像对齐。

基于特征的方法

关键点检测和特征描述

关键点就是感兴趣点,它表示图像中重要或独特的内容(边角,边缘等)。每个关键点由描述符表示,关键点基本特征的特征向量。描述符应该对图像变换(定位,缩放,亮度等)具有鲁棒性。许多算法使用关键点检测和特征描述:

  • 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)

图像关键点

更过关于特征提取和描述的文档

特征匹配

一旦在一对图像中识别出关键点,我们就需要将两个图像中对应的关键点进行关联或“匹配”。其中一种方法是BFMatcher.knnMatch()。这个方法计算每对关键点之间的描述符的距离,并返回每个关键点的k个最佳匹配中的最小距离。

然后我们设定比率来保持正确率。实际上,为了使匹配更可靠,匹配的关键点需要比最近的错误匹配更靠近。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

img1 = cv.imread('image1.jpg', cv.IMREAD_GRAYSCALE)
img2 = cv.imread('image2.jpg', cv.IMREAD_GRAYSCALE)

# 初始化 AKAZE 探测器
akaze = cv.AKAZE_create()
# 使用 SIFT 查找关键点和描述
kp1, des1 = akaze.detectAndCompute(img1, None)
kp2, des2 = akaze.detectAndCompute(img2, None)

# BFMatcher 默认参数
bf = cv.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)

# 旋转测试
good_matches = []
for m,n in matches:
    if m.distance < 0.75*n.distance:
        good_matches.append([m])

# 画匹配点
img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,good_matches,None,flags=cv.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
cv.imwrite('matches.jpg', img3)

匹配的关键点

OpenCV中有更多关于特征匹配的实现方法

图像变换

在匹配至少四对关键点之后,我们就可以将一个图像转换为另一个图像,称为图像变换^12(image warping)。空间中相同平面的两个图像通过单应性变换^13(Homographies)进行关联。Homographies是具有8个自由参数的几何变换,由3x3矩阵表示图像的整体变换(与局部变换相反)。因此,为了获得变换后的感测图像,需要计算Homographies矩阵。

为了得到最佳的变换,我们需要使用RANSAC算法检测异常值并去除。它内置在OpenCV的findHomography方法中。同时也存在RANSAC算法的替代方案,例如LMEDS:Least-Median鲁棒方法。

# 选择匹配关键点
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)

# 计算 homography
H, status = cv.findHomography(ref_matched_kpts, sensed_matched_kpts, cv.RANSAC,5.0)

# 变换
warped_image = cv.warpPerspective(img1, H, (img1.shape[1]+img2.shape[1], img1.shape[0]))

cv.imwrite('warped.jpg', warped_image)

变换后的图像

OpenCV对这三个步骤进行了综合叙述

深度学习方法

目前大多数关于图像配准的研究涉及深度学习。在过去的几年中,深度学习使计算机视觉任务具有先进的性能,如图像分类,物体检测和分割。

特征提取

深度学习用于图像配准的第一种方式是用于特征提取。卷积神经网络设法获得越来越复杂的图像特征并进行学习。2014年以来,研究人员将这些网络应用于特征提取的步骤,而不是使用SIFT或类似算法。

  • 2014年,Dosovitskiy等人提出了一种通用的特征提取方法,使用未标记的数据训练卷积神经网络。这些特征的通用性使转换具有鲁棒性。这些特征或描述符的性能优于SIFT描述符以匹配任务。
  • 2018年,Yang等人开发了一种基于相同思想的非刚性配准方法。他们使用预训练的VGG网络层来生成一个特征描述符,同时保留卷积信息和局部特征。这些描述符的性能也优于类似SIFT的探测器,特别是在SIFT包含许多异常值或无法匹配足够数量特征点的情况下。

SIFT和基于深度学习的非刚性配准方法描述符的结果

Homography学习

研究人员利用神经网络直接学习几何变换对齐两幅图像,而不仅仅局限于特征提取。

监督学习

在2016年,DeTone等人发表了 Deep Image Homography Estimation,提出了HomographyNe回归网络,这是一种VGG风格模型,可以学习两幅相关图像的单应性。该算法具有以端到端的方式同时学习单应性和CNN模型参数的优势,不需要前两个阶段的过程!

HomographyNet回归网络

网络产生八个数值作为输出。以监督的方式进行训练,并计算输出和真实单应性之间的欧几里德损失。

Supervised Deep Homography Estimation

与其他有监督方法一样,该单应性估计方法需要有标记数据。虽然很容易获得真实图像的单应性,但在实际数据上要昂贵得多。

无监督学习

基于这个想法,Nguyen等人提出了一种无监督的深度图像单应性估计方法。他们保留了相同结构的CNN,但是使用适合无监督方法的损失函数:不需要人工标签的光度损失(photometric loss)函数。相反,它计算参考图像和感测变换图像之间的相似性。

L1光度损失函数

他们的方法引入了两种新的网络结构:张量直接线性变换和空间变换层。我们可以简单地使用CNN模型输出的单应性参数获得变换后的感测图像,然后我们使用它们来计算光度损失。

Unsupervised Deep Homography Estimation

作者声称,与传统的基于特征的方法相比,这种无监督方法具有相当或更高的准确率和鲁棒性,并且具有更快的执行速度。此外,与有监督方法相比,它具有更好的适应性和性能。

其他方法

强化学习

强化学习方法作为医学应用的常用方法正在得到越来越多的关注。与预定义的优化算法相反,在这种方法中,我们使用训练好的代理进行配准。

强化学习方法的配准可视化

  • 2016年,Liao 等人首先使用强化学习进行图像配准。他们的方法基于有监督算法进行端到端的训练。它的目标是通过寻找最佳的运动动作序列来对齐图像。这种方法优于最先进的方法,但它只能用于刚性转换。
  • 强化学习也可以用于更复杂的转换。在Robust non-rigid registration through agent-based action learning论文中,Krebs等人使用人工代理优化变形模型参数。该方法对前列腺MRI图像的患者间的配准进行实验,在2-D和3-D中表现出了较好的结果。

复杂的转换

在当前图像配准研究中占较大比例的是医学影像。通常,由于患者的局部变形(因呼吸,解剖学变化等),两个医学图像之间的变换不能简单地通过单应矩阵描述,这需要更复杂的变换模型,例如由位移矢量场表示微分同胚(diffeomorphisms)。

心脏MRI图像上的变形网格和位移矢量场示例

研究人员开始尝试使用神经网络来估计这些具有许多参数的大变形模型。

  • 一个例子是上面提到的Krebs等人的强化学习方法。
  • 2017年De Vos等人提出了DIRNet。它使用CNN来预测控制点网格,该控制点用于生成位移矢量场,然后根据参考图像变换感测图像。

来自MNIST两个输入图像的DIRNet示意图

  • Quicksilver配准解决了类似的问题。Quicksilver使用深度编码-解码器网络直接在预测图像上进行变形。

你也许还想看:

NLPer入门指南 | 完美第一步

一文总结数据科学家常用的Python库(下)

一文看懂NLP神经网络发展历史中最重要的8个里程碑!

本文分享自微信公众号 - 磐创AI(xunixs),作者:小韩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenCV系列之轮廓入门 | 二十一

    轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。轮廓是用于形状分析以及对象检测和识别的有用工具。

    磐创AI
  • 使用Keras构建深度图像搜索引擎

    想象一下,如果有数十万到数百万张图像的数据集,却没有描述每张图像内容的元数据。我们如何建立一个系统,能够找到这些图像的子集来更好地回答用户的搜索查询?

    磐创AI
  • ICCV 2019 | 用于提高车牌识别的单幅噪声图像去噪和校正

    下面要介绍的论文始发于ICCV2019,题为「SNIDER: Single Noisy Image Denoising and Rectification fo...

    磐创AI
  • 日本科学家的AI读心术,解码脑电波,还原人眼所见

    大数据文摘
  • 教你两种黑掉“人工智能”的方法

    翻译 | AI 科技大本营 参与 | shawn 编辑 | Donna 近期,微软(Microsoft)和阿里巴巴(Alibaba)先后宣布,其人工智能系统在一...

    AI科技大本营
  • 学习GAN模型量化评价,先从掌握FID开始吧

    Frechet Inception 距离得分(Frechet Inception Distance score,FID)是计算真实图像和生成图像的特征向量之间距...

    机器之心
  • 如何在静态页面上使用markdown排版 原

    ”Markdown是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber)。它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTM...

    tianyawhl
  • 第11节 编码规范

    命名是代码规范中很重要的一部分,统一的命名规则有利于提高的代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。

    小尘哥
  • 程序员:天冷了,今天穿件衬衫上班!

    不说了,小编已经感冒了,赶紧穿上我最爱的格子衬衫!降温了,大家千万要注意别感冒了。另外,别忘了穿上格子衬衫去上班吧!

    Java后端技术
  • 独家 | kaggle季军新手笔记:利用fast.ai对油棕人工林图像进行快速分类(附代码)

    WiDS数据马拉松由女性数据科学工作者与她们的伙伴联合发起,她们面临的挑战是需要建立一个模型,来预测一批卫星图像中存在油棕人工林种植园的情况。

    数据派THU

扫码关注云+社区

领取腾讯云代金券