文档

注册多模态三维医学图像

这个例子展示了如何使用imregisterimregtform而且imwarp自动对齐两个容量数据集:同一患者在不同时间收集的CT图像和T1加权MR图像。不像其他技术,imregister而且imregtform不要寻找特性或使用控制点。基于强度的登记通常非常适合于医疗和遥感图像。

本例中使用的三维CT和MRI数据集由Michael Fitzpatrick博士作为回顾性图像配准评估(RIRE)数据集

步骤1:加载图像

这个例子使用了同一病人头部的两张3d图像。在配准问题中,我们认为一个图像是固定图像,另一个图像是运动图像。配准的目标是使运动图像与固定图像对齐。在本例中,固定图像为T1加权MRI图像。我们想要配准的运动图像是CT图像。数据以回顾性图像配准评估(RIRE)项目使用的文件格式存储。使用multibandread读取包含图像数据的二进制文件。使用helperReadHeaderRIRE函数获取与每个图像关联的元数据。您可以使用以下链接来查找有关RIRE文件格式的更多信息:RIRE数据格式

fixedHeader = helperReadHeaderRIRE(“rirePatient007MRT1.header”);movingHeader = helperReadHeaderRIRE(“rirePatient007CT.header”);fixedVolume = multibandread(“rirePatient007MRT1.bin”...[fixedHeader。行,fixedHeader。列,fixedHeader。片),...“int16 = >单”0,“bsq”“ieee-be”);movingVolume = multibandread(“rirePatient007CT.bin”...[movingHeader。行,movingHeader。列,movingHeader。片),...“int16 = >单”0,“bsq”“ieee-be”);

helperVolumeRegistration函数是一个辅助函数,用于帮助判断三维注册结果的质量。您可以交互地旋转视图,两个轴将保持同步。

helperVolumeRegistration (fixedVolume movingVolume);

你也可以使用imshowpair从固定和移动的体块中观察单个平面,以获得体块整体对齐的感觉。在重叠的图像中imshowpair,灰色区域对应的区域有相似的强度,而品红和绿色区域显示的地方,一个图像比另一个更亮。使用imshowpair观察通过每个体的中心沿轴向切片拍摄的图像体的错配。

centerFixed = size(fixedVolume)/2;centerMoving = size(movingVolume)/2;图imshowpair(movingVolume(:,:,centerMoving(3)), fixedVolume(:,:,centerFixed(3)));标题(“未配位轴片”

步骤2:设置初始注册

imregconfig函数可以很容易地选择正确的优化器和指标配置来使用imregister.这两张图像来自两种不同的模式,MRI和CT,所以“多模式”选项是合适的。

[optimizer,metric] = imregconfig(“多通道”);

所使用的算法imregister当指定了关于输入图像的分辨率和/或位置的空间引用信息时,将更快地收敛到更好的结果。在这种情况下,CT和MRI数据集的分辨率在图像元数据中定义。使用此元数据来构造imref3d我们将作为注册的输入参数传递的空间引用对象。

Rfixed = imref3d(size(fixedVolume),fixedHeader.PixelSize(2),fixedHeader.PixelSize(1),fixedHeader.SliceThickness);Rmoving = imref3d(size(movingVolume),movingHeader.PixelSize(2),movingHeader.PixelSize(1),movingHeader.SliceThickness);

空间引用对象的属性定义了相关图像体积在世界坐标系中的位置以及每个维度的像素范围。Rmoving的XWorldLimits属性定义了移动体积在X维度中的位置。PixelExtentInWorld属性定义了X维世界单元中每个像素的大小(沿着列)。移动体积在世界X坐标系中从0.3269延伸到334.97,每个像素的范围为0.6536mm。单位以毫米为单位,因为用于构建空间引用的标题信息是以毫米为单位的。ImageExtentInWorldX属性在世界单位中决定了移动图像体积在世界单位中的完整范围。

Rmoving。XWorldLimits Rmoving。PixelExtentInWorldX Rmoving。ImageExtentInWorldX
Ans = 0.3268 334.9674 Ans = 0.6536 Ans = 334.6406

两个卷之间的错位包括平移、缩放和旋转。使用相似度变换来配准图像。

首先使用imregister获取注册后输出的图像量,可以直接查看和观察,以获取注册结果的质量。

为优化器的InitialRadius属性指定一个非默认设置,以实现注册结果的更好收敛。

优化器。InitialRadius = 0.004;movingRegisteredVolume = imregister(movingVolume,Rmoving, fixedVolume,Rfixed,“刚性”,优化器,度量);

使用imshowpair再次重复检查通过注册体中心拍摄的轴向切片的对齐过程,以了解注册的成功程度。

figure imshowpair(movingRegisteredVolume(:,:,centerFixed(3)), fixedVolume(:,:,centerFixed(3)));标题(注册体积的轴向切片。

从上面的轴向切片来看,配准是成功的。使用helperVolumeRegistration再次查看注册数量,以继续判断注册是否成功。

helperVolumeRegistration (fixedVolume movingRegisteredVolume);

步骤3:获得移动与固定对齐的3- d几何变换。

imregtform函数,当您对所使用的几何变换估计感兴趣时,可以使用imregister形成注册后的输出图像。imregtform使用相同的算法imregister并接受相同的输入参数imregister.自目视检查所产生的体积imregister表示注册成功,可以打电话imregtform使用相同的输入参数来获得与该配准结果相关的几何变换。

geomtform = imregtform(movingVolume,Rmoving, fixedVolume,Rfixed,“刚性”,优化器,度量)
geomtform = affine3d与属性:T: [4×4 double]维度:3

imregtform的结果是一个几何变换对象。该对象包含一个属性T,它定义了三维仿射变换矩阵。

geomtform。T
Ans = 0.9704 -0.0143 -0.2410 0 0.0228 - 0.9992 0.0324 0 0.2404 -0.0369 0.9700 0 -15.8648 -17.5692 29.1830 1.0000

几何变换的transformPointsForward方法可以通过配准来确定一个点[u,v,w]在运动图像映射中的位置。由于将空间引用输入指定为imregtform,因此几何变换将世界坐标系中的点从移动映射到固定。下面使用transformPointsForward方法来确定在世界坐标系中运动图像中心的转换位置。

centerXWorld = mean(remove . xworldlimits);centerYWorld = mean(删除。yworldlimits);centerZWorld = mean(remove . zworldlimits);[xWorld,yWorld,zWorld] = transformPointsForward(geomtform,centerXWorld,centerYWorld,centerZWorld);

您可以使用Rfixed的worldToSubscript方法来确定固定卷中与移动卷中心对齐的元素。

[r,c,p] = worldToSubscript(Rfixed,xWorld,yWorld,zWorld)
R = 116 c = 132 p = 13

第四步:对运动图像体积应用几何变换估计。

imwarp函数可用于将几何变换估计从imregtform应用到三维体。“OutputView”名称/值用于定义一个空间引用参数,该参数确定输出重采样图像的世界范围和分辨率。你可以得到相同的结果imregister通过使用与固定图像相关联的空间引用对象。这将创建一个输出量,其中固定和移动图像的世界限制和分辨率是相同的。一旦两个体积的世界极限和分辨率相同,移动和固定体积的每个样本之间就有像素到像素的对应关系。

movingRegisteredVolume = imwarp(movingVolume,Rmoving,geomtform,“双三次的”“OutputView”, Rfixed);

再次使用imshowpair查看通过所生成的注册卷的中心的轴向切片imwarp

figure imshowpair(movingRegisteredVolume(:,:,centerFixed(3)), fixedVolume(:,:,centerFixed(3)));标题(注册体积的轴向切片。

这个话题有用吗?