这个例子展示了如何对齐或注册两个不同的图像旋转和比例变化。您可以使用FitegeOtrans.
手动拾取对应点后,找到旋转角度和缩放因子。然后,您可以变换扭曲的图像恢复原始图像。
将映像读取到工作区中。
原始= imread (“cameraman.tif”);imshow(原始)文本(大小(原始的,2),大小(原始的,1)+ 15,...“图片由麻省理工学院提供”,...“字形大小”7“HorizontalAlignment”,'正确的')
规模= 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
和定点
.
将非反射性相似变换与控制点匹配。
tform = fitgeotrans (movingPoints定点,“nonreflectivesimilarity”);
完成步骤5和6后,重复步骤4到6,但尝试使用“仿射”而不是“非reflexiveSimilarity”。怎么了?结果是与“非reflexiveSimilarity”的结果一样好?
几何变换,tform
的变换矩阵tform。T
.由于您知道转换仅包括旋转和缩放,因此数学相对简单,以恢复比例和角度。
让
让
然后,Tinv =反转(tform)
,tinv.t =
在哪里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_recovered
和theta_recovered.
应该匹配您设置的值吗步骤2:调整大小和旋转图像.
通过变换恢复原始图像扭曲的
,旋转缩放图像,使用几何变换tform
你对空间引用的了解原来的
.'OutputView'名称-值对用于指定重采样输出图像的分辨率和网格大小。
Roriginal = imref2d(大小(原始));恢复= imwarp (tform扭曲,“OutputView”, Roriginal);
比较恢复
来原来的
用蒙太奇的手法把它们放在一起看。
蒙太奇({原始,恢复})
的恢复
(右)图像质量不匹配原来的
(左)图像由于失真和恢复过程。特别地,图像缩小导致信息损失。边缘周围的伪影是由于变换的有限精度。如果你要选择更多要点第三步:选择控制点,转换会更准确。
cpselect
|FitegeOtrans.
|imref2d
|imresize
|imrotate
|imwarp