【问题标题】:affine transformation and `imtransform`仿射变换和`imtransform`
【发布时间】:2019-01-11 17:38:16
【问题描述】:

我正在尝试关注这个 MATLAB example

请看第二步,示例使用了一个128*27的矩阵M2,并使用仿射变换对M2进行缩放和旋转,缩放因子为2.5。但是,我希望结果的大小应该是 67.5 * 128(因为 27 * 2.5 = 67.5,我认为它不起作用,但我不知道在这种情况下如何处理 double),MATLAB 完成的实际结果是66 * 128。

在这种情况下如何推导出66?

我尝试将比例因子更改为 2,结果是 53 * 128,我希望它是 54 * 128,因为 27 * 2 = 54。

load mri
M1 = D(:,64,:,:);
M2 = reshape(M1,[128 27]);
T0 = maketform('affine',[0 -2.5; 1 0; 0 0]);
res = imtransform(M2,T0,'cubic')
size(res) // 66 * 128

【问题讨论】:

  • btw maketformimtransform 不建议使用(如果您不使用

标签: matlab image-processing


【解决方案1】:

具有 27 个元素的矩阵的坐标从 0 到 26(这些是 imtransform 使用的坐标)。缩放 2.5 后,这些坐标从 0 到 26*2.5 = 65。要保存从 0 到 65 的 x 坐标,您需要 66 个元素。

【讨论】:

  • 感谢您的澄清。我想我明白你的意思。但是如果我想扩大 2.6 倍怎么办?如果除了更改T0 = maketform('affine',[0 -2.6; 1 0; 0 0]); 之外使用相同的代码,则结果矩阵大小为69*128。因此,如果我遵循您的观点,在缩放 2.6 后,这些坐标将从0 变为26*2.6=67.6。所以我猜 MATLAB 会简单地将 67.6 舍入到 68?
  • @yiping: 老实说,我不知道它是怎么圆的,也许是round,也许是ceil?试试看!
猜你喜欢
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多