基于PCA进行多光谱和全色图像融合
程序员文章站
2022-07-14 16:51:30
...
参考:
http://blog.csdn.net/what_lei/article/details/48999673
http://blog.sina.com.cn/s/blog_d845c4360101oxx5.html
https://wenku.baidu.com/view/4c30afc43c1ec5da50e270c8.html
PCA图像融合
思想
以多光谱和全色图像的融合来讲解PCA图像融合,主要思想就是利用PCA的方法找到多光谱图像波段间的协方差矩阵的特征分量,接着将全色图像直方图匹配第一主成分,然后用全色图像(也就是pan图)替换协方差矩阵的第一主成分。最后利用PCA逆变换将融合的结果变换回去,得到最终的融合图像。也就是下图所表示的流程。
优缺点分析
PCA 融合算法的优点在于它适用于多光谱图像的所有波段; 不足之处是在PCA 融合算法中只用高分辨率图像简单地替换低分辨率图像的第一主成分, 故会损失低分辨率图像第一主成分中的一些反映光谱特性的信息, 使得融合图像的光谱畸变严重。只按统计的思想, 不考虑图像各波段的特点是PCA融合算法的致命缺点。
matlab代码
close all;
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mul = imread('PCA/low.jpg');
% mul=imresize(mul,[512,512]);
pan = imread('PCA/high.jpg');
%显示原多光谱图
figure,imshow(mul);title('多光谱图像');
%预处理数据在0-1间
mul=double(mul)/255;
pan=double(pan)/255;
%求相关矩阵
[r ,c ,bands]=size(mul);
pixels = r*c;
% reshape每个纤维成一行
mul = reshape(mul, [pixels bands]);
correlation = (mul'*mul)/pixels;
%%%%%%%%%%%求特征向量与特征值%%%%%%%%%%%%%%%%%%
[vector ,value]=eig(correlation);
%求主分量
PC = mul*vector; % Y=AX(X中列为样本,若X行为样本,则Y =XA)
PC = reshape(PC,[r,c,bands]);
%根据第一主分量【直方图配准】pan后代替第一主分量
% PC(:,:,bands)/max(max(PC(:,:,bands)))就是使第一主成分的元素值在0-1之间
% 因为eig所求的特征值从小到大排,故PC第3通道的为第一主成分
[counts,X] = imhist(PC(:,:,bands)/max(max(PC(:,:,bands))));
% 直方图匹配
pan = histeq(pan,counts);%使pan图的直方图分布同第一主成分的直方图一致
PC(:,:,bands) = double(pan*max(max(PC(:,:,bands))));
%PCA逆变换重构融合图象
PC = reshape(PC,[pixels bands]);
fusion = PC*vector';
fusion = reshape(fusion,[r,c,bands]);
%显示融合图象
figure,imshow(fusion(:,:,1:3));title('PCA\_RGB');
上一篇: Java基础
下一篇: 基于OpenCV的图像线性融合