基于深度学习的2D和3D仿射变换配准

点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达

作者:Sarath Chandra

编译:ronghuaiyang

导读

将配准从2D场景扩展到3D场景。

上周我开发了一个基于深度学习的2D可变形图像配准的基本框架,并演示了如何从MNIST数据集中配准手写数字图像。除了损失函数和架构上的细微差别外,该框架本质上与VoxelMorph框架相同。

本周,我的任务是将该实现扩展到3D,并在一个包含150个T1-weighted扫描的小数据集上进行试验。通过对现有代码进行一些细微的更改,我能够实现原始的VoxelMorph模型。我使用一个扫描作为静态图像,其余的作为移动图像(125用于训练,25用于测试)。

样本输出

f2c7fbc58c152b322f5847b002e15910.png

配准效果不佳的原因是这些volumes没有去掉头骨。会议上有人向我指出,脑提取是配准的一个重要预处理步骤,即去除颅骨和眼睛等非脑组织。

基于深度学习的仿射配准

我想看看像刚性变换和仿射变换这样的简单变换是否有效。所以我很快修改了代码来做无监督的2D仿射配准。这个想法是空间变压器网络的一个简单推论。

2D仿射变换配准的Colab notebook:https://colab.research.google.com/drive/1drp2ny2t-nxddkt4pezn6mtjehnfccw

方法

卷积神经网络以移动图像和静态图像为输入,计算使移动图像弯曲和对齐到静态图像所需的仿射变换参数。在二维配准的情况下,这些参数有6个,控制旋转、缩放、平移和剪切。

10b2b488b5f61e5876392da026026792.png

训练卷积神经网络输出两幅输入图像之间的仿射变换参数T,空间变压器网络利用这些参数对运动图像进行变换。

空间变压器block取仿射参数和运动图像,执行两项任务:

  • 计算采样网格

  • 使用采样网格重新采样移动图像

在规则网格上应用仿射变换得到新的采样网格,即运动图像的采样点集。将输出中的每个位置映射到输入中的一个位置,使用如下公式:

f40a42fa4996113a8e33af16d0c1e3cb.png

由于新的采样位置可以是非积分的,双线性插值用于可微的采样,并允许梯度流回卷积神经网络,使整个框架端到端可微。

训练

MNIST数据集经过筛选,只保留一类图像,而静态图像是从筛选后数据集的测试集中随机选择的。使用归一化交叉相关(NCC)训练网络。数学上是:

e46f541fb520338c80b238874862afca.png

S和M分别代表静态图像和运动图像。下标mea和std分别表示图像的均值和标准差。图像中所有像素的求和。该训练在Tesla K80 GPU上大约需要5分钟,在CPU (i5-8250U)上大约需要10分钟。

2D的结果

65e1acf04ec8631b99edd5ec9de19847.png

扩展到3D

我修改了2D配准的代码,使其适用于3D volumes,并在T1-weighted扫描上进行了尝试。AIRNet的工作,与此相似。但与AIRnet不同的是,它是在监督的方式下训练的,并且需要ground-truth仿射变换参数,这是在无监督的方式下训练的,就像VoxelMorph。

3D的结果

073af8c4f0f088938de76903db4f624a.png

 
 

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

c0b408897719784b8016d8442da86013.png

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
图像是将两幅或多幅图像进行对齐的过程。在图像中,我们需要将目标图像与参考图像进行对齐,以便在后续处理中得到更确的结果。一种常用的图像方法是利用仿变换进行。这种方法可以通过矩阵变换来保持图像中的平行线和直线的位置关系。 以下是利用仿变换进行图像的算法matlab代码: ``` % 读取目标图像和参考图像 target_img = imread('target.jpg'); ref_img = imread('ref.jpg'); % 提取目标图像和参考图像的特征点 target_points = detectSURFFeatures(rgb2gray(target_img)); ref_points = detectSURFFeatures(rgb2gray(ref_img)); % 提取目标图像和参考图像的特征描述符 [target_features, target_points] = extractFeatures(rgb2gray(target_img), target_points); [ref_features, ref_points] = extractFeatures(rgb2gray(ref_img), ref_points); % 匹目标图像和参考图像的特征点 matches = matchFeatures(target_features, ref_features); % 选择最佳的匹点 matched_target_points = target_points(matches(:, 1), :); matched_ref_points = ref_points(matches(:, 2), :); % 计算仿变换矩阵 tform = fitgeotrans(matched_target_points.Location, matched_ref_points.Location, 'affine'); % 对目标图像进行仿变换 registered_img = imwarp(target_img, tform, 'OutputView', imref2d(size(ref_img))); % 显示对齐后的图像 figure; imshowpair(registered_img, ref_img, 'blend'); ``` 以上代码中,我们首先读取目标图像和参考图像,并使用SURF算法提取它们的特征点和特征描述符。然后,我们使用matchFeatures函数将两幅图像的特征点进行匹,并选择最佳的匹点。接下来,我们使用fitgeotrans函数计算出仿变换矩阵,并使用imwarp函数将目标图像进行仿变换,使其与参考图像对齐。最后,我们使用imshowpair函数显示对齐后的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值