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

时间:2019-09-02 02:31:07

标签: python gis rasterio

我开始使用地理信息系统,需要您的一些建议。我需要将tif(光栅)转换为3D矩阵,例如,熊猫中的前一个矩阵:

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:

enter image description here

当我尝试从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

我得到这个:

enter image description here

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

enter image description here

使用此代码:

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
)

白盒工具的输出是正确的,并且比较两个图像似乎是第一个像负面效果一样尊重白盒的输出。我的代码有什么问题吗?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

您可能想找到这些点,并从现有邻居中插入缺失的z值。对于您的数据,可能会有一些特殊的插值方法,但是如果我是您,我会一次又一次地应用高斯滤波器,将有效数据复制到经过滤波的数据上,以保留已知的良好像素(不会发生任何变化)- -这应该以合理的近似值填充黑点。