本文给出的是高动态范围图像压缩的程序,即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代码】相关推荐

  1. 便携式液晶驱动板卡方案可支持1080P能驱动 HBR 4LANE EDP 接口的液晶面板有一个 miniHDMI 接口,两个 Type-C 信号接口。支持 HDR 高动态。

    AP2KS REV1.1 是一款多功能便携式液晶显示器驱动板卡,可支持最高分辨率 2560*1600@60Hz, 能驱动 HBR 4LANE EDP 接口的液晶面板. 拥有一个 miniHDMI 接口 ...

  2. 三阶魔方自动求解及动态可视化matlab代码

    三阶魔方自动求解及动态可视化matlab代码 思路与步骤 总结 思考 参考链接 源代码 第一次写博客,想总结分享下以前做过的一些有趣的东西,目的是为了回望过去与展望未来,同时为了提高自己的写作表达能力 ...

  3. OpenGL HDR高动态光照渲染的实例

    OpenGLHDR高动态光照渲染 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include < ...

  4. c# 无损高质量压缩图片代码

    /// 无损压缩图片 /// <param name="sFile">原图片</param> /// <param name="dFile& ...

  5. 5G 超高清关键技术:高帧率重置、高动态渲染、云加端增强

    帧享是什么? 帧享是一个超高清的解决方案,从 2B 到 2C 的视角,帧享具备 4 个技术能力: 一是高帧率增强,可提供最高 120 帧的超高帧率视频,顺滑地呈现物体运动场景: 二是超高分辨率,对于画 ...

  6. SAR成像系列:【8】合成孔径雷达(SAR)成像算法-压缩感知(Compressed Sensing,CS)成像算法(附Matlab代码)

    压缩感知(Compressed Sensing,CS)该理论指出:对于满足约束等距条件(Restricted Isometry Property,RIP)的稀疏或可压缩信号,通过低于(甚至远低于)Ny ...

  7. 基于动态时间规整算法(DTW)的语音识别技术研究-含Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ⏩ 一.引言 ⏩ 二.动态时间规整算法基本原理 ⏩ 三.语音识别实例分析 ⏩ 四.参考文献 ⏩ 五.Matlab代码获取 ⏩ 一.引言 在语音识别技术的发展过程中,动态时间规整算法 ...

  8. 风电随机性动态经济调度模型(Matlab代码实现)

    目录 0 写在前面 1 引言 1.1 机会约束规划 1.2 基于场景的方法 1.3 模糊模型 2 六种处理风电随机性动态经济调度模型描述 2.1 考虑正负旋转储备约束的确定性模型 2.2 机会约束的随 ...

  9. 用SVD压缩彩色图片(MATLAB代码)

    Write a MATLAB program to perform color image compression using singular value decomposition (SVD). ...

最新文章

  1. maven 引入本地 jar
  2. 灾备理论-可靠的异地灾备
  3. 前端技术分享:锥形渐变conic-gradient你了解多少?
  4. flask处理cookie
  5. NET Core的代码安全分析工具 - Security Code Scan
  6. 发布Akka Toolkit 2.3
  7. gRPC-go 入门(1):Hello World
  8. hdu Train Problem I 栈的基本应用
  9. igm焊接机器人基本操作_焊接机器人编程与操作
  10. DirectX 修复
  11. 方舟生存进化服务器怎么开?方舟生存进化架设服务器教程
  12. Exploring Simple Siamese Representation Learning阅读笔记
  13. oracle收集直方图,Oracle的直方图
  14. ES集群报错:master_not_discovered_exception 503
  15. 试题 算法训练 调和数列问题---蓝桥杯
  16. KK集团旗下公司又遭处罚:招股书已“失效”一个月,快客电商曾被罚30万元
  17. u盘最大单个文件支持多少g_USB 文件传输单个文件最大能用多少G???
  18. 俄勒冈健康与科学大学计算机,GE 医疗合作俄勒冈健康与科学大学,赋能虚拟ICU...
  19. 王健林:万达体育和传奇影业都要开展资本运作 今年要出成绩
  20. TextView 字体中间加 横划线

热门文章

  1. 数据结构之查找算法:分块查找
  2. Linux系统编程20:基础IO之从内核代码深刻理解Linux是如何管理文件及文件描述符的本质是什么
  3. ZooKeeper系列(二)
  4. HookProc 和 CallNextHookEx
  5. 如何计算出int的数据范围
  6. Python pip install 包后,pycharm仍然提示No module named(提示 No module named ‘pip‘)
  7. C/C++:Winsock网络编程—ping命令的简单实现
  8. idea javamaven项目 连接sqlserver 数据库方法
  9. 28 数组中出现次数超过一半的数字
  10. (转)十分钟搞定你自己的多图片/文件服务器