如何使用 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
值。您的数据可能有一些特殊的插值方法,但如果我是您,我会一次又一次地应用高斯过滤器几次,将有效数据复制到过滤后的数据上,以保留已知的好像素免受任何更改 - - 这应该用合理的近似值填充黑点。
我开始使用地理信息系统,需要您的一些建议。我需要将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
值。您的数据可能有一些特殊的插值方法,但如果我是您,我会一次又一次地应用高斯过滤器几次,将有效数据复制到过滤后的数据上,以保留已知的好像素免受任何更改 - - 这应该用合理的近似值填充黑点。