определить, является ли изображение в целом красным, зеленым, синим или черным - PullRequest
4 голосов
/ 24 июня 2011

Я обрабатываю маленькие изображения, которые будут красного, зеленого, синего или черного цвета (думаю, карта занимает 4-цветную колоду).Какой хороший быстрый алгоритм определения цвета изображения?

Пример набора входных данных см. здесь , за исключением того, что изображения можно масштабировать, чтобы они не быликак четко

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Являются ли эти точные изображения, которые вы используете?Если так, есть ли один пиксель на всех изображениях, которые будут окрашены?Я думал, где костюм.Посмотрите на пиксель, где должен быть костюм, и он скажет вам, какого «цвета» карта.

Более общие подходы могут включать анализ всего изображения (медленно, но эффективно), масштабирование изображения и анализ каждогопиксель (более выполнимо, если вы в конечном итоге получаете маленькое изображение, но масштабирование может повлиять на цвета), или выборка в случайном порядке n пикселей (или строк / столбцов пикселей), возможно что-то с маскировкой, если тени цветов известны заранее, но нужен ли вам общий подход?

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

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

Эта запись, кажется, улажена, но если вы не возражаете, мои 2 цента ...

Насколько я понимаю, вам нужен общий подход, и вы не знаете, какие изображения заранее. Хотя уже опубликованные ответы должны быть достаточно хороши для быстрого кодирования с некоторыми корректировками, если у вас все еще возникают проблемы с ними, я предлагаю вам использовать самоорганизующуюся карту: http://davis.wpi.edu/~matt/courses/soms/ и http://www.ai -junkie .com / апп / сома / som1.html

Может потребоваться некоторое (неконтролируемое) время обучения, чтобы получить приличную карту / распознаватель (эй, в конце концов, это нейронная сеть), но я столкнулся с проблемой, немного похожей на вашу, и они хорошо сработали для меня (легко адаптироваться, гибко с различным освещением и т. д.).

1 голос
/ 24 июня 2011

Это работает достаточно хорошо для одного пикселя:

def get_ishness(r,g,b):
    h,s,v = rgb_to_hsv(r,g,b) #h from 0-360, s and v from 0-100
    if v < 50: return 'black'
    if s < 15: return None
    if h < 10: return 'red'
    if 80 < h < 100: return 'green'
    if 210 < h < 230: return 'blue'
    return None

Для всего изображения я суммирую пиксели красного, зеленого, синего и черного цветов и возвращаю цвет, в котором больше всего пикселей.

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