bilinear interpolation of 2D matrix

52 visualizaciones (últimos 30 días)
Muhammad Usman Saleem
Muhammad Usman Saleem el 8 de Mzo. de 2016
Editada: Muhammad Usman Saleem el 15 de Feb. de 2023
I am trying to apply Bilinear/bicubic interpolation on my data set which is in text files. These text files are in a folder and name output_00.text to output_23.text. Each text file consist on three columns. First is Latitude, second is longitude and third column is temperature value at this latitude and longitude(position over earth).
Temperature column contain -9999.000 as not a number or NaN values. This NaN value appear randomly in each file. Some times it appear over start, some times in middle of data, and some times at the end in the file. It is random in appearance.
I want to interpolate these NaN values with bilinear/ bicubic interpolation technique.
This code will read each text file and interpolate it with bilinear method and save it with method_00.text.
My text files has been attached
On google i found a tool for bilinear interpolation over a image or matrix. For the time shake this code can be modify to my requirement. But How? This code as been attached with this question. Link of this tool is here http://www.mathworks.com/matlabcentral/fileexchange/43533-bilinear-interpolation-of-an-image-or-matrix
Thanks always for this kind assistance
  3 comentarios
Muhammad Usman Saleem
Muhammad Usman Saleem el 9 de Mzo. de 2016
@Stephon thanks for your kind contribution always.This question was answered with interpolat1 but now i am asking about interpolation in 2d. Consist on bilinear or scatter.

Iniciar sesión para comentar.

Respuesta aceptada

Mike Garrity
Mike Garrity el 8 de Mzo. de 2016
Here's one approach.
Create an XY grid, but put nans in some of the Z values.
[x,y] = meshgrid(linspace(-3,3,40));
z = peaks(x,y);
m = unique(randi(numel(z),[1 50]));
z(m) = nan;
surf(x,y,z)
Now use scatteredInterpolant to fill in the missing values.
m = isnan(z(:));
F = scatteredInterpolant(x(~m),y(~m),z(~m),'linear');
z2 = z;
z2(m) = F(x(m),y(m));
surf(x,y,z2)
What's going on there is that I created a scatteredInterpolant from the locations where there weren't nans (i.e. x(~m),y(~m),z(~m)), and then I applied it at the locations where there are nans (i.e. x(m),y(m)). Does that make sense?
  3 comentarios
Stephen23
Stephen23 el 9 de Mzo. de 2016
Editada: Stephen23 el 9 de Mzo. de 2016
@Muhammad Usman Saleem
It does not matter how many times you ask, you cannot get the impossible. Bilinear/ bicubic interpolation requires all data on a grid. You have missing data. Ergo you cannot use these methods. This has been explained to you multiple times.
Muhammad Usman Saleem
Muhammad Usman Saleem el 9 de Mzo. de 2016
thanks Stephon i know i am absolutely wrong every time.

Iniciar sesión para comentar.

Más respuestas (1)

Image Analyst
Image Analyst el 8 de Mzo. de 2016
If your data are in a rectangular grid (i.e., an image), you can use imresize() (in the Image Processing Toolbox) to do bilinear interpolation, or a variety of other interpolations. If they're not in a grid, use scatteredInterpolant like Mike showed you.
  5 comentarios
Image Analyst
Image Analyst el 8 de Mzo. de 2016
See attached.
Muhammad Usman Saleem
Muhammad Usman Saleem el 9 de Mzo. de 2016
thanks for you reply @image.
But this will be modification to my shared code. I want to modify this code so that i can read all test files and interpolation through bilinear and bicubic interpolation and then save it. This attachment only producing my text file as image. And i do not know what will be input in my code

Iniciar sesión para comentar.

Categorías

Más información sobre Interpolation of 2-D Selections in 3-D Grids en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by