Loading

OpenCV:图像增亮与直方图均衡

锐化

Snipaste_2021-01-12_23-20-13

左:去噪后锐化 中:原图 右:直接锐化

不管是直接锐化,还是去噪后进行锐化,都会使得图像的噪声更加地严重,所以,去噪和锐化就先不做了,直接进行图像增亮和非线性拉伸

增亮

Snipaste_2021-01-16_19-32-41

增亮使用加分进行增亮,防止乘法造成了像素值溢出。

  1. 利用opencv进行加法增亮时,有两种操作:

    • 直接进行加法,该方法若超过255的像素会被取模,导致处理后像素值可能变低

    • 使用cv2.add进行加法,该方法若超过255,则任然等于255。所以我们的处理使用的是这个方法

  2. 亮度值的选择

    分别尝试了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调节

Snipaste_2021-01-16_19-46-37

  1. 当阈值设为太小时,如1,导致对比度不够
  2. 当阈值设置太大时,如3和4,导致对比度太大
  3. 所以,选取了clipLimit=2.0作为第一个参数值

tileGridSize调节

Snipaste_2021-01-16_19-53-27

  1. 当该值设置太小时,对比度若一些,且取值4和8时候差别不大
  2. 当该值设置适当时,可以明显看到局部的对比度不同,通过比较,我认为取32较为合适

最终效果图

Snipaste_2021-01-16_19-56-46

弹性纤维处理效果 左图:处理好 右图:处理前

Snipaste_2021-01-16_19-58-27

胶原纤维处理效果 左图:处理好 右图:处理前

代码

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
posted @ 2021-01-16 20:44  ZHGQCN  阅读(1326)  评论(0编辑  收藏  举报