MATLAB Answers


struggling with shifting an image using non-integer offset

Asked by Alex
on 12 May 2013
Accepted Answer by Matt J

I am not sure I understand the fact that the image's resolution 1500x2000 (integer values) pixels and offset_X = -3.0314 and offset_Y = 1.2432.

How to go about shifting the image taking into account the offset?


1 Answer

Answer by Matt J
on 12 May 2013
 Accepted answer

Use IMTRANSFORM, griddedInterpolant(), or INTERP2.


on 12 May 2013

Thank you for the advice. Could you please, correct the code below based on interp2. Let's say I have an image (size 971x1471) assigned to variable Im. Offset for this image is offset_X = -3.0314 and offset_Y = 1.2432. I need to get the image ImC (corrected image shifted using the offset above). After reading about interp2 I came up with the next code with MATLAB error message leaping at me. Please, guide me here.

[xx,yy] = ndgrid(1:971,1:1471);
xx = xx(:);
yy = yy(:);
xxShifted = xx + offset_X;
yyShifted = yy + offset_Y;
ImC(:) = interp2(xx,yy,Im(:),xxShifted,yyShifted);

Error using griddedInterpolant The grid vectors are not strictly monotonic increasing.

Error in interp2/makegriddedinterp (line 220) F = griddedInterpolant(varargin{:});

Error in interp2 (line 125) F = makegriddedinterp({X, Y}, V, method);

You dont need to (:) xx, yy and Im just send them into interp2 as they are.

Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!