3D滤波器处理遥感tif图像

python 复制代码
import cv2
import numpy as np
from osgeo import gdal

# 定义 Gabor 滤波器的参数
kSize = 31  # 滤波器核的大小
g_sigma = 3.0  # 高斯包络的标准差
g_theta = np.pi / 4  # Gabor 函数的方向
g_lambda = 10.0  # 正弦波的波长
g_gamma = 0.5  # 空间纵横比
g_psi = np.pi / 2  # 相位偏移

# 生成 Gabor 滤波器核
kernel = cv2.getGaborKernel((kSize, kSize), g_sigma, g_theta, g_lambda, g_gamma, g_psi, ktype=cv2.CV_32F)

# 使用gdal读取遥感图像
dataset = gdal.Open("1.tif")
image = dataset.ReadAsArray().transpose((1, 2, 0))  # 将波段维度转置到最后

# 获取图像的波段数
num_bands = image.shape[2]

# 初始化处理后的多波段图像
filtered_image = np.zeros_like(image, dtype=np.float32)

# 遍历每个波段
for band in range(num_bands):
    # 提取当前波段
    band_image = image[:, :, band]

    # 应用 Gabor 滤波器
    filtered_band_image = cv2.filter2D(band_image, cv2.CV_32F, kernel)

    # 将处理后的波段放回结果图像中
    filtered_image[:, :, band] = filtered_band_image

# 将处理后的图像转换为合适的数据类型
filtered_image = np.clip(filtered_image, 0, 255).astype(np.uint8)

# 保存结果
driver = gdal.GetDriverByName('GTiff')
out_dataset = driver.Create('gaofen2_image.tif', dataset.RasterXSize, dataset.RasterYSize, num_bands, gdal.GDT_Byte)
out_dataset.SetProjection(dataset.GetProjection())
out_dataset.SetGeoTransform(dataset.GetGeoTransform())
for band in range(num_bands):
    out_band = out_dataset.GetRasterBand(band + 1)
    out_band.WriteArray(filtered_image[:, :, band])
out_dataset.FlushCache()

# 关闭数据集
dataset = None
out_dataset = None
相关推荐
山登绝顶我为峰 3(^v^)31 天前
如何录制带备注的演示文稿(LaTex Beamer + Pympress)
c++·线性代数·算法·计算机·密码学·音视频·latex
秋窗74 天前
Mac 部署Latex OCR并优化体验(打包成App并支持全局快捷键)
macos·ocr·latex
八一考研数学竞赛19 天前
第十七届全国大学生数学竞赛初赛模拟试题
学习·数学·latex·全国大学生数学竞赛
momo87024 天前
当你安装TeX Live 2025 却遇到中文用户名时。。。
latex
星夜钢琴手24 天前
缩小 IEEE 会议论文 LaTeX 模板标题、作者信息和正文的间距
latex·ieee conference
cnkeysky1 个月前
vscode 配置 latex
vscode·latex
磁悬浮青蛙呱呱呱1 个月前
xdvipdfmx:fatal: File ended prematurely. No output PDF file written.
latex
EtherWanderer1 个月前
Markdown 到 LaTeX:Overleaf 学习笔记
笔记·学习·latex
hallo-ooo1 个月前
【LaTex】基础语法入门
latex
伊织code2 个月前
LaTeX OCR - 数学公式识别系统
python·ai·ocr·latex·数学公式识别