ACE原理及结合Opencv算法实现

在这里插入图片描述

算法实现

//自适应对比度增强算法,C表示对高频的直接增益系数,n表示滤波半径,maxCG表示对CG做最大值限制
int ACE(Mat& src, Mat& dst, int C, int n, float MaxCG)
{
	if (src.empty())
		return -1;
	int nrows = src.rows;
	int ncols = src.cols;
	int jMax = ncols*src.channels();
	int i = 0;
	int j = 0;
	Mat meanLocal; //图像局部均值
	Mat varLocal; //图像局部方差
	Mat meanGlobal; //全局均值
	Mat varGlobal; //全局标准差
	blur(src, meanLocal, Size(n, n));
	Mat highFreq = src - meanLocal;
	varLocal = highFreq.mul(highFreq);
	varLocal.convertTo(varLocal, CV_32F);
	sqrt(varLocal, varLocal);

	meanStdDev(src, meanGlobal, varGlobal);
	Mat gainArr = meanGlobal / varLocal; //增益系数矩阵
	for (int i = 0; i < nrows; i++)
	{
		float* pdata = gainArr.ptr<float>(i);
		for (int j = 0; j < jMax; j++)
		{
			pdata[j] = pdata[j] > MaxCG ? MaxCG : pdata[j];
		}
	}
	gainArr.convertTo(gainArr, CV_8U);
	gainArr = gainArr.mul(highFreq);
	dst = meanLocal + gainArr;
	//Mat dst2 = meanLocal + C * highFreq;
	return 0;
}
int ACEAlgorithm(Mat& src, Mat& dst, int C , int n, float MaxCG)
{
	int ret = PreDealSource(src, dst);
	if (-1 == ret)
		return -1;
	vector<Mat>vSrc;
	split(src, vSrc);
	int iSize = static_cast<int>(vSrc.size());
	for (int i = 0; i < iSize; i++)
	{
		ACE(vSrc[i], vSrc[i], C, n, MaxCG);
	}
	merge(vSrc, dst);
	return 0;
}
#include<iostream>
#include <windows.h>
#include"ImageAlgorithm.h"
using namespace std;

void ACETest()
{
	Mat src = imread("E:\\AlgorithmImage\\ACE2.jpg");
	Mat dst;
	int ret = ACEAlgorithm(src, dst,4,50,5);
	printf("rows:%d,cols:%d\n", src.rows, src.cols);
	/*if (0 == ret)
	{
	imshow("src", src);
	imshow("dst", dst);
	waitKey(0);
	}*/
}
//主函数
int main()
{
	LARGE_INTEGER t1, t2, tc;
	QueryPerformanceFrequency(&tc);
	QueryPerformanceCounter(&t1);
//	testGrayWorld();
//	testAutoBalance();
	ACETest();
	QueryPerformanceCounter(&t2);
	printf("Use Time:%f\n", (t2.QuadPart - t1.QuadPart)*1.0 / tc.QuadPart);
	/*int j = 0;
	int a[3]{ 1,2,3 };
	int dj = a[++j] + a[++j];
	cout << dj << endl;*/
	system("pause");
	return 0;
}

效果展示

在这里插入图片描述

参数与时间

Debug
在这里插入图片描述
int C = 4;
int n = 50;
float MaxCG = 5;

Release
在这里插入图片描述
参考文献
https://mp.weixin.qq.com/s/aPi7haF7eTDabbYi4c75cA

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值