> 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
4) 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.
i no understand this two sentence meaning..can u explain it or provide the code need to be used??