% Alternating Optimization algorithm
% define and initialize variables
% Z: the target in image form
% Z_dec: the subspace transformed subspace in image form
function [Zim,Costime,diff_X,RMSE_sub,RMSE_org,varargout]=AlterOpti(X_rough,XH,XM,psfY,psfZ,s2y_real,s2z_real,P_dec,P_inc,FusMeth,X_real,varargin)
[nr,nc,~]=size(XM); % The size of the MS data
nb_sub=size(P_dec,1); % The dimension of subspace or the number of principal components
N_band=size(XH,3); % The dimension of HS dat
[VXM,VXH,FBm,FBmC,FZ,FZ_s,FZC,FZC_s,mask_s,ConvCBD,conv2im,conv2mat] = func_define(XM,XH,psfY,nb_sub);
% psfZ=psfZ_estimate(XHd,XM,psfY);
% psfZ=psfZ./repmat(sum(psfZ,2),1,size(psfZ,2));
% psfZ=psfZ_unk;
psfZ_s=psfZ*P_inc;% size:4*6
% VXHd_int=reshape(var_dim(XHd_int,P_dec),nr*nc,nb_sub)';
VXHd_int=reshape(ima_interp_spline(var_dim(XH(1:psfY.ds_r:end,1:psfY.ds_r:end,:),P_dec),psfY.ds_r),nr*nc,nb_sub)';
VX_real=reshape(var_dim(X_real,P_dec),nr*nc,nb_sub)';
%--------------------------------------------------------------------------
% Corrupt with additive noise
%--------------------------------------------------------------------------
R1 = zeros(N_band); R2 = zeros(size(XM,3));
for i=1:N_band; R1(i,i) = 1/s2y_real(i); end; % HS bands
for i=1:size(VXM,1); R2(i,i) = 1/s2z_real(i); end; % MS bands
%% The regularization parameter
% tau_begin=0; tau_stop=50;% Moffet
% tau_begin=30; tau_stop=100;% Pavia
% tau_begin=15; tau_stop=35;% Pavia whole
% step=(tau_stop-tau_begin)/5;
% tau_d_set=tau_begin:step:tau_stop;
tau_d_set=25;% Pavia HS+mS
% tau_d_set=75; %Moffet HS+MS
% tau_d_set=80;% Moffet HS+PAN
% tau_d_set=18;% Pavia HS+MS whole image
Zim=zeros([size(X_real) length(tau_d_set)]);
for j=1:length(tau_d_set)
if strcmp(FusMeth,'Sparse') || strcmp(FusMeth,'BCG')
II_FB = repmat(1./(FBm.*FBmC + 2),[1 1 N_band]);II_FB_s = II_FB(:,:,1:nb_sub);
if strcmp(FusMeth,'Sparse')
% Para_Prior=varargin{1};
if size(varargin{1},4)>1
D_s=varargin{1};
else
Dic=varargin{1};
supp=varargin{2};
end
IsSubMean=0;
tau_d=tau_d_set(j);
elseif strcmp(FusMeth,'BCG')
Para_Prior=varargin{1}; Prior_Ini; tau_d=1;
end
elseif strcmp(FusMeth,'GMM')
obj=varargin{1}; obj_est=varargin{2};
pat_mode=varargin{3}; N_pat=varargin{4};
shift_size=varargin{5};
patsize=sqrt(size(obj.mu,1));
N_ga=length(obj.alpha);
Cube=1;
if strcmp(pat_mode,'distinct')
II_FBGM=repmat(1./(FBm.*FBmC + 2),[1 1 N_band]);
elseif strcmp(pat_mode,'sliding')
II_FBGM=repmat(1./(FBm.*FBmC + patsize^2 + 1),[1 1 N_band]);
end
II_FBGM_s = II_FBGM(:,:,1:nb_sub);
tau_d=1;
end
%% The Lagrange parameter
% mu = 0.05;% mu_set = 0.01:1:10.01;
% mu = 5e-2/mean(s2y_real); %% For patsize=1;
mu = 5e-2/mean(s2y_real);
% for mu=mu_set
tic
%% Initialization
% epsilon1=1e2*ones(1,N_band);
% epsilon2=1e2*ones(1,size(XM,3));
% VX_dec=VXHd_int; % Initialization of X % VX_dec=VX_dec_ref;
if strcmp(FusMeth,'Sparse') || strcmp(FusMeth,'GMM')
VX_dec=reshape(X_rough,[nr*nc nb_sub])';
else
VX_dec=VXHd_int;
end
RMSE_sub_ini=mean2((VX_dec-VX_real).^2);
RMSE_org_ini=mean2((P_inc*(VX_dec-VX_real)).^2);
display([RMSE_sub_ini RMSE_org_ini])
if strcmp(FusMeth,'GMM')
% Do the math in advance to accelerate the speed: band-wise and Gaussian-term-wise
InvCovGM=zeros(size(obj.Cov)); % The inverse of covariance matrix
InvCovMu=zeros(size(obj.Cov)); % The inverse of Cov+mu*I
InvCovTem = zeros([patsize^2 1 N_ga nb_sub]);
for i=1:nb_sub
for k=1:N_ga
InvCovGM(:,:,k,i)=inv(obj.Cov(:,:,k,i));
InvCovMu(:,:,k,i)=inv(InvCovGM(:,:,k,i)+mu*eye(patsize^2));
InvCovTem(:,:,k,i)=InvCovGM(:,:,k,i)*obj.mu(:,k,i);
% InvCovTem(:,:,k,i)=mtimesx(InvCovGM(:,:,k,i),reshape(obj.mu(:,k,i),[patsize^2 1 1 1]));
end
end
label=LabelUpdate(VX_dec,VXM,N_pat,obj,obj_est,conv2im,pat_mode,shift_size,Cube); %VX_real
figure(80);imagesc(col2im(repmat(label,[patsize^2 1]),[patsize patsize],[nr nc],'distinct'));
end
V1 = ConvCBD(VX_dec,FZ_s); G1 = V1;
V2 = VX_dec; G2 = V2;
if strcmp(FusMeth,'BCG') || strcmp(FusMeth,'Sparse')
V3 = VX_dec; G3 = VX_dec;
VXd_dec = VX_dec; % VXd_dec: The prior mean of VX_dec (the target image)
if strcmp(FusMeth,'BCG')
invCov_U=Para_Prior.invCov_U0; % Updated in the optimization
elseif strcmp(FusMeth,'Sparse')
% invCov_U=Para_Prior.invCov_U0;
invCov_U=eye(nb_sub); % Fixed in the optimization
end
elseif strcmp(FusMeth,'GMM')
MX_dec=conv2im(VX_dec,nb_sub);
V3=zeros([patsize^2 1 N_pat nb_sub]);
for i=1:nb_sub
if strcmp(pat_mode,'sliding')
temp=padarray(MX_dec(:,:,i),[patsize-1 patsize-1],'circular','post');
elseif strcmp(pat_mode,'distinct')
temp=circshift(MX_dec(:,:,i),shift_size);
end
temp=im2col(temp,[patsize patsize],pat_mode);
V3(:,:,:,i) = reshape(temp,[patsize^2 1 N_pat 1]);
end
G3 = V3;
% G3 = V3*0;
end
% All variables (Z,V1,V2,V3,G1,G2,G3) are matrices
%% ADMM parameters
iters = 1e1; %Iters for the external loop
ADMM='on';admm_iters = 50; %tol_cost=1e-5;cost_fun=zeros(1,iters);temp3=zeros([nr nc nb_sub]);
if strcmp(FusMeth,'Sparse'); tol_para=3e-3; %tol_para=1e-2;
else tol_para=1e-2;
end
tau_daux = tau_d;
RMSE_sub=zeros(1,iters);RMSE_org=zeros(1,iters);diff_X=zeros(1,iters);
%% Alternating optimization
for t=1:iters
% if strcmp(FusMeth,'BCG') || strcmp(FusMeth,'Sparse')
% cost_fun(t)=tau_daux/2*trace((VX_dec-VXd_dec)*(VX_dec-VXd_dec)
% '*invCov_U); %% Note trace(x^T \Sigma x)= trace(x x^T \Sigma)
% elseif strcmp(FusMeth,'GMM')
% cost_fun(t)=0;
% for i=1:nb_sub
% if strcmp(pat_mode,'sliding')
% temp=padarray(MX_dec(:,:,i),[patsize-1 patsize-1],'circular','post');
% elseif strcmp(pat_mode,'distinct')
% % temp=MX_dec(:,:,i);
% if shift==1
% temp=circshift(MX_dec(:,:,i),shift_size);
% end
% end
% temp=im2col(temp,[patsize patsize],pat_mode)-obj.mu(:,label(i,:),i);
% temp_cost=mtimesx(obj.Cov(:,:,label(i,:),i),reshape(temp,[patsize^2 1 N_pat]));
% cost_fun(t)=cost_fun(t)+sum(sum(temp.*reshape(temp_cost,[patsize^2 N_pat]).*repmat(obj.alpha(label(i,:),i)',[patsize^2 1])))/2;
% end
% end
% cost_fun(t)=cost_fun(t)+1/2*norm(sqrt(R1)*(VXH-mask.*ConvCBD(P_inc*VX_dec,FZ)),'fro')^2+...
% 1/2*norm(sqrt(R2)*(VXM-psfZ_s*VX_dec),'fro')^2;
VX_dec_old=VX_dec;
% if t>1; diff_X_old=diff_X;end
if strcmp(ADMM,'on')
% SALSA (ADMM) algorithm
for i=1:admm_iters
%% Update U: min_U ||UB-V1-G1||_F^2 +||U-V2-G2||_F^2 +||U-V3-G3||_F^2
if strcmp(FusMeth,'BCG') || strcmp(FusMeth,'Sparse')
VX_dec = ConvCBD(ConvCBD(V1+G1,FZC_s) + (V2+G2) + (V3+G3),II_FB_s);
elseif strcmp(FusMeth,'GMM')
% temp=(V3+G3);
% if strcmp(pat_mode,'distinct')
% for k=1:nb_sub
% temp3(:,:,k)=col2im(reshape(temp(:,:,:,k),[patsize^2 N_pat 1]),[patsize patsize],[nr nc],'distinct');
% end
% temp3=circshift(temp3,shift_size*(-1));
% elseif strcmp(pat_mode,'sliding')
% for k=1:nb_sub
% % [temp3(:,:,k),D_est]=depatch(reshape(temp(:,:,:,k),[patsize^2 N_pat 1]),patsize,X_real(:,:,1));
% %
没有合适的资源?快使用搜索试试~ 我知道了~
图像融合基于matlab稀疏表示多光谱图像融合【含Matlab源码 1301期】.zip
共64个文件
m:45个
jpg:12个
mat:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 6 下载量 76 浏览量
2021-11-05
22:05:33
上传
评论 1
收藏 81.55MB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 图像融合:小波变换图像融合、遗传算法图像融合、IHS图像融合、PCA图像融合、curvelet变换图像融合、拉普拉斯金字塔+NSCT图像融合 DSIFT多聚焦图像融合、加权平均法图像融合、泊松彩色图像融合、主成分结合小波离散变换PCA-DWT图像融合
资源推荐
资源详情
资源评论
收起资源包目录
【图像融合】基于matlab稀疏表示多光谱图像融合【含Matlab源码 1301期】.zip (64个子文件)
【图像融合】基于matlab稀疏表示多光谱图像融合【含Matlab源码 1301期】
[2021 9 6 17 13 28.059]Sparse.mat 47.9MB
setup.m 312B
Dic5.mat 339KB
运行结果6.jpg 8KB
运行结果4.jpg 6KB
运行结果04.jpg 42KB
运行结果3.jpg 7KB
func_Dic
robust_tau.m 5KB
mergePatch.m 1KB
compCode.m 2KB
DicLearningM.m 4KB
LDT.m 833B
LD.m 2KB
Dic_Para.m 9KB
ConjGradient2D.m 8KB
OMP_C.m 2KB
Train_Dictionary.m 14KB
Dic_ADMM.asv 15KB
Dic_Learn.m 4KB
ODicL.m 2KB
restoreFromSupp.m 2KB
Unused Method to Sparse Coding.m 3KB
global_func
Para_Prior_Initial.m 3KB
Para_Set.m 4KB
PostProcess.m 3KB
metrics.m 1KB
ima_interp_spline.m 773B
gen_degr_mat.m 638B
HS_MS.m 4KB
HS_MS.asv 4KB
estimate_noise.m 881B
func_blurringZ.m 501B
fac.m 507B
depatch.m 892B
var_dim.m 124B
func_blurringY.m 2KB
real_image.m 3KB
angBvec.m 252B
RoughEst.m 698B
covariance_matrix.m 779B
AlterOpti.m 16KB
func_define.m 2KB
include
sunsal.m 12KB
soft.m 207B
envihdrread.m 4KB
prune_library.m 677B
envidataread.m 3KB
vector_soft_col_iso.m 230B
sunsal_simple.m 7KB
vector_soft_col.m 171B
dirichlet.m 1KB
displayDic.m 2KB
运行结果1.jpg 39KB
运行结果01.jpg 55KB
运行结果05.jpg 42KB
运行结果5.jpg 8KB
original_rosis.tif 41.23MB
运行结果03.jpg 42KB
运行结果02.jpg 41KB
demoSpaFusion.m 2KB
运行结果7.JPG 32KB
运行结果2.jpg 22KB
supporte5.mat 611KB
R.mat 3KB
共 64 条
- 1
海神之光
- 粉丝: 3w+
- 资源: 2093
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240513_111001.jpg
- 耕地进出平衡总体方案编制 编制耕地进出平衡总体方案,适用于耕地保护督察、耕地卫片执法、耕地流出整改等耕地保护工作方面及技术服务单
- 课程设计报告-图书信息管理系统.zip
- 05-10 周五 推理是什么
- Python用xlrd读取excel文档,数字总是默认成浮点数的问题
- Software-Defined-Radio-using-MATLAB-Simulink-and-the-RTL-SDR 2nd
- 大气红外探测仪AIRS-V5-Tropospheric-CO2-Products.pdf
- 《STM32单片机+BH1750光照强度+DS18B20测温传感器+Water水位传感器模拟湿度+OLED屏幕》源代码
- ECharts 数据可视化 -单仪表盘
- 135131858118956ssm某企业危化品信息管理系统bf339.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页