这两种算法均基于上一篇所提到的图像像素遍历,通过对每个像素进行相应操作,达到总体上的目的。
一、直方图均衡化
直方图均衡化是增强图像对比度的有效方法。通过对各像素频率的统计来重新分配该像素对应的新像素,但要保证像素之间的大小关系不能翻转,是以采取累积频率来分配像素。
void equalHist(Mat inputImage, Mat &outputImage)
{
int rowNumber = inputImage.rows;
int colNumber = inputImage.cols;
int total = rowNumber*colNumber;
outputImage = Mat(rowNumber, colNumber, CV_8UC1);
int freq[256] = { 0 };//各像素出现次数
for (int i = 0; i < rowNumber; i++)
{
uchar *pixel_adress = inputImage.ptr<uchar>(i);
uchar *pixel_adress2 = outputImage.ptr<uchar>(i);
for (int j = 0; j < colNumber; j++)
{
freq[int(pixel_adress[j])] += 1;//对应次数+1
//cout << "pixel: " << int(pixel_adress[j]) << endl;
}
}
double freq2[256] = { 0 };//各像素出现频率累积,从0到255
freq2[0] = double(freq[0]) / total;
//cout <<"freq[255]:"<<freq[2