Обнаружение пятна изображения в Python - PullRequest
1 голос
/ 11 марта 2012

У меня есть миллионы изображений, содержащих фотографии каждый день.Я пытаюсь найти способ выбрать те, в которых присутствуют некоторые определенные цвета, скажем, красный и оранжевый, независимо от формы или объекта.Размер может иметь значение - например, не менее 50x50 пикселей.

Существует ли эффективная и легкая библиотека для достижения этой цели?Я знаю, что есть OpenCV, и он кажется довольно мощным, но будет ли он слишком раздутым для этой задачи?Это относительно простая задача, верно?

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Конечно, OpenCV может сделать это, но вы также можете использовать Python Imaging Library PIL и просто создать функцию для перебора обрезки изображения в небольших блоках изображения, установленного на ваш минимальный размер, и тестирования этихблокирует средний цвет и толерантность по критериям соответствия.Что-то вроде (непроверенный псевдокод):

import Image

im = Image.open("test_picture.png")
for y in xrange(image_height - block_height):
    for x in xrange(image_width - block_width):
        block = im.crop(x, y, x + block_width, y + block_height)
        if colour_test(block):   # test for match
            return True

Очень просто получить информацию о цветовой частоте изображения, используя block.getcolors(), так что вы можете легко написать функцию colour_test().

1 голос
/ 11 марта 2012

Я не знаю, есть ли библиотека, но вы могли бы сегментировать эти области, используя простой алгоритм сегментации порога.Скажем, вы хотите найти красные пятна.Извлеките красный канал из изображения, выберите порог и удалите пиксели, которые находятся ниже порога.Получающиеся пиксели - ваши пятна.Чтобы найти подходящий порог, вы можете построить гистограмму красного канала изображения и найти долину там.Самая низкая точка в долине - это порог, который вы можете использовать.Если имеется более одной долины, сглаживайте гистограмму до тех пор, пока не будет одна долина и два пика.Вы можете использовать функцию Гаусса, чтобы сгладить гистограмму.Чтобы найти пятна от оставшихся пикселей, вы можете использовать алгоритм маркировки, а затем найти связанные компоненты на графике, который создал алгоритм маркировки.Да, это просто.:)

...