在Python中读取并显示遥感影像,可以使用rasterio
库读取影像数据,并结合matplotlib
库进行可视化。以下是一个完整的示例代码:
import rasterio
import matplotlib.pyplot as plt
# 打开遥感影像文件
with rasterio.open('path/to/your/image.tif') as src:
# 获取影像的基本信息
width = src.width
height = src.height
bands = src.count
crs = src.crs
transform = src.transform
print(f"Width: {width}, Height: {height}, Bands: {bands}")
print(f"CRS: {crs}")
print(f"Transform: {transform}")
# 读取所有波段
data = src.read() # 返回形状为 (bands, height, width) 的 numpy 数组
# 选择 RGB 波段进行显示(假设波段顺序为 R, G, B)
# 注意:实际波段顺序可能因影像而异,需要根据具体情况调整
rgb = data[[2, 1, 0], :, :] # 例如,对于 Landsat 8,通常使用波段 4, 3, 2 作为 RGB
# 归一化数据以便更好地可视化(假设数据范围为 0-10000)
rgb_normalized = rgb.astype('float32') / 10000.0
# 使用 matplotlib 显示影像
plt.figure(figsize=(10, 10))
plt.imshow(rgb_normalized)
plt.title('Remote Sensing Image')
plt.axis('off') # 关闭坐标轴
plt.show()
代码说明:
-
读取影像:
- 使用
rasterio.open
打开遥感影像文件。 src.read()
读取所有波段的数据,返回一个形状为(bands, height, width)
的 numpy 数组。
- 使用
-
选择波段:
- 遥感影像通常包含多个波段,如红、绿、蓝等。
rgb = data[[2, 1, 0], :, :]
假设波段顺序为 R, G, B,并根据需要进行调整。
-
数据归一化:
- 遥感影像的像素值范围可能较大,归一化到 0-1 之间可以更好地可视化。
rgb_normalized = rgb.astype('float32') / 10000.0
假设数据范围为 0-10000,根据实际情况调整分母。
-
显示影像:
- 使用
matplotlib.pyplot.imshow
显示归一化后的影像。 plt.axis('off')
关闭坐标轴,使影像显示更干净。
- 使用
注意事项:
- 文件路径:确保将
'path/to/your/image.tif'
替换为实际的影像文件路径。 - 波段顺序:不同的遥感影像可能使用不同的波段顺序,需要根据具体情况调整
rgb
的选择。 - 数据范围:归一化时使用的分母应根据影像的实际数据范围进行调整。
- 大影像处理:对于非常大的遥感影像,直接读取和显示可能会导致内存不足,可以考虑分块读取或降采样。
运行此代码后,你将能够看到读取的遥感影像的彩色可视化结果。