关于图像对比度【1】
对比度和线性变换
关于什么是对比度这事,不好用一个很明确很严谨的词来概括清楚。对比度高,画面看上去就很硬朗,对比度低,画面看上去就朦朦胧胧,比如下面这张图:
对比度和颜色没有关系,换句话说如果使用YUV颜色空间的话,那对比度只与Y通道值(亮度)有关。所以在这里,就先不提颜色了。
针对8位灰度图来说,对比度高,就是白的很白(值接近0),黑的很黑(接近255)。
于是乎,要提高对比度,只要把黑的变黑,白的变白就可以了。最简单的方法,把图上的每个像素的值都作一个线性变换。
如果原图上像素值最大的点值为max(可能离255还很远),像素值最小的点的值为min(可能离0值也很远),线性变换就是要把值域(min,max)拉伸到(0,255)。所以很简单了:y=k(x-min),其中k权且叫做拉伸系数吧,k=255/(max-min)。
把上面这张图,按照上文说的,做一下线性变换,于是得到了如下结果。
ok,对比度确实提高了。
另外说一点儿,上文说道的max和min并不真的就是整张图上的最大值和最小值,实际上如果真的使用绝对的最大值和最小值的话,往往效果很差(值最大的那个点和值最小的那个点很有可能是坏点,或者是由噪声的影响)。一个方法是max取最大的5%的像素的值,min取最小的5%的像素的值(也未必一定是5%)。
对上面这两张图做一下直方图统计,线性变换前的直方图如下:
线性变换后呢,直方图如下:
所以从直方图上看,线性变换不过就是把直方图移动了个位置,做了个拉伸而已。