我正在尝试使用Rasterio在Jupiter Notebook中可视化一个.tiff图像。我是一家AgriTech公司的初级数据科学家,我们刚刚访问了8个数据层(NDVI等)。用于两个.tiff格式的场。
下面是一个镜像的元数据:
{'driver': 'GTiff', 'dtype': 'float32', 'nodata': -125125.0, 'width': 72, 'height': 87, 'count': 1, 'crs': CRS.from_epsg(32734), 'transform': Affine(20.0, 0.0, 364480.0,
0.0, -20.0, 6292100.0), 'blockxsize': 256, 'blockysize': 256, 'tiled': True, 'compress': 'lzw', 'interleave': 'band'}当我运行以下命令时:
ax = plt.figure(figsize=(15,10))
pic = rasterio.open('/content20180109_biow_Meerlust.tif','r',driver='GTiff',width=72,
height=87,count=1, nodata=-125125.0)
show(pic,with_bounds=False)我得到了一个非常像素化的图像:

我怎么才能在没有像素化的情况下可视化图像呢?我对这些.tiff图像背后的阵列调整的知识是有限的,因为我刚刚开始从事农学领域的工作。欢迎任何建议。
我的目标是使用Streamlit创建一个web应用程序,在那里我可以覆盖这些图像,并创建一个简短的视频,展示图层如何随着时间的推移而变化。
发布于 2020-06-30 00:12:35
这里有几个解决方案,可能有助于清晰地可视化多波段光栅。在这两个示例中,raster是具有多个频带(indexed at 1)的rasterio.DatasetReader。
1.单映像
要查看单个2D平面中的所有图层,必须将波段连接起来:
import numpy as np
import matplotlib.pyplot as plt
bands = []
for i in range(raster.count):
bands.append(raster.read(i+1, out_dtype=np.intc))
plt.title("Full Color Raster")
plt.imshow(np.array(bands))
plt.show()不幸的是,由于pyplot的imshow()函数的限制,这种方法只适用于几个层(传统上是RGB)。您可以随意使用np.intc以外的数据类型。
2.单独可视化层
earthpy.plot模块具有多个用于可视化栅格图层的干净选项,其中包括方便的plot_bands()
import numpy as np
import earthpy.plot as ep
bands = []
# Read the raster's bands to an array
for i in range(raster.count):
bands.append(raster.read((i+1), out_dtype=raster.dtypes[i]))
# Convert to an iterable np.ndarray and plot in a 3-column grid
ep.plot_bands(np.array(bands), cols=3)
这是我的第一个堆栈溢出响应,所以如果我遗漏了什么重要的东西,请让我知道。
https://stackoverflow.com/questions/62029517
复制相似问题