根据http://nl.mathworks.com/help/images/ref/affine2d-class.html http://nl.mathworks.com/help/images/ref/affine2d-class.html
Matlab 需要一个转置仿射变换矩阵,并通过 v 应用变换T,其中 v 作为行向量而不是标准 Tv 其中 v 是列向量。
他们说有效矩阵的形式为 [a b 0; cd 0; e f 1] 文献中常见形式的转置 - 以及当它们乘以 v 时您所期望的结果T 代替 Tv.
因此,他们的示例执行顺时针旋转而不是逆时针旋转(即使他们说应该逆时针旋转):
%Define 10-Degree Rotation in the Counter-Clockwise Direction
%Create an affine2d object that defines the transformation.
theta = 10;
tform = affine2d([cosd(theta) -sind(theta) 0; sind(theta) cosd(theta) 0; 0 0 1])
%Apply forward geometric transformation to an input (U,V) point (5,10).
[X,Y] = transformPointsForward(tform,5,10)
X = 6.6605
Y = 8.9798
他们使用文献矩阵进行逆时针旋转,但以相反的顺序相乘,因此他们得到顺时针旋转...如果他们转置矩阵,它确实会进行逆时针旋转(也许他们忘记在示例中这样做) 。
我已经测试了从左侧将矩阵乘以向量与将向量乘以矩阵的速度 - 并且差异可以忽略不计。
我猜这是一个错误,他们保留它是为了向后兼容?
有人对此有任何见解吗?