2D Interpolation (Linear and spline) of a greyscale image

83 views (last 30 days)
Hi Guys,
I have a grey scale image (shown below):
http://www.qfpost.com/download.do?get=f8295c24e09fe632b90a1d09ae5ac69a
Which I wish to interpolate to give 10 times the number of pixels - This is so I can find the edge of the beam when using a white-black intensity graph across the image as the edge is not exactly on a pixel - after carrying out a Canny edge detection.
The following code:
ZI = interp2(X,Y,Z,XI,YI,method)
seems to be the code I require where method will be 'linear' etc, however, I am not sure what the values X,Y,Z,XI and YI should be.
I guess that Z is my image, and the X and Y are co-ordinates of some kind but how would I determine then? I think it has something to do with meshgrids but I do not know very much about such techniques.
Any help would be much appreciated! Thanks, Graham
  4 Comments
Image Analyst
Image Analyst on 3 Dec 2018
Yes. Scroll down the page and see the Answer with the green check mark, meaning he accepted that answer.

Sign in to comment.

Accepted Answer

Sean de Wolski
Sean de Wolski on 25 Feb 2011
Z is your image. You'll want to convert it to double for the interpolation and then back to uint8 or whatever other class after:
I = your_image;
class_of_I = class(I);
[x y] = meshgrid(1:256);
[xi yi] = meshgrid(1:0.1:256);
class_of_I
New_Image = cast(interp2(x,y,double(I),xi,yi,'linear'),class_of_I);
  9 Comments
Graham Boag
Graham Boag on 1 Mar 2011
It does show me the new_image but also it says:
Warning: Image is too big to fit on screen; displaying at 25%
> In imuitools\private\initSize at 73
In imshow at 262
Is there a way I can save the full image to avoid the warning?
Graham Boag
Graham Boag on 1 Mar 2011
I got it, sorry, nevermind!
imwrite(New_Image, 'new.tif')
seems to work! Thanks again for all your help with this problem Sean!

Sign in to comment.

More Answers (4)

Sean de Wolski
Sean de Wolski on 25 Feb 2011
X,Y are the results of:
[X Y] = meshgrid(1:256)
Xi, Yi are the locations that you want an interpolated value at, for your example:
[Xi Yi] = meshgrid(1:0.1:256);
%SCd
  3 Comments
Graham Boag
Graham Boag on 25 Feb 2011
I seem to get the following error when I type my code:
ZI = interp2(X,Y,Z,Xi,Yi)
??? Error using ==> times
Integers can only be combined with integers of the same
class, or scalar doubles.
Error in ==> interp2>linear at 354
F = ( arg3(ndx).*(onemt) + arg3(ndx+1).*t ).*(1-s)
+ ...
Error in ==> interp2 at 220
zi = linear(ExtrapVal,x,y,z,xi,yi);
Graham Boag
Graham Boag on 25 Feb 2011
Sorry the above answer is when i typed a random value for Z. If I type:
Z = peaks(X,Y);
It seems to run for ages..then i type imshow(ZI) and I get a message saying the image is too big to fit on screen. Have I run the method correctly? Sorry If this is not so clear

Sign in to comment.


pooja chandrabose
pooja chandrabose on 25 Jan 2018
I need to know how to apply interpolation in a image (biliner,cubic, convolution)plz I need this info as soon as possible

image-pro
image-pro on 16 Apr 2022
did you get the answer please tell me the code?
  1 Comment
Image Analyst
Image Analyst on 16 Apr 2022
I don't know why all the answers were using interp2 and meshgrid when you can do it simply with imresize()
outputImage = imresize(inputImage, [numDesiredRows, numDesiredColumns]);

Sign in to comment.


Image Analyst
Image Analyst on 16 Apr 2022
I don't know why all the answers were using interp2 and meshgrid when you can do it simply with imresize()
outputImage = imresize(inputImage, [numDesiredRows, numDesiredColumns]);
imresize() has several interpolation schemes you can choose from.
  2 Comments
Bruno Luong
Bruno Luong on 16 Apr 2022
Because imresize requires image processing toolbox.
image-pro
image-pro on 17 Apr 2022
i want to know how to apply newton divided difference interpolation in image

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!