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

时间:2015-05-14 14:51:47

标签: image matlab image-processing image-registration

我正在使用图像注册工具箱来注册两个3D图像。我将运动图像注册到固定图像。我用" imregtform"保存吨。

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'是源图像的转移图像。我检查它并且工作正常,但我现在需要这个转换的控制点或位移场。换句话说,我需要知道每个体素(3d像素)移动到哪个位置。如果我知道这个我可以绘制矢量场。在可变形图像注册方法(如NiftyReg package)中,提供了控制点命令以方便用户,但我不知道如何在Matlab中使用简单的3d仿射。 任何帮助都会受到太多赞赏

1 个答案:

答案 0 :(得分:3)

您可以非常轻松地将几何变换应用于单个点。

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

然后通过pt pt=p*tform;获取pt=pt(1:3)./pt(4);(搜索齐次坐标以解释最后一个分区)。这就是imwarp内部的作用。它为每个像素p执行所述乘法。

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

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

编辑:正如@Ashish Uthama在评论中建议的那样,您也可以使用Matlab内置函数transformpointsforward()来完成。我将永远是“编写自己的代码”理念的推动者,特别是第一次,所以你明白你在做什么。

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