当我们有tfrom时如何获得位移场或控制点向量?

我正在使用图像注册工具箱注册两个3D图像。我将运动图像注册到固定图像。我使用“imregtform”来保存tform。当我们有tfrom时如何获得位移场或控制点向量?

tform = imregtform(moving,fixed,transformType,optimizer,metric) 

例如这是我的 'TForm的':

1.0235 0.0022 -0.0607   0 

-0.0276 1.0002 0.0089 0

-0.0170 -0.0141 1.1685 0

12.8777 5.0311 -70.0325 1.0000

然后我使用 'Imwarp' 传送运动图像的定影图像。在我的代码是,

nii=load_untouch_nii(['mypath image.nii' ]); 

I = nii.img;

dii=nii.hdr.dime.pixdim(2:4);

Rfixed=imref3d(size(I),dii(2),dii(1),dii(3));

timg= imwarp(I, Rfixed, tform, 'OutputView', Rfixed);

“TIMG”被转移源的图像image.I检查,它工作正常,但我现在需要这种转换的控制点或位移场。换句话说,我需要知道每个体素(3d像素)移动到哪个位置。如果我知道这一点,我可以画矢量场。在可变形图像注册方法,如NiftyReg package,提供控制点命令,以方便用户,但我不知道如何在Matlab中执行简单的3d仿射。 任何帮助将不胜感激

回答:

您可以很容易地将您的几何变换应用到单个点。

你只需要有你的观点定义为p=[x;y;z;1]

然后pt=p*tform;pt=pt(1:3)./pt(4);获得pt(搜索齐次坐标为这最后的划分说明)。这是imwarp在里面所做的。它针对每个像素执行所述乘法运算p

要获得位移,您只需要disp=pt-p;。请注意,位移很可能不是整数。

注意,在变形图像配准领域,通常你都会有不同的tform每个控制点(这就是为什么它被称为变形,而不是刚性的)

编辑:作为@Ashish Uthama建议在评论中,您也可以使用Matlab内置函数transformpointsforward()来做到这一点。我将永远是“编写自己的代码”哲学的推动者,特别是第一次,所以你确实明白你在做什么。

http://uk.mathworks.com/help/images/ref/affine3d.transformpointsforward.html

以上是 当我们有tfrom时如何获得位移场或控制点向量? 的全部内容, 来源链接: utcz.com/qa/263205.html

回到顶部