Как лучше всего отличить фотографию от картинки без машинного обучения? - PullRequest
0 голосов
/ 05 августа 2020

У меня много изображений, которые представляют собой либо фотографию, либо логотип / клипарт / рисунок / и т.д. c. Я бы хотел найти способ программно отделить фотографии от остальных. Есть ли способ сделать это относительно надежно без использования ML?

Примеры:

Lo go

enter image description here

Photo

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

1 Ответ

1 голос
/ 05 августа 2020

Два выбранных вами примера легко различимы по количеству цветов. Lo go имеет 584, а фотография имеет на 2 порядка больше - 51811.

Также по энтропии.

Обычные цветные фотографии также не имеют альфа-канала / канала прозрачности, который Это очень любят дизайнеры графики при создании логотипов, поэтому вы тоже можете проверить это.

Проверка альфа-канала, подсчет цветов и измерение энтропии с помощью любой библиотеки Python / C ++ или ImageMagick :

magick identify -format "%f: %[type]: %k: %[entropy]\n"  logo.png photo.jpg
logo.png: TrueColorAlpha: 584: 0.166973
photo.jpg: TrueColor: 51811: 0.917643

Если по-прежнему используется v6 ImageMagick , опустите слово magick в команде.

В качестве быстрой проверки блоков цвета solid вы можете вырезать изображение на фрагменты изображения размером 20x20, например:

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

Затем подсчитайте количество плиток, где дисперсия равна нулю, т.е. блок имеет абсолютно solid цвет. Это даст ответ от 0 (что означает, скорее всего, фотографию) до 400 (что означает, скорее всего, цветовой блок solid). Подсчитайте плитки с нулевой дисперсией следующим образом:

magick IMAGE -crop 20x20@ -format "%[standard-deviation]\n" info: | grep -c "^0$"

Ваш lo go возвращает 199 по этому показателю, а ваша фотография возвращает 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...