【数字图像处理matlab】(基于PCA的影像融合)

【数字图像处理matlab】(基于PCA的影像融合)

HR为高分辨影像,MS为多光谱影像。(注:我的这两张图像分辨率是一样的,所以当时没有加重采样代码,如果分辨率不一样应该先将多光谱影像采样到全色波段一样的分辨率)

基于PCA的影像融合原理:
(1)将多光谱图像进行PCA正变换,计算多光谱影像的协方差矩阵Cov,经过特征值分解,获得特征值矩阵E特征向量矩阵EV。变换后的像元值计算:Y=X*EV
最后,形成按能量排序的正交分量:第1主分量、第2主分量、…第n主分量;
(2)将高分辨率影像和第1主分量进行直方图匹配,使高分辨率影像与第一主分量影像有相近的均值和方差;
(3)用直方图匹配后的高分辨率影像代替主分量中的第一主分量,并与其余主分量一起进行主分量逆变换,获得高分辨率的多光谱融合图像。

function F=PCA_melt(HR,MS)
%调用代码-------------------------------
%Image1=imread('HR.jpg');Image2=imread('MS.jpg');
%PCA_melt(Image1,Image2);
%--------------------------------------
HR=im2double(HR);
MS=im2double(MS);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PCA变换
[row,column,bands]=size(MS);
X=reshape(MS,[row*column,bands]);     %每一波段的数据保存在一列  
Cov=cov(X);        %求方差协方差矩阵,(i,j)个元素等于X的第i列向量与第j列向量的方差
[vector,value]=eig(Cov);     %a为特征向量矩阵(一列为一个特征向量),b为特征值矩阵(排序为从小到大)
vector=fliplr(vector);        %fliplr()翻转特征值与特征向量矩阵,实现由大到小排序
value=fliplr(value);   value=flipud(value); 
%Y=vector'*X',    %3*3/3*b--3*b 每一行为一个波段
Y=X*vector;     %每一列为一个波段

Major=reshape(Y(:,1),[row,column]);
[counts,X]=imhist(Major/max(max(Major)));
HR1=histeq(HR,counts);  %高分辨率影像进行直方图均衡化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%高分辨率影像替代第一主分量
Y(:,1)=reshape(HR1*max(max(HR)),[row*column,1]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%PCA逆变换%%%%%%%%
Image1=Y*inv(vector);   %pexel*3-3*3
Image1=reshape(Image1,[row,column,bands]);
imshow(Image1);title('基于PCA的影像融合');


end

测试:
在这里插入图片描述

  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值