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

标签 image matlab image-processing image-registration

我正在使用图像配准工具箱来配准两个 3D 图像。我将移动图像注册到固定图像。我使用“imregtform”来保存tform。

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仿射。 任何帮助将不胜感激

最佳答案

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

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

然后通过pt=p*tform;获取pt 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

关于image - 当我们有 from 时,如何获得位移场或控制点向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240436/

相关文章:

matlab - 如何在Matlab中为semilogx添加注释?

matlab - 如何对 MATLAB 中的所有其他行求和

delphi - 向 TBitmap 添加阴影

java - 需要 Open CV 算法书籍吗?

image - 如何在不给轮播 slider 高度的情况下增加Flutter轮播 slider 中图像的宽度和高度

c++ - 是否可以使用 opencv 将旋转图像复制到另一个图像的 rotatedrect ROI 中?

c - 在C中显示ppm图像的rgb值和冲突类型错误

javascript - 需要帮助修复具有相对/绝对路径的 webpack.config

matlab - 在一个 3d 图中绘制多个 2d 等高线图 [Matlab]

c++ - 如何使用 OpenCV 拉直曲线?