【发布时间】:2015-11-22 20:11:29
【问题描述】:
我想根据从here提取的这个方案使用控制点转换图像:
A 和B 包含源和目标顶点的坐标。
我将转换矩阵计算为:
A = [51 228; 51 127; 191 127; 191 228];
B = [152 57; 219 191; 62 240; 92 109];
X = imread('rectangle.png');
info = imfinfo('rectangle.png');
T = cp2tform(A,B,'projective');
到目前为止,它似乎可以正常工作,因为(使用归一化坐标)源顶点会产生其目标顶点:
H = T.tdata.T;
> [51 228 1]*H
ans =
-248.2186 -93.0820 -1.6330
> [51 228 1]*H/ -1.6330
ans =
152.0016 57.0006 1.0000
问题是imtransform 产生了意想不到的结果:
Z = imtransform(X,T,'XData',[1 info.Width], 'YData',[1 info.Height]);
imwrite(Z,'projective.png');
如何使用imtransform 来产生我预期的结果?:
有没有其他方法可以实现?
【问题讨论】:
-
我对matlab的了解不够多,尤其不知道您的代码中
tdata的含义。但我个人会尝试在 matlab 中或使用单独的工具手动重现these steps,以检查计算出的矩阵是否有意义。请注意,投影变换矩阵仅定义为标量因子,因此在比较它们之前相应地缩放您的矩阵。如果矩阵一致,则问题在于应用它们,否则问题在于找到它们。 -
你看过
imtransform的demo吗? (在 Octave 提示符下运行demo imtransform)。如果你看看documentation,你的问题正好是第一个demo的第6个数字。 -
您的问题是您在执行 Z = imtransform(X,T,'XData',[1 info.Width], 'YData',[1 info.Height]) 时裁剪了输出图像;使用 tformfwd 和 A 来计算 XData 和 YData 范围。
标签: matlab image-processing octave homography projective-geometry