视频在传输过程中,由于编解码出现问题,会导致视频出现不同程度的损伤,其中就包括视频马赛克现象。马赛克对于视频的观看效果有着很大的影响,为了及时有效地发现视频中是否存在马赛克,这里基于视频图像进行图像马赛克检测,具体步骤如下。
以一幅图片为例,来说明马赛克检测所用方法,这里采用的图片如下所示:
可以发现,图片中人物脸部打了马赛克。针对这片区域的马赛克,看本算法是否能够有效识别。
首先,对上图进行Canny边缘检测,阈值分别取40和200,得到图像的检测结果。
观察上图,发现马赛克区域经过边缘检测后,出现了一堆方块状或类方块状的区域。这些区域大体可分为如下5种情况。
方块和类方块大体分为以上5种,分别为完备的正方形、分别缺一边的不完备正方形。为了统计上述边缘检测结果图中含有的这5类正方形,可以采取下述方式进行统计:
边长从3开始,逐次加1,到33截止(这里有待考究)。判断每个像素以这个边长能否组成正方形(5种情况,以下简称正方形)。如果能,这个边长的正方形数加1,如果不能继续遍历。
上述步骤有一个问题就是,怎样才算构成了正方形的判断准则?
1)整体判断法:以此边长遍历整个正方形区域,如果无缺失的像素/整个正方形的像素大于70%,认为这个正方形存在。这种方法的优点是判断准确,综合利用了正方形所有的像素,但缺点同样明显,运算速度极低;
2)八点判断法:选取正方形中的八个点来进行判断,如果选择的八个点都满足构成正方形条件,那么,认为此正方形存在。这种方法的优点是运算速度有所提升,但是准确率上存在不足;
3)四点判断法:选取正方形上的四个点位置进行判断,如果选择的四个点都满足构成正方的条件,认为此正方形存在。这种方法运算速度最快,伴随着的是不太理想的准确率。
由于视频中马赛克的检测既要考虑处理图片的速度,也要兼顾判断的准确度,所以,这里采用了八点判断法。以上述图片为例,得到以下结果图。
可以看到图片中边长为9的正方形数量最多,为37个。经验证,将上图转为灰度图,写入txt,得到图中小方块的边长为9。但是,现在的这个判断方法并没有去除其他的错误选项和重复选项。我们可以发现,如果图片中边长为x的小方块最多的话,那么后续影响较大的肯定是边长为 (n-1)*(x-1)+x 的正方形,且数量均小于边长为x的正方形数量。通过此规律,我们可以找到一个马赛克图片中的小方块数。
最后,利用上述方法,对一些视频帧进行判断,通过人工监督的方式,查看最后的检测准确度。以一组10帧图片为例进行检测,得到如下的结果图。
经人工鉴定,这10帧图片中,只有第3张图片不含马赛克,其他的均有马赛克,实验准确率100%。所用时间4.15s。(最后附上实验的视频帧以及程序代码)
总结
1)采用八点判断方式,准确率基本满足要求,但是在耗时上还是有很大缺陷。10帧图片耗时4.15s,一帧图片图片耗时415ms。如果想实时判断高清视频是否含有马赛克的话,这个速度至少再提升10倍,达到25帧/s;
2)此判断方法存在先天缺陷。由于是将图像边缘处理之后进行判断,对于图片中的正方形区域,无法判断是不是由于马赛克影响造成的,比如图片中含有棋盘之类的网格就会造成误判的干扰。
测试视频帧及程序代码:
http://download.csdn.net/detail/zhancf/9254645
(需要配置opencv环境。)