在这一篇里面介绍一下clahe算法的第二步对比度限制。
这个过程很简单,分为下面几个步骤。
计算出来限制的阈值
将统计好的直方图数据限制在0到阈值范围内。也就是将大于阈值的直方图数据减去阈值,并将差值累计起来。
将累计的差值平均分给每个灰度。
来看一下参考的python代码:
def cl_hist(img, clip): h, w = img.shape n = np.zeros(256, np.uint32) for i in range(h): for j in range(w): n[img[i][j]] = n[img[i][j]] + 1 t = 0 for i in range(256): if n[i] > clip: t += n[i] - clip n[i] = clip t = t / 256 n = n + t pk = n sk = np.zeros(256, np.float32) sk[0] = pk[0] for i in range(1, 256): sk[i] = sk[i - 1] + pk[i] sk = sk / (h * w) sk = sk * 255 sk = np.around(sk) return sk
这个和之前的直方图统计就多了中间的步骤,也就是下面这一段代码:
t = 0 for i in range(256): if n[i] > clip: t += n[i] - clip n[i] = clip t = t / 256 n = n + t
就是遍历256个灰度的统计值,将大于阈值的灰度统计值就设置为阈值,并将两者的差值进行累加。最后将总的差值除以256,将最后的结果累加到每一个灰度的统计值上面。
来看一下最后的效果:
可以看到相对于没有进行限制对比度的效果要好很多。
下面这幅图是没有限制对比度阈值的结果:
那么这个阈值要怎么计算呢:
一般来说我们采取这样的方法来计算阈值,也就是通过图像的大小,分块的多少,和clip_limit 的值来计算出来。一般图像大小,和分块多少是不变的,也就是说可以通过clip_limit的值来调整效果。
h, w = img.shapeblock = 8clip_limit = 2clip = clip_limit * (h * w / (block * block) / 256)clip = round(clip)
最后来看一下verilog的实现,可以通过下面的代码来实现对比度限制的功能。
从Mate 30到P50,华为被制裁后的国产替代之路
干货:晶体三极管常见技术参数定义
增强型数字隔离器确保工业环境中的安全
基于Dragonboard 410c服务器系列之web局域网服务器搭建
人工智能技术将会从根本上来改变人类的意识
FPGA图像处理-CLAHE算法的第二步对比度限制(三)
中国电信联合华为启动5GSA商用创新合作
最佳SSD电源选择方案
隔空控制遥控玩具赛车
InnoSwitch3的推出将迎来芯片无散热片时代
华为盘古大模型预期怎么样 华为盘古大模型需要光模块吗
罗姆开发出符合WPC Qi标准Low Power Ver1.1的单芯片无线供电接收控制IC
软件视频会议全面进入高清时代
温湿度传感器在香椿温室种植中有着怎样的作用
充电桩测试仪Type 2测试适配器 METRALINE系列
有刷直流电机PWM驱动方法的H桥恒流驱动
PI公司推出全新LED筒灯参考设计
凡亿 41期线下实体培训,6月1日正式开班
荣耀V40怎么样值得买吗?荣耀v40参数配置详细
比特币是否真的没有内在价值