这个示例演示了如何对齐或注册两个因旋转和缩放变化而不同的图像。您可以使用fitgeotrans
手动选取相应的点,求出旋转角度和比例因子。然后,您可以转换扭曲的图像,以恢复原始图像。
将图像读入工作区。
原始= imread (“cameraman.tif”);imshow(原始)文本(大小(原始的,2),大小(原始的,1)+ 15,...图片由麻省理工学院提供,...“字形大小”,7,“HorizontalAlignment”,“对”)
规模= 0.7;扭曲= imresize(原始、规模);尝试改变比例因子。θ= 30;扭曲= imrotate(扭曲,θ);试着改变角度。imshow(扭曲)
使用控制点选择工具选择至少两对控制点。
movepoints = [151.52 164.79;131.40 - 79.04);fixedPoints = [135.26 200.15;]170.30 - 79.30);
您可以使用这些预先选择的点运行示例的其余部分,但请尝试选择您自己的点,以查看结果如何变化。
cpselect(扭曲,原来,movingPoints定点);
保存控制点通过选择文件菜单,然后将点保存到工作区选择。保存点,覆盖变量movingPoints
和定点
。
对控制点进行非反射的相似变换。
tform = fitgeotrans (movingPoints定点,“nonreflectivesimilarity”);
当你完成了第5步和第6步之后,重复第4步到第6步,但是尝试使用仿射的
而不是“NonreflectiveSimilarity”
。会发生什么呢?结果和之前一样好吗“NonreflectiveSimilarity”
?
几何变换,tform
,其中包含一个变换矩阵tform。T
。由于您知道转换只包括旋转和缩放,恢复缩放和角度的数学比较简单。
让
让
然后,Tinv =反转(tform)
,Tinv。T =
在哪里tx
和泰
分别为x和y的平移。
tformInv =反转(tform);Tinv = tformInv.T;党卫军= Tinv (2, 1);sc = Tinv (1,1);(ss*ss + sc*sc)
scale_recovered = 0.7000
theta_recovered =量化(ss, sc) * 180 /π
theta_recovered = 29.3741
的恢复值scale_recovered
和theta_recovered
应该匹配你设置的值吗步骤2:调整大小和旋转图像。
通过变换恢复原始图像扭曲的
的图像,使用几何变换tform
以及你对空间参照的了解原始
。的“OutputView”
参数Name-value用于指定重采样输出图像的分辨率和网格大小。
Roriginal = imref2d(大小(原始));恢复= imwarp (tform扭曲,“OutputView”, Roriginal);
比较恢复
来原始
通过在蒙太奇里并排看他们。
蒙太奇({原始,恢复})
的恢复
(右)图像质量不匹配原始
(左)图像因失真而恢复的过程。特别是图像的缩小会导致信息的丢失。边缘周围的伪影是由于转换的精度有限。如果你选择更多的点步骤3:选择控制点,转换会更准确。
imresize
|imrotate
|cpselect
|fitgeotrans
|imwarp
|imref2d