如何使用 python 从值矩阵正确写入光栅图像 (tif)

How to correctly write a raster image (tif) from a value matrix with python

我开始使用地理信息系统,需要您的一些建议。我需要将tif(光栅)转换成3D矩阵,比如之前的矩阵在pandas:

M = [[1, 1]
     [2, 4]
     [3, 1]]

探索 python 个包后,我发现我可以用 rasterio 做到这一点。我使用以下代码:

new_dataset = rasterio.open('test5.tif', 'w', driver='GTiff', height = arr.shape[0], width = arr.shape[1], count=1, 
    dtype=str(arr.dtype),
    crs='+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs',
    transform=transform)
)
new_dataset.write(arr, 1)
new_dataset.close()

关注此 post。因此,对于这个微小的输入,它似乎工作正常,产生以下 tif:

当我尝试使用真正的矩阵加载形式 las/LIDAR 时,其尺寸为:(32019, 5),头部为:

              x             y        z  Classification  ReturnNumber
0  506535.92650  4.762852e+06  4.98525               1             2
1  506534.48700  4.762853e+06  0.00000               2             1
2  506542.35150  4.762849e+06  0.04950               1             1
3  506544.38850  4.762848e+06  0.00000               2             1
4  506543.54475  4.762848e+06  0.00000               2             1

我得到这个:

但是,对于同一张图片,白盒工具会生成这张图片

使用此代码:

import os
import whitebox

wbt = whitebox.WhiteboxTools()
wbt.work_dir = os.path.dirname(os.path.abspath(__file__)) + "/data/"

wbt.lidar_idw_interpolation(
    i="input.las",
    output="output.tif",
    parameter="elevation",
    returns="all",
    resolution=1.0,
    weight=1.0,
    radius=2.5
)

whitebox 工具的输出是正确的,比较两个图像似乎第一个是关于 whitebox 输出的负面影响。我的代码有问题??

关于如何根据其他密度矩阵更改像素 (2D) 颜色的任何建议?

提前致谢!

显然有 (x,y) 个点您没有数据,这些点在您的图片上保持黑色。另一方面,Whitebox 对这些缺失点进行某种插值。

您可能想要找到这些点,并从现有的邻居中插入缺失的 z 值。您的数据可能有一些特殊的插值方法,但如果我是您,我会一次又一次地应用高斯过滤器几次,将有效数据复制到过滤后的数据上,以保留已知的好像素免受任何更改 - - 这应该用合理的近似值填充黑点。