Brovey图像融合方法+Python代码

    技术2026-02-09  1

    Brovey图像融合方法+Python代码

    1、方法原理

    原理:Brovey变换融合又叫做比值变换融合,通过对多光谱数据进行归一化后,与高分辨率影像进行乘积来增加影像信息;

                                               

    2、实现代码

    # coding=utf-8 ''' Created on 2020-6-1 @author: jiangao Project: Brovey图像融合方法 ''' import numpy as np import cv2 import scipy.misc as smi from osgeo import gdal from PIL import Image def gdal_open(path): """ 读取图像函数 输入:图像路径 返回:np.ndArray格式的三维数组 """ data = gdal.Open(path) col = data.RasterXSize#读取图像长度 row = data.RasterYSize#读取图像宽度 data_array_r = data.GetRasterBand(1).ReadAsArray(0,0,col,row).astype(np.float)#读取图像第一波段并转换为数组 data_array_g = data.GetRasterBand(2).ReadAsArray(0,0,col,row).astype(np.float)#读取图像第二波段并转换为数组 data_array_b = data.GetRasterBand(3).ReadAsArray(0,0,col,row).astype(np.float)#读取图像第三波段并转换为数组 data_array = np.array((data_array_r,data_array_g,data_array_b)) return data_array def imresize(data_low,data_high): """ 图像缩放函数 输入:np.ndArray格式的三维数组 返回:np.ndArray格式的三维数组 """ band , col , row = data_high.shape data = np.zeros(((band,col,row))) for i in range(0,band): data[i] = smi.imresize(data_low[i],(col,row)) return data def brovey(data_low,data_high): """ 色彩标准化融合函数 输入:np.ndArray格式的三维数组 返回:可绘出图像的utf-8格式的三维数组 """ band , col , row = data_low.shape total = 0 for i in range(0,band): total = total + data_low[i] RGB = np.zeros(((band,col,row))) for i in range(0,band): RGB[i] = data_low[i] * data_high[i] / total min_val = np.min(RGB.ravel()) max_val = np.max(RGB.ravel()) RGB = np.uint8((RGB.astype(np.float) - min_val) / (max_val - min_val) * 255) RGB = Image.fromarray(cv2.merge([RGB[0],RGB[1],RGB[2]])) return RGB def main(path_low,path_high): data_low = gdal_open(path_low) data_high = gdal_open(path_high) data_low = imresize(data_low,data_high) RGB = brovey(data_low,data_high) RGB.save('Brovey.png','png') if __name__ == "__main__": path_low = 'RGB.tif' path_high = 'Band8.tif' main(path_low,path_high)

    3、执行结果

    RGB图像:

    高分全色波段影像:

    Brovey融合影像:

    Processed: 0.016, SQL: 9