That code to do the image shift gives a pure translation. But then you are trying to take the polar transform, and determine an angle of rotation (!). So I would remove that polar image stuff and just try to extract the translation amount (i.e. you should caluclate a displacement of 20 pixels in the vertical direction).
Once you have that down pat, you can switch to rotating the image, doing the polar transform, and doing the xcorr of that. To rotate the image you can do something like
Then finally, you can test your code by both translating and shifting the image. To solve this I usually do an initial translation correction (Cartesian images), followed by a rotation correction (polar images), then a final translation correction (Cartesian images) to mop up any residual errors.
"Darren g" wrote in message <email@example.com>... > Hi Phillip, > > I think the problem is in the Angle of rotation calculation equation but I could not figure out how to change it. > Here is the code I used to check with the code you provided to introducing the image shift. > > clear all; > image1 = imread('0001.png'); > > xShift = 0; > yShift = 20; > translatingElement = translate(strel(1), [yShift xShift]); > image2 = imdilate(image1,translatingElement); > > image1 = image1(1+yShift:end-yShift,1+xShift:end-xShift); > % get rid of Infs from the imdilate function > image2 = image2(1+yShift:end-yShift,1+xShift:end-xShift); > > nrad = 128; ntheta = 360; cx = (283/2)+0.5; cy = (290/2)+0.5; > % cx & cy for a 283x290 pixels image > > pim1 = polartrans(image1, nrad, ntheta, cx, cy, 'linear', 'valid'); > > pim2 = polartrans(image2, nrad, ntheta, cx, cy, 'linear', 'valid'); > > pim1 = pim1 - mean(mean(pim1)); > pim2 = pim2 - mean(mean(pim2)); > > cc_Matrix = xcorr2(pim1, pim2); > figure (1); > imagesc(cc_Matrix); > axis image; > [max_cc_Matrix, maxColumn] = max(max(cc_Matrix)) > [max_cc_Matrix, maxRow] = max(cc_Matrix(:, maxColumn)) > > roiDiam = 20; > cc1_Matrix = cc_Matrix(maxRow-roiDiam/2:maxRow+roiDiam/2, maxColumn-roiDiam/2:maxColumn+roiDiam/2); > figure (2); > imagesc(cc1_Matrix); > axis image; > [a,b] = find_com(cc1_Matrix) % calling function > > Angle_of_rotation = (a + maxColumn - length(cc1_Matrix)/2) * 360/ntheta > > Could you pls have a look of this with any of your random image? > > Thanks. > Darren