gpt4 book ai didi

python - 使用 matplotlib 和 Rasterio 我正在尝试将栅格保存为 GeoTIFF 并重新投影它?

转载 作者:行者123 更新时间:2023-12-05 07:28:22 25 4
gpt4 key购买 nike

我已经能够使用 matplotlib 绘制和显示光栅图像。那部分是成功的。我坚持的部分是能够以某种方式保存该情节。对于 rasterio,我找到了两个有用的教程:

https://rasterio.readthedocs.io/en/latest/topics/windowed-rw.html

https://www.earthdatascience.org/courses/earth-analytics-python/multispectral-remote-sensing-in-python/export-numpy-array-to-geotiff-in-python/

我已经计算了一个名为 NDVI 的函数,通过 matplotlib,我可以使用以下代码按照我想要的方式显示它。但是当我将文件另存为 GeoTIFF 时,桌面上的图像全黑了。我也计划重新投影数据,并且我已将该代码注释掉。

这是我的代码:

import rasterio
import matplotlib.pyplot as plt
import numpy as np


nirband = r"LC08_L1TP_015033_20170822_20170912_01_T1_B5.TIF"

redband =r"LC08_L1TP_015033_20170822_20170912_01_T1_B4.TIF"


#rasterio.windows.Window(col_off, row_off, width, height)
window = rasterio.windows.Window(2000,2000,800,600)

with rasterio.open(nirband) as src:
subset = src.read(1, window=window)

fig, ax = plt.subplots(figsize=(12,6))
plt.imshow(subset)
plt.title(f'Band 5 Subset')





with rasterio.open(nirband) as src:
nir = src.read(1, window=window)

with rasterio.open(redband) as src:
red = src.read(1, window=window)

red = red.astype(float)
nir = nir.astype(float)
np.seterr(divide='ignore', invalid='ignore')

ndvi = np.empty(nir.shape, dtype=rasterio.float32)
check = np.logical_or ( red > 0, nir > 0 )
naip_ndvi = np.where ( check, (1.0*(nir - red )) / (1.0*( nir + red )),-2 )


fig, ax = plt.subplots(figsize=(12,6))
ndvi = ax.imshow(naip_ndvi)
ax.set(title="NDVI")



with rasterio.open("LC08_L1TP_015033_20170822_20170912_01_T1_B5.TIF") as src:
naip_data_ras = src.read()
naip_meta = src.profile


with rasterio.open('MyExample.tif', 'w',**naip_meta) as dst:
dst.write(naip_ndvi, window=window)


# =============================================================================
# with rasterio.open('example.tif') as dataset:
#
# # Read the dataset's valid data mask as a ndarray.
# mask = dataset.dataset_mask()
#
# # Extract feature shapes and values from the array.
# for geom, val in rasterio.features.shapes(
# mask, transform=dataset.transform):
#
# # Transform shapes from the dataset's own coordinate
# # reference system to CRS84 (EPSG:4326).
# geom = rasterio.warp.transform_geom(
# dataset.crs, 'EPSG:4326', geom, precision=6)
#
# # Print GeoJSON shapes to stdout.
# print(geom)
# =============================================================================

这是我使用 matplotlib 时 NDVI 的样子(我想将其作为 GeoTIFF 文件保存到我的桌面):

NDVI

感谢您的所有帮助!

最佳答案

您如何查看输出图像?在可以向文件添加对比度拉伸(stretch)的图像查看器、GIS 或遥感软件中? NDVI 值从 -1 到 1 - 也许值的范围太小,您的软件无法自动显示。我最近在修改 PlanetScope 图像时遇到了类似的问题 - 它使用 matplotlib 按预期显示,但 tiff 显示为黑色。

您可以尝试通过将单元格值乘以 100 来缩放输出 - 这可能有助于解决显示问题。您还可以使用可以对图像应用对比度拉伸(stretch)的软件(QGIS、esri 产品、ImageJ 或图像处理软件)来验证输出图像值

关于python - 使用 matplotlib 和 Rasterio 我正在尝试将栅格保存为 GeoTIFF 并重新投影它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com