(9条消息) 局部边(9条消息) 局部边缘保持滤波(LEP)高动态范围图像HDR压缩 matlab程序(一)_

本文程序根据论文"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."的matlab程序改编而成,关于局部边缘保持滤波(LEP)高动态范围图像HDR压缩可以参考如下博文

https://blog.csdn.net/majinlei121/article/details/50420927/

https://blog.csdn.net/majinlei121/article/details/50420980/

本人实现的python程序基于python3,代码为:

import numpy as np
import cv2
from math import pi
import os
from tqdm import *
import warnings
warnings.filterwarnings("ignore")
from PIL import Imagedef 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 = imSrc.shapeimDst = np.zeros(imSrc.shape)# cumulative sum over Y axisimCum = np.cumsum(imSrc, axis=0)# difference over Y axisimDst[0:r+1, :] = imCum[r:2*r+1, :]imDst[r+1:hei-r, :] = imCum[2*r+1:hei, :] - imCum[0:hei-2*r-1, :]# m = np.tile(imCum[hei-1, :], (r, 1))# n = imCum[hei-2*r-1:hei-r-1, :]imDst[hei-r:hei, :] = np.tile(imCum[hei-1, :], (r, 1)) - imCum[hei-2*r-1:hei-r-1, :]# cumulative sum over X axisimCum = np.cumsum(imDst, axis=1)# difference over X axisimDst[:, 0:r+1] = imCum[:, r:2*r+1]imDst[:, r+1:wid-r] = imCum[:, 2*r+1:wid] - imCum[:, 0:wid-2*r-1]# m = np.tile(np.expand_dims(imCum[:, wid-1], 1), (1, r))# n = imCum[:, wid-2*r-1:wid-r-1]imDst[:, wid-r:wid] = np.tile(np.expand_dims(imCum[:, wid-1], 1), (1, r)) - imCum[:, wid-2*r-1:wid-r-1]return imDstdef LocalWls_HDR(I, alpha=0.1, beta=1, r=4):hei , wid = I.shapeN = boxfilter(np.ones((hei, wid)), r)# the size of each local patch; N=(2r+1)^2 except for boundary pixels.mean_I = boxfilter(I, r) / Nmean_II = boxfilter(I*I, r) / Nvar_I = mean_II - mean_I * mean_II_x = np.diff(I, n=1, axis=1)I_x = np.pad(I_x,((0,0),(0,1)),'constant',constant_values=(0,0))#进行列方向差分,求dxI_y = np.diff(I, n=1, axis=0)I_y = np.pad(I_y,((0,1),(0,0)),'constant',constant_values=(0,0))#进行行方向差分,求dyI_gradient = abs(I_x+I_y)I_gradient = np.power(I_gradient,2-beta)I_gradient = alpha*boxfilter(I_gradient,r)/Na = var_I / (var_I + I_gradient+0.00000001)b = mean_I - a * mean_Imean_a = boxfilter(a, r) / Nmean_b = boxfilter(b, r) / Nreturn mean_a * I + mean_bdef lepHDR(src,dst,alpha = 0.1,beta = 1,r = 2,nLevel = 3):HDR = cv2.imread(src)m,n,_ = HDR.shapeHDR = cv2.resize(HDR,(int(n/3),int(m/3)),interpolation=cv2.INTER_CUBIC)# HDR = HDR/255.0HDR=cv2.normalize(HDR.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)L_in = (HDR[:,:,0]+HDR[:,:,1]+HDR[:,:,2])/3L = np.log(L_in*1e6+1)L = L/np.max(L)  B = [[],[],[]]D = [[],[],[]]D_compression=D_compression = [[],[],[]]B[nLevel-1] = Lfor j in (2,1):B[j-1] = LocalWls_HDR(B[j], alpha, beta, r)D[j] = B[j]-B[j-1]r = 20B0=np.mean(B[0])*np.ones(L.shape)D[0] = B[0]-B0for j in (2,1,0):D_compression[j] = (2/pi)*np.arctan(20*D[j])D_compression[j] = cv2.normalize(D_compression[j].astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)L_out=D_compression[0]*0.5+D_compression[1]+D_compression[2]Rmax_clip = np.percentile(L_out,99.5)Rmin_clip = np.percentile(L_out,0.5)L_out[L_out>Rmax_clip] = Rmax_clipL_out[L_out<Rmin_clip] = Rmin_clipL_out=cv2.normalize(L_out.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)out = np.zeros(HDR.shape)out[:,:,0] = (np.power((HDR[:,:,0]/L_in),0.6))*L_outout[:,:,1] = (np.power((HDR[:,:,1]/L_in),0.6))*L_outout[:,:,2] = (np.power((HDR[:,:,2]/L_in),0.6))*L_outout = out*255out[out>255] = 255out[out<0] = 0out = np.uint8(out)# out = np.uint8(cv2.normalize(out.astype('float'), None, 0.0, 255.0, cv2.NORM_MINMAX))out = cv2.resize(out,(n,m),interpolation=cv2.INTER_CUBIC)cv2.imwrite(dst,out)if __name__ =="__main__":path = "/run/media/charlie/DATA/1.JPG"save_path = "/run/media/charlie/DATA/temp"for file in tqdm(os.listdir(path)):lepHDR(os.path.join(path,file),os.path.join(save_path,file[:-4]+".png"))# lepHDR("/raid/逆光数据/test.JPG","/raid/逆光数据/tests.png")

局部边缘保持滤波(LEP)高动态范围图像HDR压缩 python实现相关推荐

  1. 局部边缘保持滤波(LEP)高动态范围图像HDR压缩 matlab程序(一)

    本文为转载,原博客地址为:http://blog.csdn.net/majinlei121/article/details/50420927 本文程序根据论文"Gu B, Li W, Zhu ...

  2. opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模糊操作 方法:均值模糊,中值模 ...

  3. 高动态范围图像HDR

    HDR(High Dynamic Range,高动态范围),由于目前无论是相机还是显示器,对图像亮度范围都限定在0~255之间,即256个亮度级别,但在自然界中,刺眼的阳光和微弱的星光,可能有成千上万 ...

  4. 局部边缘保留滤波器LEP算法原理及matlab代码实现

    "Gu B, Li W, Zhu M, et al. Local edge-preserving multiscale decomposition for high dynamic rang ...

  5. 一种基于视神经网络的高动态范围(HDR)图像自适应局部色调映射的实现【OpenCV】【CUDA】

    原理是基于这篇论文--<Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images> 论文提出的背 ...

  6. 图像处理之积分图应用二(快速边缘保留滤波算法)

    图像处理之积分图应用二(快速边缘保留滤波算法) 一:基本原理 传统的图像边缘保留滤波算法-如高斯双边模糊.Mean-Shift模糊等计算复杂.效率比较低,虽然有各种手段优化或者快速计算方法,当时算法相 ...

  7. opencv曝光过度_软件开发|使用 OpenCV 进行高动态范围(HDR)成像

    在本教程中,我们将学习如何使用由不同曝光设置拍摄的多张图像创建高动态范围High Dynamic Range(HDR)图像. 我们将以 C++ 和 Python 两种形式分享代码. 什么是高动态范围成 ...

  8. 导向滤波算法 java_一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法与流程...

    本发明属于计算机图像处理的领域,用于图像或者视频去雾等相关领域:具体涉及一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法. 背景技术: 图像采集过程中,由于雾天的影响,使得景物的能见度大幅降低,再加 ...

  9. android opencv hdr,用 OpenCV 进行高动态范围(HDR)成像

    在本教程中我们将学习如何使用由不同曝光设置拍摄的多张图像创建高动态范围High Dynamic RangeHDR图像. 我们将以 C++ 和 Python 两种形式分享代码. 什么是高动态范围成像 大 ...

最新文章

  1. [高中作文赏析]感受冬天
  2. 转:iPhone之后,思考下一个科技突破
  3. vfp全国计算机二级,全国计算机二级VFP试题
  4. 测绘技术的发展与分类简述
  5. CSS层叠样式表进阶
  6. 安装mysql删除_mysql安装和删除
  7. 模块降额设计_模块电源需要注意的四个点
  8. C#比較对象的相等性
  9. 局域网计算机维护工具,教你用“小浣熊局域网维护小工具”,从此解脱烦恼!...
  10. 在TextView中插入图片
  11. 手机变慢怎么办?复位、重置可解决
  12. flutter视频播放videoplayer与chewie
  13. 413 Arithmetic Slices
  14. 手机银行告别“鸡肋”
  15. H5前端输入和展示 表情 三种解决方案
  16. C语言逻辑类型与运算
  17. 远程报:这可能是由于credssp加密oracle修正
  18. 387. 字符串中的第一个唯一字符(javascript)387. First Unique Character in a String
  19. ARM、X86/Atom、MIPS、PowerPC
  20. 【破解作品】Access密码查看器 破解版 注册码

热门文章

  1. UE5建筑可视化室内场景模型 Evermotion – Archinteriors for UE vol. 8
  2. 绘制遗传图谱工具——MapChart
  3. 将淘宝爬取的数据写入Excel表格
  4. 揭秘可变剪切研究的本质
  5. 二维数组的几种定义方法
  6. 信息化实施, 管理前沿 ERP生产系统
  7. 香港服务器需要如何来维护呢?
  8. java获取显示器屏幕大小
  9. 猫与路由器的电源所需电压
  10. 投影法字符分割matlab,利用投影法进行字符分割