Java教程

【图像融合】稀疏表示多光谱图像融合matlab源码

本文主要是介绍【图像融合】稀疏表示多光谱图像融合matlab源码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、稀疏表示简介

1 稀疏表示理论
稀疏表示用较少的基本信号的线性组合来表达大部分或者全部的原始信号。信号经稀疏表示后, 如果越稀疏那么重构后的信号精度越高。设x∈Rn为待处理信号, D∈Rn×m为字典, 则x可以表示为:
在这里插入图片描述
式中:Θ∈Rm, Θ= (θ1, θ2…, θm) 为稀疏系数;D (nm) 为过完备字典。加入稀疏性约束后, 式 (1) 可由式 (2) 得到:
在这里插入图片描述
式中‖·‖0表示l0范数, 它表示Θ中非0元素的个数。式 (2) 的精确稀疏表示通常不能满足, 其逼近形式可以描述为:
在这里插入图片描述
式中v∈Rn为逼近误差, 因此将式 (2) 转化为对式 (3) 的求解。
在这里插入图片描述
式中ε为容许误差, ε>0。直接求解l0范数是一个NP难问题, 对于它的求解可以使用松弛算法或贪婪算法。
稀疏表示中的稀疏分解算法首先由Mallat提出, 他提出的匹配追踪算法 (Matching Pursuit, MP) 算法, 简单且易于实现, 因此得到了广泛的应用。随后, 学者们基于MP算法相继提出了改进算法, 如正交匹配追踪算法 (Orthogonal Matching Pursuit, OMP) 相较于MP算法收敛速度更快。

2 基于稀疏表示的多光谱图像融合
本文提出了基于稀疏表示的多光谱图像融合方法, 其实现过程为:
Step1:将多光谱图像经过PCA变换, 得到图像的第一主分量;
Step2:用全色图像与第一主分量进行直方图匹配;
Step3:将第一主分量和匹配后的全色图像进行分块, 对每个图像块进行稀疏表示, 对稀疏系数采用绝对值取大法进行融合;
Step4:将融合系数进行重构, 进而得到融合后的多光谱图像。

二、部分源代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  The implementation of Hybrid Monte Carlo method to evaluate the joint posterior distribution
%   AUTHOR: Qi WEI, University of Toulouse, qi.wei@n7.fr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;clear all;
setup;
Verbose='on';
generate=1;subMeth='PCA';FusMeth='Sparse';
scale=1;SNR_R=inf;seed=1;
%% Generate the data
[name_image,band_remove,band_set,nr,nc,N_band,nb_sub,X_real,XH,XHd,XHd_int,XM,VXH,VXM,psfY,psfZ_unk,...
    sigma2y_real,sigma2z_real,SNR_HS,SNR_MS,miu_x_real,s2_real,P_inc,P_dec,eig_val]=Para_Set(seed,scale,subMeth,SNR_R);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Sparse fusion consists three parts
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Step 1: Learn the rough estimation
learn_dic=1;train_support=1;Para_Prior_Initial;
X_source=RoughEst(XM,XH,XHd,psfY,nb_sub,P_dec);
%% Step 2: Learn the dictionary
[time_LD,Dic,supp]=Dic_Para(X_source,P_inc,learn_dic,train_support,X_real,0);
%% Step 3: Alternating optimization
[HSFusion.(FusMeth),Costime,diff_X,RMSE_sub,RMSE_org,tau_d_set,VXd_dec]=AlterOpti(X_source,XH,XM,psfY,...
    psfZ_unk,sigma2y_real,sigma2z_real,P_dec,P_inc,FusMeth,X_real,Dic,supp);
%% Evaluate the fusion results: Quantitative
[err_max.(FusMeth),err_l1.(FusMeth),err_l2.(FusMeth),SNR.(FusMeth),Q.(FusMeth),SAM_m.(FusMeth),RMSE_fusion.(FusMeth),...
    ERGAS.(FusMeth),DD.(FusMeth)] = metrics(X_real,HSFusion.(FusMeth),psfY.ds_r);
fprintf('%s Performance:\n SNR: %f\n RMSE: %f\n UIQI: %f\n SAM: %f\n ERGAS: %f\n DD: %f\n Time: %f\n',...
    FusMeth,SNR.(FusMeth),RMSE_fusion.(FusMeth),Q.(FusMeth),SAM_m.(FusMeth),ERGAS.(FusMeth),DD.(FusMeth),Costime.(FusMeth));
%% Display the fusion results: Qualitive
normColor = @(R)max(min((R-mean(R(:)))/std(R(:)),2),-2)/3+0.5;
temp_show=X_real(:,:,band_set);temp_show=normColor(temp_show);
figure(113);imshow(temp_show);title('Groundtruth')
temp_show=XHd_int(:,:,band_set);temp_show=normColor(temp_show);
figure(114);imshow(temp_show);title('HS image')
temp_show=mean(XM,3);temp_show=normColor(temp_show);
figure(115);imshow(temp_show);title('MS image')
temp_show=HSFusion.(FusMeth)(:,:,band_set);temp_show=normColor(temp_show);
figure(116);imshow(temp_show);title(['Fused image-' FusMeth])
name=[mat2str(clock) FusMeth '.mat'];save(name);

3

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

 

这篇关于【图像融合】稀疏表示多光谱图像融合matlab源码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!