本文为转载,原博客地址: http://blog.csdn.net/majinlei121/article/details/50420980
上一篇博客给出了论文" Gu B, Li W, Zhu M, et al. Local edge-preserving multiscale decomposition for high dynamic range image tone mapping[J]. Image Processing, IEEE Transactions on, 2013, 22(1): 70-79. "的局部边缘保持滤波程序,本文给出的是高动态范围图像压缩的程序,即HDR转换为LDR,其中程序中用到的hdr格式的高动态范围图像下载地址为http://download.csdn.net/detail/majinlei121/9380904
下面为高动态范围压缩程序:
clear all; HDR = hdrread('..\HDR Images\AhwahneeGreatLounge_small.hdr' ); % HDR = hdrread('..\HDR Images\AtriumMorning.hdr' ); % HDR = hdrread('..\HDR Images\belgium.hdr' ); % HDR = hdrread('..\HDR Images\cadik-desk02_mid.hdr' ); % HDR = hdrread('..\HDR Images\designCenter.hdr' ); % HDR = hdrread('..\HDR Images\desk.hdr' ); % HDR = hdrread('..\HDR Images\doll.hdr' ); % HDR = hdrread('..\HDR Images\groveD.hdr' ); % HDR = hdrread('..\HDR Images\HancockKitchenInside_small.hdr' ); % HDR = hdrread('..\HDR Images\memorial.hdr' ); % HDR = hdrread('..\HDR Images\orion_correct_small.hdr' ); % HDR = hdrread('..\HDR Images\paul_bunyan_small.hdr' ); % HDR = hdrread('..\HDR Images\pillarsB_small.hdr' ); % HDR = hdrread('..\HDR Images\snowman.hdr' ); % HDR = hdrread('..\HDR Images\tinterna_small.hdr' ); % HDR = hdrread('..\HDR Images\vinesunset.hdr' ); % HDR = hdrread('..\HDR Images\yosemite_small.hdr' ); L_in=(1/3)*(HDR(:,:,1)+HDR(:,:,2)+HDR(:,:,3)); L=log(L_in*1e6+1); L=L/max(max(L)); % L=mat2gray(L); alpha=0.1; beta=1; r=2; nLevel = 3; B = cell(1, nLevel); D = cell(1, nLevel); D_compression=cell(1, nLevel); B{nLevel}=L; for j = nLevel:-1:2 B{j-1}=LocalWls_HDR(B{j}, alpha, beta, r); D{j}=B{j}-B{j-1}; r=20; end B0=mean(mean(B{1}))*ones(size(L)); D{1}=B{1}-B0; for j = nLevel:-1:1 D_compression{j}=(2/pi)*atan(20*D{j}); D_compression{j}=mat2gray(D_compression{j}); end L_out=D_compression{1}*0.5+D_compression{2}+D_compression{3}; % Rmax_clip = prctile(L_out(:),99); % Rmin_clip = prctile(L_out(:),1); % DR_clip = Rmax_clip/Rmin_clip; % exponent = log(100)/log(DR_clip); % L_out = max(0,L_out/Rmax_clip) .^ exponent; Rmax_clip = prctile(L_out(:),99.5); Rmin_clip = prctile(L_out(:),0.5); L_out(L_out>Rmax_clip)=Rmax_clip; L_out(L_out<Rmin_clip)=Rmin_clip; L_out=mat2gray(L_out); %L_out=L_out/max(max(L_out)); out(:,:,1)=((HDR(:,:,1)./L_in).^0.6).*L_out; out(:,:,2)=((HDR(:,:,2)./L_in).^0.6).*L_out; out(:,:,3)=((HDR(:,:,3)./L_in).^0.6).*L_out; figure;imshow(out,[]); % imwrite(out,'result\AhwahneeGreatLounge_small.png' );
最后实现的LDR图像有一些还是有光晕的,不知是程序的问题,还是论文本身的问题。