乘差分大小矩阵



我正在尝试使用逆映射方法将inv(3x3(矩阵乘以图像(540x420(以旋转它!我不能使用任何工具箱函数,并且正在尝试执行双FOR循环。我很困惑这是怎么回事,如果有人能帮我,我将不胜感激!

注意:A是图像!在这之后,我有一个双线性解释代码,它将相应地修复图像。我只是很难理解这个(3x3(*(540x420(矩阵。

[xold,yold,k] = size(A);
xnew = xold;
ynew = yold;
Rot = [cosd(angle) -sind(angle) 0 ; sin(angle) cos(angle) 0; 0 0 1];
InverseRot = double(inv(Rot));
E = zeros(xnew, ynew,k);
E = double(E);
A = double(A);
for i=1:ynew
for j=1:xnew
E(i,:) =  %This is where I'm confused

end
end

您不是将逆旋转矩阵乘以图像,而是将其乘以新图像中某个点的齐次坐标,以获得原始图像中相应的齐次座标。

newpt = [xnew ynew 1].';
origpt = InverseRot*newpt;
xold = origpt(1);
yold = origpt(2);

注:

  • 您的旋转矩阵混合了三角函数的度数和弧度版本。那会把你的成绩搞砸的
  • 没有平移的旋转是关于原点的。您的图像未以原点为中心。你需要做点什么
  • 旋转矩阵的逆矩阵与其转置矩阵相同。如果你修复了上面的注释,你会得到一个仿射变换矩阵,而不是一个直旋转矩阵。这也有一个更容易的方法来计算倒数。如果仿射变换矩阵是[R | t; 0 | 1],则逆矩阵是[RT | -RT*t; 0 | 1],其中RTR的转置
  • 变换后得到的原始图像中的坐标不太可能是整数,因此无法简单地将旧图像中像素的值分配给新图像中的像素。正如您所说,您必须找到一些方法来插值,并将其指定给新图像中的点

相关内容

  • 没有找到相关文章

最新更新