Image Processing: Shifting Images
Contents
Assuming we have two images of the same object, but not aligned properly:
imagesc(im1), imagesc(im2);
![]() |
![]() |
Finding the difference in coordinates
You must be careful when choosing the reference points. Here we use the end points of the major axis in the denser (red) region and average over them. We now type ginput to find the coordinates of the rings:
imagesc(im1) [x1, y1] = ginput(2)
x1 = 49.7200 77.0104 y1 = 65.4430 78.3728
Then do the same thing to im2:
imagesc(im2) [x2, y2] = ginput(2)
x2 = 79.6094 108.5242 y2 = 94.2412 111.2851
Assuming we want to keep im1 unchanged and shift im2 to fit im1. Then we calculate the difference in coordinates:
Diffx = x1 - x2
Diffx = -29.8894 -31.5138
Diffy = y1 - y2
Diffy = -28.7982 -32.9123
Averaging over the two points we have
Dx = mean(Diffx)
Dx = -30.7016
Dy = mean(Diffy)
Dy = -30.8553
Remember that the rows are in the y-direction and the columns are in the x-direction, and the pixel indices should be integer. Therefore the number of rows and columns over which im2 must be shifted, are
Nrow = round(Dy)
Nrow = -31
Ncol = round(Dx)
Ncol = -31
The round() function returns value to the nearest integer.
Calling the function 'imshift'
To call the function, type the following command:
imr=imshift(im2,Nrow,Ncol);
Now the shifted im2 (i.e. imr) should be aligned with im1:
imagesc(imr), imagesc(im1);
![]() |
![]() |