限制对比度自适应直方图均衡化的主要计算过程需要先了解一下
https://blog.csdn.net/u013066730/article/details/83000004
这个链接说的很清楚。看了几遍不是很明白具体是怎么操作的,我的理解是:将原来的图像划分为不重叠的几个区域(一般是8*8)然后在每个区域内,限制对比度(如何限制?不明白),并且把一部分特别
这是原来博文的截图,这个图我不太明白,虽然看他的描述是这么一回事,但是还是有很多疑问,这个图它的纵轴和横轴意义和灰度直方图是一致的吗,如果是,那么阈值a就是一个数量单位了,而集合B中的每一个元素不应该是不同的灰度值吗,那如何将B中的元素赋值为a呢。而且图纸蓝紫色部分,也就是文字描述中“b高于a的部分进行求和”的这个和又该如何求得呢。
说到这里显然是我的理解有偏差了。(恳请大佬纠正)
这里还有另外一篇写的比较简单的博客有提到图中的曲线和阈值的含义,可是还是不清不楚
https://blog.csdn.net/epubit17/article/details/80845677
但是在python中使用这种算法倒是不需要很多技巧。
import cv2 as cv
import numpy as np
test=cv.imread("test.bmp",-1)
#拆分每个通道
B,G,R = cv.split(test)
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
clahe_B = clahe.apply(B)
clahe_G = clahe.apply(G)
clahe_R = clahe.apply(R)
clahe_test = cv.merge((clahe_B,clahe_G,clahe_R))
cv.imshow('clahe_test',clahe_test)
cv.imshow("test",test)
cv.waitKey(0)
cv.destroyAllWindows()
结果,
其中第三张图片是左做全局直方图均衡化的结果,可以明显看到,使用CLAHE方法限制住了对比度(不像图三那么晃眼,同时比图一增强了细节)
有一个说法是CLAHE特别适用于医学红外图像的处理。
最后我觉得就用CLAHE方法和代码中的参数对图片进行处理比较合适和方便。
函数详细情况:
默认的对比度阈值是40,网格是将原图划分为8*8。对比度阈值还是需要自己根据实际情况调整,如果我这里用默认值得到的图片非常恐怖:
apply就像代码那段那样用就好了
有关的疑问还是需要解答,回去看看课本上有没有详细的解释。