銳化
不管是直接銳化,還是去噪后進行銳化,都會使得圖像的噪聲更加地嚴重,所以,去噪和銳化就先不做了,直接進行圖像增亮和非線性拉伸
增亮
增亮使用加分進行增亮,防止乘法造成了像素值溢出。
-
利用
opencv
進行加法增亮時,有兩種操作:-
直接進行加法,該方法若超過255的像素會被取模,導致處理后像素值可能變低
-
使用
cv2.add
進行加法,該方法若超過255,則任然等於255。所以我們的處理使用的是這個方法
-
-
亮度值的選擇
分別嘗試了30、40、50、60、80、100的增亮,可以發現,當亮度增量值為30時候,可以比原圖看到更多的細節,且對比其他圖,不會有明顯的全局泛亮的效果,更有助於直方圖均衡。
自適應直方圖均衡
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(16, 16))
img_his = clahe.apply(img_add)
主要有兩個超參數,一個是clipLImit
決定均衡的閾值,一個是tileGridSize
決定均衡的圖像patch大小
clipLimit
調節
- 當閾值設為太小時,如1,導致對比度不夠
- 當閾值設置太大時,如3和4,導致對比度太大
- 所以,選取了
clipLimit=2.0
作為第一個參數值
tileGridSize
調節
- 當該值設置太小時,對比度若一些,且取值4和8時候差別不大
- 當該值設置適當時,可以明顯看到局部的對比度不同,通過比較,我認為取32較為合適
最終效果圖
代碼
def img_enhanced(img, add=30, cliplimit=2.0, tilegridsize=32):
img_add = cv2.add(img, add)
clahe = cv2.createCLAHE(clipLimit=cliplimit, tileGridSize=(tilegridsize, tilegridsize))
img_enhanced = clahe.apply(img_add)
return img_enhanced