我想 :
步骤 1)使用此代码将图像旋转 20 度
rotatedImage = imrotate(originalImage, 20);
。步骤2)如果可能的话,仅基于旋转图像或基于旋转图像和原始图像计算步骤1中使用的度数旋转。
matlab中有什么函数可以做第2步或一个提议吗?
我想 :
步骤 1)使用此代码将图像旋转 20 度rotatedImage = imrotate(originalImage, 20);
。
步骤2)如果可能的话,仅基于旋转图像或基于旋转图像和原始图像计算步骤1中使用的度数旋转。
matlab中有什么函数可以做第2步或一个提议吗?
此示例显示了执行步骤 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
.
这显示了原始、扭曲和反转的图像(角度如上确定):
请注意限制:旋转图像被裁剪,以便在计算目标函数期间可以进行逐点比较。这可能不是绝对最好的方法,因为我想有一些形态算法旨在以更一般的方式回答您的特定问题。仍然有效。
你可能想检查一下。我曾使用傅立叶-梅林变换来检索旋转。它的精确度高达 1 度。我认为您将不得不投入一些时间+不要忘记查看有关傅立叶-梅林变换的一些论文