【问题标题】:Matlab image transformation (affine2d, projective2d) orderingMatlab图像变换(affine2d,projective2d)排序
【发布时间】:2019-07-03 16:29:57
【问题描述】:

在下面的 MWE 代码中(取自 Matlab documentation),T 后跟 R 的转换由 T*R 给出,而不是像大多数计算机图形学或视觉教科书中的 R*T

    cb = checkerboard(4,2);
    cb_ref = imref2d(size(cb));
    background = zeros(150);
    imshowpair(cb,cb_ref,background,imref2d(size(background)))

    T = [1 0 0;0 1 0;100 0 1];
    tform_t = affine2d(T);
    R = [cosd(30) sind(30) 0;-sind(30) cosd(30) 0;0 0 1];
    tform_r = affine2d(R);

    TR = T*R; % This line
    tform_tr = affine2d(TR);
    [out,out_ref] = imwarp(cb,cb_ref,tform_tr);
    imshowpair(out,out_ref,background,imref2d(size(background)))

如果我们想将图像x 转换为x',首先通过T,然后通过R,我们不应该使用x'=R(T(x))=R*T*x吗?

从代码来看,在我看来,我们正在做x'=T*R*x。这没有意义,因为输出确实在做x'=R*T*x。文档中未解释此行为。

改造前:

改造后:

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    这是因为 Matlab 使用了不同的约定。他们不是计算x'=T*x,而是计算transpose(x')=transpose(T*x),它等于transpose(x)*transpose(T)。由于变换矩阵现在是 RIGHT-MULTIPLIED,因此排序也发生了变化。第一个变换现在在左边。 (函数的输入参数已经是transpose(T),而不是T)。

    除了affine2dprojective2d之外,它们由cameraMatrix创建的投影矩阵也被转置了——它的形状是4x3而不是传统的3x4

    我不知道他们为什么这样做,一些讨论可以找到here。我真的希望他们能在imwarpprojective2d 等的文档中更好地解释/指出这一点。我花了好几个小时才弄明白。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多