视频质量检测(4)--图像亮度异常检测

本文主要介绍图像亮度异常的检测。
1、亮度异常的定义
视频画面中过亮或者过暗的区域超过一定比例。
2、算法思路
计算图片在灰度图上的均值和方差,如果存在亮度异常时,均值会偏离基准点(可以假设为128或者其他值),方差也会偏大;通过计算灰度图的均值和方差,就可评估图像是否存在过曝光或曝光不足。
但实际上,图像的均值就可以表征画面的亮暗度;考虑方差的因素,需要参考选择的基准点(不同基准点,方差误差较大),综合判断图像亮度的异常。
3、代码实现

void JudgeBright1(Mat src, float &da)
{
	Mat gray;
	cvtColor(src, gray, CV_BGR2GRAY);

	Mat means, stddev;
	meanStdDev(gray, means, stddev);
	da = means.at(0);
}
void JudgeBright2(Mat src, float &da, float &k)
{
	Mat gray;
	cvtColor(src, gray, CV_BGR2GRAY);
	float Sum_a = 0;
	int Hist[256] = { 0 };
	double meanV = 0;
	for (int i = 0; i < gray.rows; i++)
	{
		uchar *ptr = gray.ptr(i);
		for (int j = 0; j < gray.cols; j++)
		{
			Sum_a = Sum_a + (ptr[j] - 100);
			Hist[ptr[j]]++;
		}
	}
	da = Sum_a / (gray.rows*gray.cols);

	float D = abs(da);
	float ma = 0,sum_m =0;
	for (int i = 0; i < 256; i++)
	{
		sum_m = sum_m + abs((i - 100) - da)*Hist[i];
	}
	ma = sum_m / (gray.rows*gray.cols);
	float M = abs(ma);

	k = D / M;
}

方法一简单实现,只需根据实际需要中对正常、过亮、过暗的图像均值做好统计,选择合适的阈值即可;
方法二,原理上更为合理,但实际中基准点的选择会导致结果有很大误差。

本人希望在分享过程中与各位共同学习、共同提高!

你可能感兴趣的:(视频质量诊断,视频图像质量诊断)