自适应对比度

自适应对比度增强原理:

ACE原理是将一幅图像分成两个部分:一是低频部分,可以通过图像的低通滤波(平滑模糊)获得;二是高频部分,可以由原图减去低频部分得到。而算法的目标是增强代表细节的高频部分,即对高频部分乘以某个增益值,然后重组得到增强的图像。所以ACE算法的核心就是高频部分增益系数的计算,一种方案是将增益设为一个固定值,另一种方案是将增益值表示为与方差相关的量,后面在附加的公式中再说明。

假设一幅图像中像素点表示为 x(i,j), 那么以(i,j)为中心,窗口大小为(2n+1)*(2n+1)的区域内,其局部均值和方差可以表示为:

均值mx可以近似认为是背景部分此时 x-m 即是高频细节部分,对高频作增益乘积,有:

对于增益G,方案一是取大于1的常数,达到增强的效果,即为:

方案二是表示为与局部均方差成反比的变化值,即为:

在图像的高频区域,局部均方差较大,此时增益值就比较小,这样结果不会出现过亮情况。但是在图像平滑的区域,局部均方差很小,此时增益值比较大,从而可能会放大噪声信号,所以需要对增益最大值做一定的限制才能取得较好的效果。

代码如下:

#include <iostream>

#include <opencv2/opencv.hpp>


using namespace cv;

using namespace std;


Mat matrixWiseMulti(Mat &m1, Mat &m2){

Mat dst = m1.mul(m2);

return dst;

}



//float MaxCG:对高频成分的最大增益值,int n:局部半径,int C:对高频的直接增益系数

void ACE(Mat &src, int C = 3, int n = 3, float MaxCG = 7.5){

int rows = src.rows;

int cols = src.cols;


Mat meanLocal; //图像局部均值

Mat varLocal; //图像局部方差

Mat meanGlobal;//全局均值

Mat varGlobal; //全局标准差


blur(src.clone(), meanLocal, Size(n, n));

imshow("低通滤波", meanLocal);

Mat highFreq = src - meanLocal;//高频成分

imshow("高频成分", highFreq);


varLocal = matrixWiseMulti(highFreq, highFreq);

blur(varLocal, varLocal, Size(n, n));

//换算成局部标准差

varLocal.convertTo(varLocal, CV_32F);

for (int i = 0; i < rows; i++){

for (int j = 0; j < cols; j++){

varLocal.at<float>(i, j) = (float)sqrt(varLocal.at<float>(i, j));

}

}

meanStdDev(src, meanGlobal, varGlobal);

Mat gainArr = 0.5 * meanGlobal / varLocal;//增益系数矩阵


//对增益矩阵进行截止

for (int i = 0; i < rows; i++){

for (int j = 0; j < cols; j++){

if (gainArr.at<float>(i, j) > MaxCG){

gainArr.at<float>(i, j) = MaxCG;

}

}

}

gainArr.convertTo(gainArr, CV_8U);

gainArr = matrixWiseMulti(gainArr, highFreq);

Mat dst1 = meanLocal + gainArr;

imshow("变增益方法", dst1);

Mat dst2 = meanLocal + C*highFreq;

imshow("恒增益方法", dst2);

}


int main()

{

const char* img_path = "1.bmp";

Mat src = imread(img_path, 0);

imshow("src", src);

int C = 5;

int n = 7;

float MaxCG = 8;

ACE(src, C,n, MaxCG);

waitKey();

return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_34106574/article/details/82460658