ACE(自适应对比对增强)的分析与改进

该方法的基本思想是将图像分成两部分:低频和高频两部分,增强高频部分,再合成。达到锐度增强的效果。一般在Y通道进行。

局部低频部分:lowFre = blur(srcY, r)//局部滤波

局部高频部分:highFre = srcY - lowFre

局部标准差:  localStd^2 = blur(highFre*highFre, r)

全局均值和标准差:Gmean

自适应高频增强因子:c = a * Gmean / localStd,其中a =[0,1]

计算低频和高频的合成:srcY' = lowFre + c * highFre

最后转换并合成三通道

程序如下:

bool adaptContrastEnhancement(Mat& src, Mat& dst, int r, int maxCg)
{
	if (!src.data)  //判断图像是否被正确读取;
	{
		cerr << "自适应对比度增强函数读入图片有误";
		return false;
	}

	//Mat ycc;                        //转换空间到YCrCb;
	//cvtColor(scr, ycc, COLOR_RGB2YCrCb);

	//vector<Mat> channels(3);        //分离通道;
	//split(ycc, channels);


	Mat localMeansMatrix(src.rows, src.cols, CV_8UC1);
	Mat localVarianceMatrix(src.rows, src.cols, CV_8UC1);
	Mat highFre(src.rows, src.cols, CV_8UC1);
	//Mat highFreMul(src.rows, src.cols, CV_8UC1, Scalar::all(10));

	boxFilter(src, localMeansMatrix, CV_8UC1, Size(r, r));//low fre
	highFre = src - localMeansMatrix;//heigh fre

	//highFre = highFre.mul(highFreMul);
	imshow("low fre", localMeansMatrix);
	imshow("high fre", highFre);
	
	//imshow("blur high fre", highFre);

	localVarianceMatrix = highFre.mul(highFre);

	localMeansMatrix.convertTo(localMeansMatrix, CV_32F);
	localVarianceMatrix.convertTo(localVarianceMatrix, CV_32F);

	boxFilter(localVarianceMatrix, localVarianceMatrix, CV_32FC1, Size(r, r));//  var , e((r-e(r))*(r-e(r)))

	for (int i = 0; i < localVarianceMatrix.rows; i++)
	{
		for (int j = 0; j < localVarianceMatrix.cols; j++)
		{
			localVarianceMatrix.at<float>(i, j) = (float)sqrt(localVarianceMatrix.at<float>(i, j));//std
		}
	}

	Mat temp = src.clone();

	Scalar  mean;
	Scalar  dev;
	meanStdDev(temp, mean, dev);//global mean std

	float meansGlobal = mean.val[0];
	Mat enhanceMatrix(src.rows, src.cols, CV_8UC1);

	for (int i = 0; i < src.rows; i++)            //遍历,对每个点进行自适应调节
	{
		for (int j = 0; j < src.cols; j++)
		{
			if (localVarianceMatrix.at<float>(i, j) >= 0.01)
			{
				float cg = 0.5 * meansGlobal / localVarianceMatrix.at<float>(i, j);//0.5
				float cgs = cg > maxCg ? maxCg : cg;
				cgs = cgs < 1 ? 1 : cgs;

				int e = localMeansMatrix.at<float>(i, j) + cgs * (temp.at<uchar>(i, j) - localMeansMatrix.at<float>(i, j));
				if (e > 255) 
				{ 
					e = 255;
				}
				else if (e < 0) 
				{
					e = 0; 
				}
				enhanceMatrix.at<uchar>(i, j) = e;
			}
			else
			{
				enhanceMatrix.at<uchar>(i, j) = temp.at<uchar>(i, j);
			}
		}

	}
	dst = enhanceMatrix;
}

Y通道低频部分和高频部分(为了可视化,高频幅值被放大了)分别如下:

 

但是存在一个问题,因为噪声也属于高频,所以噪声也会被增强,所以效果看上去并不是很好,所以再加上一个时域去燥,去除高频噪声。这个是改进的地方。效果:增强前后对比如下:

 

ace技术内幕:深入解析ace架构设计与实现原理》从构架模式、编程示例和源代码3个维度系统地对经典网络框架ace(adaptivemunicationenvironment)的架构设计和实现原理进行了深入分析,它能解决4个方面的问题:,帮助框架设计者领略软件框架设计的普适原则和思想,进而设计出自己的软件框架;第二,帮助ace应用开发人员加深对ace框架的理解,提升开发水平,更好地去定制和扩展ace框架,以及解决c 网络通信中的难题;第三,帮助c 开发人员加深c 语言功底,书中有大量对c 源代码的分析,包括网络编程、动态库编程和异步编程等,还涉及10余个经典的设计模式的解析;第四,增强平台开发人员和软件架构师的技术修养,ace的设计和实现都极其,它的实现源码和架构思想非常值得去学习和研究。 全书一共7章,详细分析ace的reactor、serviceconfigurator、task、acceptor_connector、proactor和streams等6个框架的架构设计与实现原理。每个框架的分析分为3部分:,框架的设计分析,每个框架(除task框架)都有一个构架模式与之对应,构架模式阐述了框架的设计原理,给出了框架的总体结构,是学习框架的理论基础;第二,框架的应用分析,每个框架都有一个应用实例与之对应,应用实例既帮助读者了解框架的使用方法,又为读者提供了一个可以调试的应用程序,便于读者使用调试器探索框架的内部秘密;第三,框架的实现分析,这是本书的重点,对框架的实现原理进行了详细的分析,并且对重点的类和流程给出了uml类图和uml顺序图,可以让读者在短时间内掌握框架的实现技术。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值