高光谱GSA融合的Python实现(二)

GSA_wrapper函数的构建(一)

GSA_wrapper函数的作用是对读取的HS和MS做初步处理,顺序紧接在载入高光谱数据之后。它的中心思想是:把HS和MS各波段拆解开来,两两求出相关系数,并以此为依据,分为若干组,从而把HS+MS转变为若干组MS+PAN的问题。MRA也有此操作,两者在这一点上是一致的。
首先,按惯例导入numpy和cv2,定义GSA_wrapper(hs,ms,ratio):这三个输入分别是:原始HS、原始MS、大小比例(在本案中是5)。
读取ms的size,储存到rows1 cols1 bands1,hs的size储存到rows2 cols2 bands2 ,在本案中是(500 500 8)和(100 100 48)。
创建两个空矩阵Out和low_res_ms,Out就是我们希望得到的高分辨率高光谱图像,或者清晰化的hs,所以它的size是(500 500 48),和之前的REF的一样的,后面的评价参数就是比较Out和REF,以Out能最大限度的还原REF为参考价值标准。low_res_ms用于储存低分辨的ms,所以size为(100 100 8),要将ms缩小5倍,但是不能直接resize,所以用了一个for循环把每波段的二维矩阵resize了,再装到一起。
创建二维矩阵A ,大小为(bands1, bands2),或者(8,48),用于存放两两波段的相关系数的值。例如A(i,j)存放ms的i波段与hs的j波段的相关系数。
相关系数的计算:for循环嵌套for循环,拆解hs和ms,得到i波段矩阵和j波段矩阵时要先把矩阵扁平化,也就是flatten,或者向量化,用np.corrcoef计算两者的相关系数。corrcoef返回的是一个矩阵,我们要的相关系数在该矩阵的(0,1)或(1,0)位置。
源码:

import numpy as np
import cv2
def GSA_wrapper(hs,ms,ratio):
    rows1 = np.size(ms, 0)
    cols1 = np.size(ms, 1)
    bands1 = np.size(ms, 2)
    rows2 = np.size(hs, 0)
    cols2 = np.size(hs, 1)
    bands2 = np.size(hs, 2)
    Out = np.zeros(shape=(rows1, cols1, bands2))
    low_res_ms = np.zeros(shape=(rows2, cols2, bands1))
    for b in range(bands1):
        tmp = cv2.resize(ms[:,:, b].reshape((rows1,cols1)), (rows2, cols2))
        low_res_ms[:,:, b] = tmp
    A = np.zeros(shape=(bands1, bands2))
    for i in range(bands1):
        tmp2 = low_res_ms[:,:, i].reshape(rows2, cols2)
        for j in range(bands2):
            tmp1 = hs[:,:, j].reshape((rows2,cols2))
            cc = np.corrcoef(tmp1.flatten(), tmp2.flatten())
            A[i, j] = cc[0, 1]

接下来,要根据相关系数把ms和hs的波段们分组。

发布了7 篇原创文章 · 获赞 0 · 访问量 162

猜你喜欢

转载自blog.csdn.net/qq_40640440/article/details/105400220