直方图均衡化的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。
设r是变化前的灰度级,s是变化后的灰度级,并且0 <= r, s <= 1;设P(r)和P(s)分别是对应于灰度级的概率。那么变换方程T(r)是一单调递增的,0<=T(r) <= 1;且逆变换方程T-1(r)也同样单调递增。离散情况下如下:
所以首先要计算P(r),然后Sk就可以由P(r)累加而得,最后再进行拟合即可。
由于我做的是RGB彩色图,因此要分开对RGB进行计算。(当然,也可以先把RGB转成YUV,对YUV操作好后再转回RGB,但我试验后觉得还是对RGB三通道分开操作效果较好)
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath&