From: Phillip on
I stumbled across this while trying to solve the same problem (determine rotation between 2 images). Thanks to those who posted here. You should only need the radon projection along one angle for one of the images. Also, the use of the FFT confused me so I have used it at the end to do the correlation in a more familiar way to me. Code snippet:

thetas = [-45 : 45]; % Enter desired range

P1 = radon(Image1,0); % Only 1 projection is needed for reference image
P2 = radon(Image2,thetas); % All projections to be considered for the other image

% Compare the projections for Image2 to the projection for Image1 using cross
% correlation. The most correlated projection gives the amount of image rotation.

for ii = 1:length(thetas)
b = P2(:,ii);
this_correlation = abs(ifft(P1.*conj(b)));
angle_scores(ii) = max(max(this_correlation));
end



"Yuan-Liang Tang" <john.doe.nospam(a)example.com> wrote in message <h8q5ba$fds$1(a)fred.mathworks.com>...
> Matt:
> The code you provided is really good. What I did is to further sum the columns of P1 and P2 and perform cross-correlation to find the angle of rotation. To be more specific,
>
> %%%%%%%%%%%%%%%%
> P1=abs(fft(radon(Image1)));
> P2=abs(fft(radon(Image2)));
> a = sum(P1);
> b = sum(P2);
> a = a-mean(a);
> b = b-mean(b);
> [m n] = max(xcorr(a, b));
> angle = length(a)-n+1 % The angle of rotation
> %%%%%%%%%%%%%%%%
>
> The code above worked just fine. However, what is the purpose of "fft" after radon transform? Can we skip the "fft" part? Thanks.
>
> Y.L. Tang
>
>
> "Matt " <xys(a)whatever.com> wrote in message <h1g8gu$mrc$1(a)fred.mathworks.com>...
> > "Pradyumna A" <a_pradyumna(a)yahoo.com> wrote in message <h1fn0q$aeg$1(a)fred.mathworks.com>...
> > > Hello,
> > >
> > > I have 2 images. One is the reference image and the other is the rotated version of the reference image. I would like to find what is the angle by which the 2nd image is rotated wrt 1st one. Also in future, the second image will be scaled
> > ----------
> >
> > In what way will the image be scaled? Do you mean stretched geometrically or do you mean all the pixel values will be scaled?
> >
> > ------
> > >and translated along with this rotation !. This has to be done automatically (without human interference in selecting feature points etc)
> > -----
> >
> > One thing you can try is to compute
> >
> > P1=abs(fft(radon(Image1)))
> > P2=abs(fft(radon(Image2)))
> >
> > You will see that P1 is shifted with respect to P2 by an amount corresponding to the rotation. You can use your favorite shift measurement technique (e.g. correlation) to calculate the shift, and hence the rotation. Also, translation will not affect P1 and P2.