我们正在制作一个工具,将允许一系列的照片被拍摄。与真实照片混合在一起的将是空白纸张的照片。我想通过识别空白页的图像来分隔一系列的照片。
我在找一种方法来辨别这张白纸。或者通过计算颜色,或者其他一些方法。也许是文件大小?
我有GraphicsMagick,所以可能会有一些有用的东西,代码将在PHP中,但如果它运行良好,也可以是任何格式。
发布于 2015-04-30 19:55:33
你可能在颜色的数量上做得很好,但我对它的良好工作感到有点不安-尽管如果没有更多的样本图像就很难说。因此,如果你在这方面遇到困难,你可能会想看看这两个项目的直方图-纸张和“不是纸张”。
纸质
不是纸质
您可以看到,纸张直方图的边非常陡峭,没有尾部,而“非纸张”直方图的尾部更粗。图像的峰度就是对这一点的衡量--尾巴的肥厚。较高的峰度意味着图像中更多的方差是罕见的极端偏差的结果,而不是频繁的中等大小的偏差。因此,你会期望“非纸张”具有更高的峰度,因为它在图像中有“块状”的其他东西,而不是相当均匀的纸张。
如果您让ImageMagick报告两个图像的峰度,您可以看到显着的差异。
identify -verbose notpaper.jpg | grep -E "kurtosis:|Red:|Green:|Blue:|Overall"
Red:
kurtosis: 1.03434
Green:
kurtosis: 1.22576
Blue:
kurtosis: 0.593927
Overall:
kurtosis: 1.49035
对于论文..。
identify -verbose paper.jpg | grep -E "kurtosis:|Red:|Green:|Blue:|Overall"
Red:
kurtosis: -0.953723
Green:
kurtosis: -0.980636
Blue:
kurtosis: -1.06634
Overall:
kurtosis: -0.0151458
正如我所说的,你可以在颜色的数量上做得很好,但如果你遇到问题,也许可以考虑这个。
发布于 2015-04-28 12:43:06
尝试使用imagecolorat
引用Here
<?php
$im = imagecreatefrompng("php.png");
$rgb = imagecolorat($im, 10, 15);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
var_dump($r, $g, $b);
?>
或者这个
<?php
$im = imagecreatefrompng("php.png");
$rgb = imagecolorat($im, 10, 15);
$colors = imagecolorsforindex($im, $rgb);
var_dump($colors);
?>
这将是这样的。
array(4) {
["red"]=>
int(119)
["green"]=>
int(123)
["blue"]=>
int(180)
["alpha"]=>
int(127)
}
检查白值并比较.If所有的值都是255, 255,255,然后这就是白皮书。
发布于 2015-04-29 09:52:42
任何小于10k的gm identify IMG_0551.JPG -format %k
都很可能是一张空白表。
https://stackoverflow.com/questions/29910421
复制相似问题