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

GSA_wrapper的编写(二)

得到包含各波段相关系数的8*48的矩阵A后,就是要把相关系数大的两者分到一组。我们用到argmax(axis=0)函数,此函数的作用是返回矩阵每列的最大值的索引,重新组成一个相量。在matlab对应的语句是[~,indices] = max(A,[],1); python的索引从0开始而matlab的索引从1开始。这个indices的意思是:hs的48个波段对应的ms波段应该是第几个(1~8)。
判断posi的奇偶性,创建一个posi向量,但是此向量的作用不明,因为在接下来的代码中并没有用到它。
np.argwhere找到indices里数字的位置(0~47),等同于matlab里的find(indices==j),不同的是,find返回的是行向量而argwhere返回的是列向量,所以又做一次扁平化。
在循环中,tmp是作为新的MS图像,pan是作为新的PAN图像,输入到GSA函数中,而GSA函数正是处理MS+PAN的融合。
最后,结果返回Out。
源码:

    indices = A.argmax(axis=0)
    if (ratio%2)==0:
        posi = np.array([ratio/2,ratio/2])
    else:
        posi = np.array([round(ratio/2),round(ratio/2)])
    for j in range(bands1):
        idx_tmp = np.argwhere(indices == j)
        idx_tmp = idx_tmp.flatten()
        tmp = hs[:,:, idx_tmp]
        pan = ms[:,:, j].reshape((rows1,cols1))
        GSA_tmp = GSA(tmp, pan, posi)
        Out[:,:, idx_tmp] = GSA_tmp
发布了7 篇原创文章 · 获赞 0 · 访问量 161

猜你喜欢

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