Определите, является ли изображение "чистой" бумагой

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

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

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

3 ответа

Вы можете справиться с количеством цветов, но я немного обеспокоен тем, что это хорошо работает - хотя без большего количества образцов изображения трудно сказать. Поэтому, если у вас возникнут трудности с этим, вы можете посмотреть на гистограммы двух пунктов - бумаги и "не бумаги".

Бумага

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

Не бумага

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

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

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

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

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

Попробуй использовать imagecolorat Здесь ссылка

<?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, то это белая бумага.

Другие вопросы по тегам