Path: news.mathworks.com!not-for-mail From: <HIDDEN> Newsgroups: comp.soft-sys.matlab Subject: Re: How to calculate the angle between two images? Date: Fri, 3 Apr 2009 12:07:01 +0000 (UTC) Organization: STFC Rutherford Appleton Laboratory Lines: 45 Message-ID: <gr4u55$add$1@fred.mathworks.com> References: <gr4ten$oks$1@fred.mathworks.com> Reply-To: <HIDDEN> NNTP-Posting-Host: webapp-03-blr.mathworks.com Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 8bit X-Trace: fred.mathworks.com 1238760421 10669 172.30.248.38 (3 Apr 2009 12:07:01 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Fri, 3 Apr 2009 12:07:01 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 968489 Xref: news.mathworks.com comp.soft-sys.matlab:530012 "khoo" <jim_khoo@hotmail.com> wrote in message <gr4ten$oks$1@fred.mathworks.com>... > Hi all, currently i face the problem to find the rotation angle...i got one image is rotate in unknown angle compare with the original image, but i not have idea how to calculate the angle cause the angle is a variable angle..can anyone senior teach me here,...need it urgently...and i quite noob in image processing.. One method that I found for easily determining the relative angle of 'twist' between a known reference image and a rotated image was accomplished very reliably even for arbitrary images. 1) Compute the vertical and horizontal gradient of every pixel 2) Use the atan2 function to convert the image to an angle image. Note that pixels on a featureless region returns angles that are purely dictated by noise. 3) Calculate an edge image - using edge, Canny is a good choice, but Sobel will probably work - depending on the complexity of the image. 4) Fatten up the edge lines using morphology operators dilate/erode. Binarize into a mask image 5) Mask the angle image with above mask, thus removing meaningless angle pixels. We are only looking at gradients that are real. 6) Apply this to the reference image, and the target image 7) Histogram the results. Remember as the pixels represent angles, the histogram essentially wraps round 0 mapping to 2Pi radians. 8) Compare the histograms, I found correlation a good way to do this, the peak on the correlogram provides you with the relative rotation between the two images. One danger point is that if your image suffers badly from digital stepping (aliasing) you can get peaks at 0 and 90 degrees on both images. So you need to do something intelligent at removing this from your histograms prior to doing your comparison. One of the fun things that I tried, was to use fast correlation to do the matching. I FFT'd both histograms, then extended the spectra by zero packing, done the multiplication in the frequency domain, then followed up by the IFFT. This generated a very nicely interpolated measure of the relative rotation between the two images. Hope that this is helpful, and makes sense Regards Dave Robinson