视频质量检测(3)--图像偏色检测

本文主要介绍图像偏色的检测。
1、偏色的定义
2、算法思路
RGB颜色空间是最简单的一种颜色空间,但是RGB颜色空间最大的局限性在于当用欧氏距离来刻画两种颜色之间的差异时,所计算出的两种颜色之间的距无法正确表征人们实际所感知到的这两种颜色之间的真实差异。
采用CIE Lab颜色空间,此空间所计算出来的颜色之间的距离与实际感知上的差别基本一致。其直方图可以客观的反映图像色偏程度,在CIE Lab下进行偏色图像的自动检测更为合理。
经过对正常图像和偏色图像的分析发现,如果在ab色度坐标平面上的直方图中,色度分布基本上为单峰值,或者分布较为集中,而色度平均值D又较大时,一般都存在色偏,而且色度平均值越大,色偏越严重。然而,如果在ab色度坐标平面上的直方图中色度分布存在明显的多峰值,而且较为分散时,图像色偏程度将大大减轻,甚至没有色偏。
3、算法原理
在这里插入图片描述
在这里插入图片描述
式中 ,M、 N分别为图像的宽和高,以像素为单位。在 a - b色度平面上,等效圆的中心坐标为 ( da , db ) ,半径为 M 。等效圆的中心到 a - b色度平面中性轴原点为 ( a = 0, b = 0)的距离 D 。由等效圆在 a - b色度平面上的具体位置,来判断图像整体的偏色。da > 0,偏红,否则偏绿。db > 0,偏黄,否则偏蓝。引入偏色因子 K, K值越大 ,偏色越严重。
4、代码实现

void ColorCast(Mat src, float& cast, float& da, float& db)
{
	Mat LabImg;
	cvtColor(src, LabImg, CV_BGR2Lab);

	float Sum_a = 0, Sum_b = 0;
	for (int i = 0; i < src.rows;i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			Sum_a += LabImg.at<Vec3b>(i, j)[1];
			Sum_b += LabImg.at<Vec3b>(i, j)[2];
		}
	}

	da = Sum_a / (src.cols*src.rows);
	db = Sum_b / (src.cols*src.rows);

	float Ma = 0, Mb = 0;
	float sum_ma = 0, sum_mb = 0;
	for (int i = 0; i < src.rows; i++)
	{
		for (int j = 0; j < src.cols; j++)
		{
			sum_ma += pow((LabImg.at<Vec3b>(i, j)[1]- da), 2);
			sum_mb += pow((LabImg.at<Vec3b>(i, j)[2]- db), 2);
		}
	}
	Ma = sum_ma / (src.cols*src.rows);
	Mb = sum_mb / (src.cols*src.rows);

	cast = sqrt(da*da + db*db) / sqrt(Ma*Ma + Mb*Mb);
}

得到的da、db应该减去128,将值归一化到(-127,128)之间,再和0进行比较。

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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mirinda_cjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值