主要内容

查找图像旋转和比例

此示例显示了如何对齐或注册两个因旋转和比例更改而不同的图像。您可以使用fitgeotrans在手动选择相应点后找到旋转角度和比例因子。然后,您可以转换失真的图像以恢复原始图像。

步骤1:阅读图像

在工作区中阅读图像。

原始= imread('cameraman.tif');imshow(原始)文本(大小(原始,2),大小(原始,1)+15,...“马萨诸塞州技术研究所的图像”,,,,...'字体大小',7,'水平对齐',,,,'正确的'

图包含一个轴对象。轴对象包含2个类型图像的对象,文本。

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

比例= 0.7;扭曲= imresize(原始,比例);%尝试改变量表因子。theta = 30;扭曲= imrotate(扭曲,theta);%尝试改变角度,theta。imshow(扭曲)

图包含一个轴对象。轴对象包含类型图像的对象。

步骤3:选择控制点

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

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

您可以使用这些预选积分来运行其余的示例,但尝试选择自己的积分以查看结果的变化。

cpSelect(变形,原始,移动点,固定点);

通过选择文件菜单,然后将点保存到工作区选项。保存点,覆盖变量移动点固定点

步骤4:估计转换

将非反射相似性转换拟合到您的控制点。

tform = fitgeotrans(移动点,固定点,“非反射激素”);

完成步骤5和6后,重复步骤4至6,但请尝试使用“仿射”代替“非反射激素”。怎么了?结果与与之一样好“非反射激素”

步骤5:求解尺度和角度

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

sc = 规模 * cos (( Theta

SS = 规模 * (( Theta

然后,tinv =倒置(tform), 和tinv.t = [[ sc - SS 0 SS sc 0 TX 1 这是给予的

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

tforminv = invert(tform);tinv = tforminv.t;SS = TINV(2,1);sc = tinv(1,1);scale_recovered = sqrt(ss*ss + sc*sc)
scale_recovered = 0.7000
theta_recovered = atan2(ss,sc)*180/pi
theta_recovered = 29.3741

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

步骤6:恢复原始图像

通过转换恢复原始图像扭曲,使用几何变换,旋转和缩放图像tform以及您对空间参考的了解原来的。这'outputview'名称值参数用于指定重采样输出图像的分辨率和网格大小。

roriginal = imref2d(size(onigral));恢复= imwarp(变形,tform,'outputview',Roriginal);

相比恢复原来的通过在蒙太奇上并排看它们。

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

图包含一个轴对象。轴对象包含类型图像的对象。

恢复(右)图像质量与原来的(左)图像由于失真和恢复过程。特别是,图像缩小会导致信息丢失。边缘周围的伪影是由于转换的准确性有限。如果您要选择更多积分步骤3:选择控制点,转换将更加准确。

也可以看看

|||||

相关话题