GDAL对tif影像进行滤波
时间: 2023-12-14 08:40:13 浏览: 117
GDAL是一个开源的地理数据处理库,它提供了许多用于处理栅格数据(如.tif格式的图像)的工具和函数。其中,滤波是一种常用的栅格数据处理操作。
GDAL支持多种滤波算法,如均值滤波、高斯滤波、中值滤波等。这些滤波算法可以通过GDAL中的卷积函数进行实现。以下是使用GDAL对tif影像进行高斯滤波的示例代码:
```python
from osgeo import gdal
from osgeo import gdal_array
from osgeo import osr
import numpy as np
# 打开tif影像
ds = gdal.Open('input.tif')
# 获取影像的宽度和高度
width = ds.RasterXSize
height = ds.RasterYSize
# 读取影像数据
band = ds.GetRasterBand(1)
data = band.ReadAsArray(0, 0, width, height)
# 定义高斯滤波核
sigma = 3.0
size = int(sigma * 3) * 2 + 1
kernel = np.zeros((size, size))
for i in range(size):
for j in range(size):
x = i - size // 2
y = j - size // 2
kernel[i, j] = np.exp(-(x**2 + y**2) / (2 * sigma**2))
# 归一化滤波核
kernel /= kernel.sum()
# 对影像数据进行滤波
filtered_data = gdal_array.convolve(data, kernel)
# 创建输出tif影像
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.Create('output.tif', width, height, 1, band.DataType)
# 将滤波后的数据写入输出影像
out_band = out_ds.GetRasterBand(1)
out_band.WriteArray(filtered_data)
# 设置投影信息和仿射变换参数
out_ds.SetGeoTransform(ds.GetGeoTransform())
out_ds.SetProjection(ds.GetProjection())
# 释放资源
del ds
del out_ds
```
上述代码读取了一个tif影像的数据,然后利用高斯滤波核对数据进行了滤波,并将结果保存到了另外一个tif影像中。其中,滤波核的大小和sigma值可以根据实际情况进行调整。
阅读全文