Определите, является ли изображение «пустым»; бумага

Мы создаем инструмент, который позволит сделать цепочку фотографий. С реальными фотографиями будут смешаны фотографии чистых листов бумаги. Я хочу отделить серию фотографий, идентифицируя изображения пустых страниц.

Я пытаюсь найти способ идентифицировать чистый лист. Либо путем подсчета цветов, либо каким-либо другим методом. Может быть, размер файла?

У меня есть GraphicsMagick, так что, возможно, там есть что-то полезное, и код будет на PHP, но может быть во всем, если он будет работать хорошо.

1

Решение

Вы можете справиться с количеством цветов, но я немного обеспокоен тем, что это работает хорошо, хотя трудно сказать, не имея больше образцов изображений. Так что если у вас возникнут трудности с этим, вы можете посмотреть на гистограммы двух пунктов: бумага а также «не бумага».

Бумага

введите описание изображения здесь

Не бумага

введите описание изображения здесь

Вы можете видеть, что бумажная гистограмма имеет очень крутые стороны и не имеет хвостов, тогда как «не бумага» гистограмма имеет более толстые хвосты. Куртоз изображения — это мера именно жирности хвоста. Более высокий эксцесс означает, что большая разница в изображении является результатом нечастых крайних отклонений, в отличие от частых отклонений небольшого размера. Так что вы ожидаете «не бумага» иметь более высокий эксцесс, потому что он имеет «комки» других вещей в изображении, а не довольно однородной бумаге.

Если вы получите 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

Как я уже сказал, вы можете справиться с количеством цветов, но, возможно, подумайте об этом, если у вас возникнут проблемы.

1

Другие решения

попробуй использовать imagecolorat refrence Вот

<?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)
}

проверьте значение белого и сравните. Если все значения 255, 255,255, то это белая бумага.

0

gm identify IMG_0551.JPG -format %k что-нибудь <10k скорее всего чистый лист.

0
По вопросам рекламы [email protected]