3D刚性配准

图像配准(Image Registration),是数字图像处理中非常关键的问题之一。

配准的本质是 将两个或多个图像进行对齐 以便进行比较、分析或融合的过程。

图像配准的目标是 找到一个变换矩阵(Transform matrix),将不同图像中的相应特征或点匹配在一起,以便它们在同一坐标系下对齐。

图片

https://www.mathworks.com/help/medical-imaging/ug/medical-image-registration.html

图像配准大致可以分为两类:

1. 刚性配准(Rigid registration)

2.非刚性配准(Non-rigid registration)

刚性配准 包括以下几种类型,不同类型有不同的复杂度:

  • Translation registration(only translation)

  • Rigid registration (translation and rotation)

  • Similarity registration (translation, rotation, and scale)

  • Affine registration (translation, rotation, scale, and shear)

之前的关于ImageJ的文章,介绍了怎样利用ImageJ的插件来做图像配准:

图片

点击查看《ImageJ | 图像自动配准》

也介绍了怎样 利用ANTs进行多模态配准

图片

点击查看《Python | ANTs 多模态医学影像配准》

这篇文章会演示怎样利用MATLAB,对3D血管数据图像进行配准:

配准后:

1、实例代码,MATLAB版本R2021b:

% This script shows how to registrate 3D stack using rigid registrationclear; close all;imgTemp = imstackread('imgTemplate.tif');imgReg = imstackread('imgRegistrate.tif');
imgTempMIP = max(imgTemp,[],3);imgRegMIP = max(imgReg,[],3);
% Create the optimizer and metric[optimizer, metric] = imregconfig('multimodal');optimizer.MaximumIterations = 300;optimizer.InitialRadius = 0.0009;
% get the transform matrixtform = imregtform(imgRegMIP, imgTempMIP, 'affine', optimizer, metric);
% apply transform matriximgRegAffine = imwarp(imgRegMIP, tform,'OutputView',imref2d(size(imgRegMIP)));
figure(9);subplot(1,2,1); imshowpair(imgRegMIP,imgTempMIP); title('Before registration');subplot(1,2,2); imshowpair(imgRegAffine,imgTempMIP);title('After affine registration');
%% apply tranform matrix to all slices of the image stackfor ii = 1:size(imgReg,3)    imgReg(:,:,ii) = imwarp(imgReg(:,:,ii), tform,'OutputView',imref2d(size(imgRegMIP)));    disp(['Frame-',num2str(ii),' finished']);endimstackwrite(uint16(imgReg),'imgAfterReg.tif');

输出结果:

图片

2、关键代码解析

(1)导入3D stack

imgTemp = imstackread('imgTemplate.tif');imgReg = imstackread('imgRegistrate.tif');

imstackread 函数参考这篇文章:

图片

点击查看《MATLAB | 图像序列和Stack的读写》

(2)对 3D stack 进行 Max Intensity Projection(MIP)

imgTempMIP = max(imgTemp,[],3);imgRegMIP = max(imgReg,[],3);

单层血管的特征比较少,单层与单层配准可能因为特征不足,导致配准失败。

MIP后的图包含了Z轴上的信息,有更多的特征,更容易得到好的配准结果:

图片

(3)初始化配准参数

% Create the optimizer and metric[optimizer, metric] = imregconfig('multimodal');optimizer.MaximumIterations = 300;optimizer.InitialRadius = 0.0009;

如果两个图像的采集条件不一样,例如用的不同的成像系统,或者信噪比差别较大。

这种情况需要进行多模态的配准,所以选择'multimodal'

optimizer中具体的参数,参考:

https://www.mathworks.com/help/images/create-an-optimizer-and-metric-for-intensity-based-image-registration.html

这里需要关注 optimizer.MaximumIterations 这个参数,如果配准效果不好,可以适当提高iteration的数量,但计算速度会变慢。

(4)得到变换矩阵

% get the transform matrixtform = imregtform(imgRegMIP, imgTempMIP, 'affine', optimizer, metric);

因为需要配准的图像和原始的图像模板相比,除了位移也有旋转、以及形状上的变形。

所以在配准时,选择 仿射变换(Affine)

(5)根据变换矩阵对图像进行变换

% apply transform matriximgRegAffine = imwarp(imgRegMIP, tform,'OutputView',imref2d(size(imgRegMIP)));

得到变换矩阵后,可以通过imwarp对图像进行变换。

这里需要注意 定义变换后图像的大小,即'OutputView'。一般希望输出图像的大小和原始图像大小一致。

link​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值