基于网络色情图像检测的研究与实现
【摘 要】 对于两幅既有旋转又有缩放变化的图像,如何确定哪些点是兴趣点呢?因为是不会随着图像变化而变化的点,所以就是要找到图像中的一些稳定点,比如角点、边缘点、亮区域中的暗点以及暗区域中的亮点。而Surf算法对于这些点的检测是基于最基本的Hessian近似矩阵。
【关键词】 图像兴趣点 积分图像 Hessian矩阵
对一个数据较大的图像集来说,将里面的图像进行一一筛选分类是一个耗时比较长的工作,并且相对于数据小的图像集而言,这样直接进行分类的结果误判率将明显有所增加。为了较为快速并且精确的区分出所有的图像,我们可以将图像集进行一个数据减小的前提工作,做法是优先排除一些明显合法的图像,然后再从余下的图像集中进行色情图像的识别。
1 合法图片的识别
对一个数据较大的图像集来说,将里面的图像进行一一筛选分类是一个耗时比较长的工作,并且相对于数据小的图像集而言,这样直接进行分类的结果误判率将明显有所增加。为了较为快速并且精确的区分出所有的图像,我们可以将图像集进行一个数据减小的前提工作,做法是优先排除一些明显合法的图像,然后再从余下的图像集中进行色情图像的识别。具体★做法如下(如图1):
(1)图片加载和预处理,图片预处理就是将图片大小规范到统一的尺寸;
(2)人脸检测,基于OpenCV中训练好的分类器进行人脸所在图片比例的计算;
(3)基于YCrCb的肤色检测,计算去除人脸后的基于YCr✍Cb肤色所在图片的比例,如果满足合法图片的阈值则进行基于纹理的肤色检测,否则进行非法图片检测;
(4)基于纹理的肤色检测,满足YCrCb肤色检测为合法图片后,进行纹理的肤色检测,计算去除人脸后的基于纹理肤色所在图片的比例,如果满足合法图片的阈值则分类为合法,否则进行非法图片检测。
2 色情图片的识别
经过图像集的缩小工作后,接下来就是通过分类器对图像进行分类,以区分出色情图片和合法图片。色情图像的分类识别步骤如下(见图2)。
3 算法实现
(1)训练基于BoVW模型的词典,并对词典进行聚类,输出词典文件,伪代码如下:
BEGIN
While( !readVocabulary(G_vocabularyFile,vocabulary))
{
定义参数bowTrainer,聚类维数为G_vocabSize
While( readdir(dir) != NULL )
{
检测兴趣点imageKeypoints
对兴趣点提取描述子imageDescriptors
If( !Descriptors.empty() )
{
向bowTrainer中加入描述子
vocabulary = bowTrainer.cluster();
}
输出vocabulary
}
}
END
其中,输出词典为vocabular€y,dir为训练样本图像集所在路径,bowTrainer类型为BOWKMeansTrainer,词典文件通过G_ vocabularyFile设定,词典训练的维数通过G_vocabSize设定。
(2)基于YCrCb的肤色检测,将图像分类存放在不同文件目录下,伪代码如下:
BEGIN
While( readdir(test_dir) != NULL)
{
通过肤色阈值及肤色像素所占比例判断是否为色情图像,返回class_no
if( class_no为1 )
将该图像拷贝到NO目录下
if( class_no为0 )
将该图像拷贝到OK目录下
}
END
其中,test_dir为待测图像集所在路径,class_no为图像类别(0为合法,1为非法)。
(3)基于纹理的肤色检测,将基于YCrCb肤色检测后NO文件里的图像集进一步分类,伪代码如下:
BEGIN
While( readdir(NO) != NULL)
{
通过阈值将图像重构,通过肤色比例判断是否为色情图像,☪返回class_no
if( class_no为1 )
将该图像拷贝到NO目录下
if( class_no为0 )
将该图像拷贝到OK目录下
}
END
其中NO为基于YCrCb肤色检测后的NO文件,class_no为图像类别(0为合法,1为非法)。
(4)对图像集进行KNN分类,根据建立了正、反索引的词典,对图像集进行分类存放,伪代码如下:
BEGIN
读取合法图像词典为OK_Mat
读取非法图像词典为NO_Mat
建立索引Oindex(OK_Mat, KDTreeIndexParams)
建立索引Nindex(NO_Mat, KDTreeIndexParams)
Oindex.knnSearch得到距离vec_dists_o
Nindex.knnSearch得到距离vec_dists_n
if( vec_dists_o vec_dงists_n )
n_sum++
else
o_num++
if(n_sum o_sum)
将图像拷贝到OK目录下
if(n_sum o_sum)
将图像拷贝到NO目录下
END
其中,KDTreeIndexParams为OpenCV库函数参数,OK目下为测试图像集中合法图像,NO目录下为测试图像集中非法图像。
4 结语
参考文献:
[3]王新成.高级图像处理技术[M].北京:中国科学技术出版社,2001.