编辑:AI算法与图像处理


《Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images》该文章结合传统的Retinex技术提出了全局自适应和局部自适应的HDR实现过程,对HDR image 进行色调映射。而文中的全局自适应方法对于低照度图像具有很好的照度提升效果。

全局自适应原理:

传统图像处理——图像增强ALTM(亮度增强)_一维数组

传统图像处理——图像增强ALTM(亮度增强)_自适应_02

Python代码



import numpy as np

def simple_balance(img, s1, s2): # 线性增强,s1和s2为低高分段阈值百分比
h, w = img.shape[:2]
res = img.copy()
one_dim_array = res.flatten() # 转化为一维数组
sort_array = sorted(one_dim_array) # 对一维数组按升序排序
print(len(sort_array))

per1 = int((h * w) * s1 / 100)
print(per1/len(sort_array))
minvalue = sort_array[per1]

per2 = int((h * w) * s2 / 100)
print(((h * w) - 1 - per2)/len(sort_array))
maxvalue = sort_array[(h * w) - 1 - per2]

# 实施简单白平衡算法
if (maxvalue <= minvalue):
for i in range(h):
for j in range(w):
res[i, j] = maxvalue
else:
scale = 255.0 / (maxvalue - minvalue)
for m in range(h):
for n in range(w):
if img[m, n] < minvalue:
res[m, n] = 0
elif img[m, n] > maxvalue:
res[m, n] = 255
else:
res[m, n] = scale * (img[m, n] - minvalue) # 映射中间段的图像像素

return res

def ALTM(img):
h, w = img.shape[:2]
res = np.float32(img) # res = np.array(img, dtype=np.float32) # 转换为32位图像
Lwmax = res.max()
log_Lw = np.log(0.001 + res)
Lw_sum = log_Lw.sum()
Lwaver = np.exp(Lw_sum / (h * w))
Lg = np.log(res / Lwaver + 1) / np.log(Lwmax / Lwaver + 1)

res = Lg * 255.0 # 不使用分段线性增强
# res = simple_balance(Lg, 2, 3) # 使用线性增强,该算法比较耗时
dst = np.uint8(res) # dst = cv2.convertScaleAbs(res)
return dstleAbs(res) return

效果展示


效果1

传统图像处理——图像增强ALTM(亮度增强)_图像处理_03

原图

传统图像处理——图像增强ALTM(亮度增强)_图像处理_04

ALTM增强

传统图像处理——图像增强ALTM(亮度增强)_图像处理_05

ALTM 使用线性增强

效果2

传统图像处理——图像增强ALTM(亮度增强)_一维数组_06

原图

传统图像处理——图像增强ALTM(亮度增强)_自适应_07

ALTM增强

传统图像处理——图像增强ALTM(亮度增强)_一维数组_08

A LTM 使用线性增强

效果3

传统图像处理——图像增强ALTM(亮度增强)_图像处理_09

原图

传统图像处理——图像增强ALTM(亮度增强)_一维数组_10

ALTM增强

传统图像处理——图像增强ALTM(亮度增强)_自适应_11

ALTM 使用线性增强

​​

如果文章对你有帮助,记得+点赞+分享”!