在这一篇里面介绍一下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.shape block = 8 clip_limit = 2 clip = clip_limit * (h * w / (block * block) / 256) clip = round(clip)
最后来看一下Verilog的实现,可以通过下面的代码来实现对比度限制的功能。

审核编辑:刘清
-
FPGA
+关注
关注
1655文章
22282浏览量
630083 -
图像处理
+关注
关注
28文章
1340浏览量
59163 -
python
+关注
关注
57文章
4856浏览量
89551
原文标题:FPGA图像处理--CLAHE算法(三)
文章出处:【微信号:FPGA开源工坊,微信公众号:FPGA开源工坊】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
关于IMAQdx获取的图像调节亮度对比度
FPGA的图像处理技术,你知道多少?
FPGA的图像处理技术,你知道多少?
FPGA的图像处理技术,你知道多少?
怎么设计图像自适应分段线性拉伸算法的FPGA?
【干货】基于FPGA的图像处理(图像增强)之直方图均衡
视觉对比度分辨率补偿的底层图像挖掘
基于对比度阈值的改进SIFT算法
TI推出全新图像处理算法套件,旨在提升图像亮度和对比度
关于指数对比度增强FPGA实现
投影机中对比度与动态对比度的区别及运用

FPGA图像处理-CLAHE算法的第二步对比度限制(三)
评论