在這一篇里面介紹一下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
+關注
關注
1626文章
21666瀏覽量
601830 -
圖像處理
+關注
關注
27文章
1281瀏覽量
56638 -
python
+關注
關注
56文章
4782瀏覽量
84453
原文標題:FPGA圖像處理--CLAHE算法(三)
文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論