如何知道matlab中旋转图像的旋转度?

时间:2013-09-09 17:45:52

标签: matlab image-processing octave

我想:

  • 步骤1)使用此代码rotatedImage = imrotate(originalImage, 20);将图像旋转20度。

  • 步骤2)如果可能或基于旋转的图像和原始图像,仅根据旋转的图像计算步骤1中使用的度数旋转。

matlab中有任何函数可以执行第2步或者这样做吗?

2 个答案:

答案 0 :(得分:5)

此示例显示了执行第2步的一种方法:

A = 'peppers.jpg';
img = im2double(imread(A));
img_r=imrotate(img,20,'nearest','crop');   % <-- this is the distorted image
                                           %     rotated 20 deg

xopt = fminsearch(@(x) imr(x,img_r,img), 10);  % <-- start with 10 deg as guess

其中imr是函数

function obj= imr(x,img1,img2);
img1_r = imrotate(img1,x,'nearest','crop');
obj = sum((img2(:)-img1_r(:)).^2);

函数包装imrotate,生成最小化的目标函数,以便fminsearch可以使用它。

显示原始,失真和反转的图像(角度如上所示):

enter image description here

注意限制:旋转图像被裁剪,以便在计算目标函数期间进行逐点比较。 这可能不是绝对最好的方法,因为我想有一些形态算法旨在以更一般的方式回答您的具体问题。它仍然奏效。

答案 1 :(得分:2)

您可能需要查看this。我曾使用傅里叶 - 梅林变换来检索旋转。它精确到1度。我想你将不得不投入一些时间+不要忘记检查一些关于傅立叶 - 梅林变换的论文