在這一篇里面介紹一下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
+關注
關注
1660文章
22412瀏覽量
636359 -
圖像處理
+關注
關注
29文章
1342瀏覽量
59542 -
python
+關注
關注
57文章
4876瀏覽量
90039
原文標題:FPGA圖像處理--CLAHE算法(三)
文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
FPGA的圖像處理技術,你知道多少?
FPGA的圖像處理技術,你知道多少?
FPGA的圖像處理技術,你知道多少?
怎么設計圖像自適應分段線性拉伸算法的FPGA?
【干貨】基于FPGA的圖像處理(圖像增強)之直方圖均衡
視覺對比度分辨率補償的底層圖像挖掘
基于對比度閾值的改進SIFT算法
TI推出全新圖像處理算法套件,旨在提升圖像亮度和對比度
如何使用非下采樣Shearlet變換與模糊對比度提高圖像質量
關于指數對比度增強FPGA實現
投影機中對比度與動態對比度的區別及運用
FPGA圖像處理-CLAHE算法的第二步對比度限制(三)
評論