基于L0的图像融合
本文程序是根據(jù)"Zhao J, Feng H, Xu Z, et al. Detail enhanced multi-source fusion using visual weight map extraction based on multi scale edge preserving decomposition[J]. Optics Communications, 2013, 287: 45-52."編寫(xiě)的,最大的問(wèn)題是運(yùn)行時(shí)間太長(zhǎng)了,有五六分鐘,還有就是最后的融合效果并不是很理想。
具體matlab程序?yàn)?#xff1a;?
clear all; %path_A = '..\IR and Vis\Camp_Vis.jpg'; path_B = '..\IR and Vis\Camp_IR.jpg'; %path_A = '..\IR and Vis\Dune_Vis.jpg'; path_B = '..\IR and Vis\Dune_IR.jpg'; path_A = '..\Medical Images\source1_1.tif'; path_B = '..\Medical Images\source1_2.tif'; img1 = double(imread(path_A))/255.0; img2 = double(imread(path_B))/255.0; if(size(img1,3)~=1) img1=rgb2gray(img1); end if(size(img2,3)~=1) img2=rgb2gray(img2); end%% ---------- L0 Decomposition -------------- nLevel = 3; lambda=[0.0005 0.003 0.018];f1 = cell(1, nLevel+1); d1 = cell(1, nLevel+1); f1{1}=img1; for L = 2:nLevel+1,f1{L} = L0Smoothing(f1{L-1},lambda(L-1));d1{L} = f1{L-1} - f1{L}; end % figure;imshow([mat2gray(f1{2}),mat2gray(f1{3}),mat2gray(f1{4});... % mat2gray(d1{2}),mat2gray(d1{3}),mat2gray(d1{4})]);f2 = cell(1, nLevel+1); d2 = cell(1,nLevel+1); f2{1}=img2; for L = 2:nLevel+1,f2{L} = L0Smoothing(f2{L-1},lambda(L-1));d2{L} = f2{L-1} - f2{L}; end % figure;imshow([mat2gray(f2{2}),mat2gray(f2{3}),mat2gray(f2{4});... % mat2gray(d2{2}),mat2gray(d2{3}),mat2gray(d2{4})]);%% ---------- Visual Weight Map(VWM) -------------- V_d1 = cell(1,nLevel+1); V_d2 = cell(1,nLevel+1); V_f1=zeros(size(img1)); V_f2=zeros(size(img2)); %VWM of img1 detail layer for L = 2:nLevel+1,V_d1{L}=zeros(size(img1));img1_detail=uint8(mat2gray(d1{L})*255);for j=0:255,for i=0:255,V_d1{L}(img1_detail==j)=V_d1{L}(img1_detail==j)+length(find(img1_detail==i))*abs(j-i); end endV_d1{L}=mat2gray(V_d1{L}); end %VWM of img2 detail layer for L = 2:nLevel+1,V_d2{L}=zeros(size(img2));img2_detail=uint8(mat2gray(d2{L})*255);for j=0:255,for i=0:255,V_d2{L}(img2_detail==j)=V_d2{L}(img2_detail==j)+length(find(img2_detail==i))*abs(j-i); end endV_d2{L}=mat2gray(V_d2{L}); end %VWM of img1 base layer img1_base=uint8(255*f1{nLevel+1}); for j=0:255,for i=0:255,V_f1(img1_base==j)=V_f1(img1_base==j)+length(find(img1_base==i))*abs(j-i); end end V_f1=mat2gray(V_f1);%VWM of img2 base layer img2_base=uint8(255*f2{nLevel+1}); for j=0:255,for i=0:255,V_f2(img2_base==j)=V_f2(img2_base==j)+length(find(img2_base==i))*abs(j-i); end end V_f2=mat2gray(V_f2); % figure;imshow(V_f2);%% ---------- Multi-scale Combination -------------- % base layer combination F_base=0.5*((f1{nLevel+1}.*V_f1+f2{nLevel+1}.*(1-V_f1))+(f1{nLevel+1}.*V_f2+f2{nLevel+1}.*(1-V_f2))); % detail layer combination F=cell(1,nLevel+1); for L = 2:nLevel+1,F{L}=0.5*((d1{L}.*V_d1{L}+d2{L}.*(1-V_d1{L}))+(d1{L}.*V_d2{L}+d2{L}.*(1-V_d2{L}))); end%% ---------- Fusion Result -------------- beta=[0.8 0.6 0.6 0.5]; F_out=zeros(size(img1)); for L = 2:nLevel+1,F_out=F_out+beta(L-1)*F{L};if L==nLevel+1,F_out=F_out+beta(L)*F_base;end end figure;imshow([img1,img2]); figure;imshow(F_out,[]);其中用到的L0Smoothing()函數(shù)如下:
% Distribution code Version 1.0 -- 09/23/2011 by Jiaya Jia Copyright 2011, The Chinese University of Hong Kong. % % The Code is created based on the method described in the following paper % [1] "Image Smoothing via L0 Gradient Minimization", Li Xu, Cewu Lu, Yi Xu, Jiaya Jia, ACM Transactions on Graphics, % (SIGGRAPH Asia 2011), 2011. % % The code and the algorithm are for non-comercial use only.function S = L0Smoothing(Im, lambda, kappa) % L0Smooth - Image Smoothing via L0 Gradient Minimization % S = L0Smooth(Im, lambda, kappa) performs L0 graidient smoothing of input % image Im, with smoothness weight lambda and rate kappa. % % Paras: % @Im : Input UINT8 image, both grayscale and color images are acceptable. % @lambda: Smoothing parameter controlling the degree of smooth. (See [1]) % Typically it is within the range [1e-3, 1e-1], 2e-2 by default. % @kappa : Parameter that controls the rate. (See [1]) % Small kappa results in more iteratioins and with sharper edges. % We select kappa in (1, 2]. % kappa = 2 is suggested for natural images. % % Example % ========== % Im = imread('pflower.jpg'); % S = L0Smooth(Im); % Default Parameters (lambda = 2e-2, kappa = 2) % figure, imshow(Im), figure, imshow(S);if ~exist('kappa','var')kappa = 2.0; end if ~exist('lambda','var')lambda = 2e-2; end S = im2double(Im); betamax = 1e5; fx = [1, -1]; fy = [1; -1]; [N,M,D] = size(Im); sizeI2D = [N,M]; otfFx = psf2otf(fx,sizeI2D); otfFy = psf2otf(fy,sizeI2D); Normin1 = fft2(S); Denormin2 = abs(otfFx).^2 + abs(otfFy ).^2; if D>1Denormin2 = repmat(Denormin2,[1,1,D]); end beta = 2*lambda; while beta < betamaxDenormin = 1 + beta*Denormin2;% h-v subproblemh = [diff(S,1,2), S(:,1,:) - S(:,end,:)];v = [diff(S,1,1); S(1,:,:) - S(end,:,:)];if D==1t = (h.^2+v.^2)<lambda/beta;elset = sum((h.^2+v.^2),3)<lambda/beta;t = repmat(t,[1,1,D]);endh(t)=0; v(t)=0;% S subproblemNormin2 = [h(:,end,:) - h(:, 1,:), -diff(h,1,2)];Normin2 = Normin2 + [v(end,:,:) - v(1, :,:); -diff(v,1,1)];FS = (Normin1 + beta*fft2(Normin2))./Denormin;S = real(ifft2(FS));beta = beta*kappa;%fprintf('.'); end %fprintf('\n'); end?
下面是效果圖:
?
?
總結(jié)
- 上一篇: UML 类图关系
- 下一篇: 读书笔记—《销售铁军》随记3