if(validatorImage("d:/b.jpg"))
echo '是个低俗图片<br />';
else
echo '不是低俗图片<br />';
function validatorImage($fileName){
$image = getImage($fileName);
$width = ImagesX($image);
$height = ImagesY($image);
$ycb = 0;
for($y=0;$y<$height;$y++){
for($x=0;$x<$width;$x++){
$rgb = ImageColorAt($image,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$ycbcr = rgb2ycbcr($r,$g,$b);
if((86<=$ycbcr['cb']&&$ycbcr['cb']<=117)&&(140<=$ycbcr['cr']&&$ycbcr['cr']< 168)){
$ycb++;
}
}
}
imagedestroy($image);
if($ycb>(floatval($width)*floatval($height)*0.3))
return true;
else
return false;
}
function getImage($fileName){
$info = getImageSize($fileName);
$ext = null;
switch ($info[2]) {
case 1 :
$ext = "gif";
break;
case 2 :
$ext = "jpeg";
break;
case 3 :
$ext = "png";
break;
}
$function = 'ImageCreateFrom'.ucfirst($ext);
$resource = $function($fileName);
return $resource;
}
// RGB 转 YCbCr色彩
function rgb2ycbcr($r,$g,$b){
$r = floatval($r);
$g = floatval($g);
$b = floatval($b);
$y = 0.299*$r + 0.587*$g + 0.114*$b;
$cb = (1 / 1.772) * ($b - $y) + 128;
$cr = (1 / 1.402) * ($r - $y) + 128;
return array('y'=>$y,'cb'=>$cb,'cr'=>$cr);
}
说明:
上面是通过 RGB色彩模型 转成 YCbCr色彩模型 在 YCbCr色彩模型 判断低俗色的占比,如果商用还要加上肌肤色的过滤及对低俗部位的判断,依据比例对图片进行分类。
YCbCr 相关知识,可以参考http://zh.wikipedia.org/wiki/YCbCr
RGB 转成 YCbCr 公式可以参考http://blog.youkuaiyun.com/zyl910/archive/2006/05/29/759535.aspx
本文介绍了一种使用YCbCr色彩模型判断图片是否包含低俗内容的方法,通过转换色彩模型并计算特定色域占比来实现图片分类。
1588

被折叠的 条评论
为什么被折叠?



