Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to interpolate from nonuniform 2D locations to regular grid?

I have nonuniformly located samples of an image, and would like to interpolate to a regular grid because (among other things) most image graphics functions expect a regular grid. I notice there are some MatLab functions (see Image interpolation from random pixels for example) which apparently will do this, but couldn't find an R-package that does.
Here's a simple example.

#make up some 2D func
y<-matrix(rep(1:10,10) -.5 + runif(100),nrow=10)
x<-matrix(rep(1:10,10) -.5 + runif(100),nrow=10)
inmat<-sin(x) + cos(y)

So the values of inmat are on random locations. I want some sort of outmat<-interpolate(inmat,x,y,gridx,gridy) function where inmat , x,and y are either all matrices or all vectors (unwrapped matrices).

I see also that SciPy has http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html which does this. Is there such a function in an R package or do I need to port from SciPy or MatLab code?

like image 970
Carl Witthoft Avatar asked Nov 12 '22 21:11

Carl Witthoft


1 Answers

The linked pages provide pointers to a gazillion R packages which do Kriging or other interpolation functions.

I'm posting my personal choice as an answer just to close out this question.

I found akima::interp to be a straightforward function to do 2D interpolation on arbitrary collections of sample locations.
That doesn't mean it's going to be best for everyone, and my guess is those working with geodata may prefer packages designed to muck with specific geo-survey-related file types and lat/long coordinate systems.

like image 86
Carl Witthoft Avatar answered Nov 15 '22 07:11

Carl Witthoft