Как идентифицировать нефотографированные или «неинтересные» изображения с помощью Python Imaging Library (PIL) - PullRequest
5 голосов
/ 16 февраля 2011

У меня есть тысячи изображений, и мне нужно отсеять те, которые не являются фотографиями или иным образом «интересными».

«Неинтересное» изображение, например, может быть всего одного цвета или в основномодного цвета, или простой значок / логотип.

Решение не должно быть идеальным, просто достаточно хорошим, чтобы удалить наименее интересные изображения.

Моя лучшая идея на данный момент - взятьслучайная выборка пикселей, а затем ... сделать что-то с ними.

1 Ответ

2 голосов
/ 16 февраля 2011

Данфей побил меня к этому. Вот мой метод расчета энтропии изображения:

import Image
from math import log

def get_histogram_dispersion(histogram):
    log2 = lambda x:log(x)/log(2)

    total = len(histogram)
    counts = {}
    for item in histogram:
        counts.setdefault(item,0)
        counts[item]+=1

    ent = 0
    for i in counts:
        p = float(counts[i])/total
        ent-=p*log2(p)
    return -ent*log2(1/ent)


im = Image.open('test.png')
h = im.histogram()
print get_histogram_dispersion(h)
...