找到图像旋转和缩放

这个例子展示了如何对齐或注册两个不同的图像旋转和比例变化。您可以使用FitegeOtrans.手动拾取对应点后,找到旋转角度和缩放因子。然后,您可以变换扭曲的图像恢复原始图像。

步骤1:读取图像

将映像读取到工作区中。

原始= imread (“cameraman.tif”);imshow(原始)文本(大小(原始的,2),大小(原始的,1)+ 15,...“图片由麻省理工学院提供”...“字形大小”7“HorizontalAlignment”'正确的'

步骤2:调整大小和旋转图像

规模= 0.7;扭曲= imresize(原始、规模);%尝试改变比例因子。θ= 30;扭曲= imrotate(扭曲,θ);试试改变角度。imshow(扭曲)

第三步:选择控制点

使用控制点选择工具选择至少两对控制点。

移动点= [151.52 164.79;131.40 79.04];固定点= [135.26 200.15;170.30 79.30];

您可以使用这些预先选择的点运行示例的其余部分,但是尝试选择您自己的点,看看结果如何变化。

cpselect(扭曲,原来,movingPoints定点);

保存控制点通过选择文件菜单,然后保存点到工作区选择。保存积分,覆盖变量movingPoints定点

步骤4:估计变换

将非反射性相似变换与控制点匹配。

tform = fitgeotrans (movingPoints定点,“nonreflectivesimilarity”);

完成步骤5和6后,重复步骤4到6,但尝试使用“仿射”而不是“非reflexiveSimilarity”。怎么了?结果是与“非reflexiveSimilarity”的结果一样好?

第五步:计算比例和角度

几何变换,tform的变换矩阵tform。T.由于您知道转换仅包括旋转和缩放,因此数学相对简单,以恢复比例和角度。

sc 规模 因为 θ

党卫军 规模 θ

然后,Tinv =反转(tform),tinv.t = sc - 党卫军 0 党卫军 sc 0 tx 1

在哪里tx分别是x和y的翻译。

tformInv =反转(tform);Tinv = tformInv.T;党卫军= Tinv (2, 1);sc = Tinv (1,1);sqrt(ss*ss + sc*sc)
scale_recovered = 0.7000
theta_recovered =量化(ss, sc) * 180 /π
theta_recovered = 29.3741.

的恢复值。scale_recoveredtheta_recovered.应该匹配您设置的值吗步骤2:调整大小和旋转图像

步骤6:恢复原始图像

通过变换恢复原始图像扭曲的,旋转缩放图像,使用几何变换tform你对空间引用的了解原来的.'OutputView'名称-值对用于指定重采样输出图像的分辨率和网格大小。

Roriginal = imref2d(大小(原始));恢复= imwarp (tform扭曲,“OutputView”, Roriginal);

比较恢复原来的用蒙太奇的手法把它们放在一起看。

蒙太奇({原始,恢复})

恢复(右)图像质量不匹配原来的(左)图像由于失真和恢复过程。特别地,图像缩小导致信息损失。边缘周围的伪影是由于变换的有限精度。如果你要选择更多要点第三步:选择控制点,转换会更准确。

另请参阅

|||||

相关话题