传统图像处理——图像增强ALTM(亮度增强)
En点击下方“AI算法与图像处理”,一起进步!
重磅干货,第一时间送达
《Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images》该文章结合传统的Retinex技术提出了全局自适应和局部自适应的HDR实现过程,对HDR image 进行色调映射。而文中的全局自适应方法对于低照度图像具有很好的照度提升效果。
全局自适应原理:
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 dst
效果展示
原图
ALTM增强
ALTM 使用线性增强
效果2
原图
ALTM增强
效果3
原图
ALTM增强
ALTM 使用线性增强
推荐阅读
CVPR2021 最具创造力的那些工作成果!或许这就是计算机视觉的魅力!
英伟达又一个GAN!PoE-GAN,AI绘图细节拉满,看完直接沸腾了!
如果文章对你有帮助,记得“在看+点赞+分享”!
评论