我想对高度数据的不规则网格执行双线性插值。草图粗略地向我的网格显示了x,y对的一些示例。我只有米色数据点,并且想要对两者之间的所有值进行插值。插值
我的y的范围是1-10,我的x的值是70-290。该对的z在4880和5000之间变化,最小值在较小的x值上。 到目前为止,我仅使用线性方程式进行插值(这是不可能的),因此我不确定如何解决此问题。我当时正在考虑在Python或R中执行此操作。
编辑: 一些示例数据:
v1 = (85,1,4880); v2 = (284,1,5008); v3 = (91,10,4883);
v4 = (288,10,5008); v5 = (79,3,4879); v6 = (275,3,4995)
答案 0 :(得分:0)
在R中,您可以使用interp()
中的函数akima
,该函数使用Akima, H. (1978)中介绍的双线性插值算法。
library(akima)
v1 = c(85,1,4880); v2 = c(284,1,5008); v3 = c(91,10,4883);
v4 = c(288,10,5008); v5 = c(79,3,4879); v6 = c(275,3,4995)
dat <- as.data.frame(rbind(v1, v2, v3, v4, v5, v6))
colnames(dat) <- c("x", "y", "z")
ip <- with(dat, akima::interp(x, y, z))
with(ip, filled.contour(x, y, z))
转换为Raster
对象并导出
ip.r <- raster(ip$z)
extent(ip.r) <- extent(ip[1:2])
ip.r <- t(ip.r)
writeRaster(ip.r, "bilinear.tif")
ip.r_norm <- ip.r-minValue(ip.r)
ip.r_norm <- ip.r_norm/maxValue(ip.r_norm)
writeRaster(ip.r_norm, "bilinear_norm.tif")