日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDR高动态压缩【MATLAB代码】

發布時間:2025/3/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDR高动态压缩【MATLAB代码】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文給出的是高動態范圍圖像壓縮的程序,即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:2B{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:1D_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'); function out = LocalWls_HDR(I, alpha, beta, r)if ~exist('alpha','var')alpha = 0.1; end if ~exist('beta','var')beta = 1; end if ~exist('r','var')r = 4; end[hei, wid] = size(I); N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.mean_I = boxfilter(I, r) ./ N; mean_II = boxfilter(I.*I, r) ./ N;var_I = mean_II - mean_I .* mean_I;I_x = diff(I,1,2); I_x = padarray(I_x, [0 1 0], 'post');%進行列方向差分,求dx I_y = diff(I,1,1); I_y = padarray(I_y, [1 0 0], 'post');%進行行方向差分,求dy I_gradient=abs(I_x+I_y); I_gradient=I_gradient.^(2-beta); I_gradient=alpha*boxfilter(I_gradient,r)./N;a = var_I ./ (var_I + I_gradient+0.00000001); b = mean_I - a .* mean_I; mean_a = boxfilter(a, r) ./ N; mean_b = boxfilter(b, r) ./ N;out = mean_a .* I + mean_b; end function imDst = boxfilter(imSrc, r)% BOXFILTER O(1) time box filtering using cumulative sum % % - Definition imDst(x, y)=sum(sum(imSrc(x-r:x+r,y-r:y+r))); % - Running time independent of r; % - Equivalent to the function: colfilt(imSrc, [2*r+1, 2*r+1], 'sliding', @sum); % - But much faster.[hei, wid] = size(imSrc); imDst = zeros(size(imSrc));%cumulative sum over Y axis imCum = cumsum(imSrc, 1); %difference over Y axis imDst(1:r+1, :) = imCum(1+r:2*r+1, :); imDst(r+2:hei-r, :) = imCum(2*r+2:hei, :) - imCum(1:hei-2*r-1, :); imDst(hei-r+1:hei, :) = repmat(imCum(hei, :), [r, 1]) - imCum(hei-2*r:hei-r-1, :);%cumulative sum over X axis imCum = cumsum(imDst, 2); %difference over X axis imDst(:, 1:r+1) = imCum(:, 1+r:2*r+1); imDst(:, r+2:wid-r) = imCum(:, 2*r+2:wid) - imCum(:, 1:wid-2*r-1); imDst(:, wid-r+1:wid) = repmat(imCum(:, wid), [1, r]) - imCum(:, wid-2*r:wid-r-1); end

最后實現的LDR圖像有一些還是有光暈的,不知是程序的問題,還是論文本身的問題。

?


?

?

?

?

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高动态压缩【MATLAB代码】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。