2

I would like to :

  • step 1) Rotate an image with 20 degrees using this code rotatedImage = imrotate(originalImage, 20);.

  • step 2) calculate degree rotation used in step 1 based only on the rotated image if it possible or based on rotated image and the original image.

there is any function in matlab could do the step 2 or a proposition to do that?

zkanoca
  • 9,664
  • 9
  • 50
  • 94
  • 4
    Here are a few examples I posted in the past, some of them for specific cases (by detecting corners, lines, edges, etc.. as features in both images, and using those to recover the transformation): http://stackoverflow.com/a/7557783, http://stackoverflow.com/a/2079916, http://stackoverflow.com/a/6563768, http://stackoverflow.com/a/16478211 – Amro Sep 09 '13 at 21:35
  • 2
    Matlab has some built-in features for that. See the "find image rotation" web page - http://www.mathworks.com/help/images/examples/find-image-rotation-and-scale.html - and using a feature matching algorithm - http://www.mathworks.com/help/images/examples/find-image-rotation-and-scale-using-automated-feature-matching.html – marsei Sep 18 '13 at 16:24

2 Answers2

5

This example shows one way to perform step 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

where imr is the function

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

The function wraps imrotate, generating an objective function to minimize so that it can be used by fminsearch.

This shows the original, distorted, and reversed image (with angle determined as above):

enter image description here

Note the limitations: the rotated images are cropped so that a point-by-point comparison is possible during computation of the objective function. This is probably not the absolutely best way to do this, as I imagine that there are morphological algorithms designed to answer your specific question in a more general way. Still it worked.

Buck Thorn
  • 5,024
  • 2
  • 17
  • 27
2

You might want to check this. I had used Fourier-Mellin transform to retrieve rotation. Its accurate up to 1 degree. I think you will have to invest some time + don't forget to check some papers on Fourier-Mellin transform

Autonomous
  • 8,935
  • 1
  • 38
  • 77