#3. Распознавание цвета по фотографии

May 14, 2013 16:47

Продолжаю свой рассказ. Я обещал рассказать о распознавании цветов по фотографии.

Небольшая предыстория. Лет 6 назад мы с Максов делали сайт Артефакту, где в оформлении страниц использовались цвета с фотографий.



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

Мы снова переносимся в 2013-й. На этапе теоретических размышлений о возможностях программы я поделился этой задумкой с Олей (она еще сыграет свою роль в этой истории) и она сказала, что подобная штука существует в какой-то группе ВКонтакте посвященной дизайну интерьера или типа того. Там админы выкладывали фотографию интерьера и рядом плашки с используемыми цветами. История умалчивает каким образом они эти плашки получали, но скорее всего в ручном режиме.

Я начал копать и оказалось, что в интернете существует несколько сайтов, позволяющих выцеплять из фотографии цвета. Однако у всех них был один существенный недостаток: они игнорировали маленькие объекты. Другими словами из фотографии зеленого поля с одни красным маком они бы взяли только градации зеленого.



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



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

Выглядел он как-то так:



Как видите здесь явно присутствуют две руки. Так и есть. Это Оля. Именно она, под мои восторженные возгласы и восхищенные взгляды, вела победоносные сражения на полях программирования, а также выслушивала мои туманные размышления о и делилась своими, но о ее суперспособностях в другой раз, а пока говорим про алгоритмы.

Алгоритм получился и работал прекрасно, но интересно здесь другое - в отличие от сайтов в интернете, Koj ограничен в конечном количестве цветов - их 6, не больше и не меньше, тогда как сайты могли выдавать любое удобное им количество цветов. В шестицветном ограничении нет ничего плохого, это просто данность в которой существует приложение.

С другой стороны это породило ту самую неразрешимую проблему, суть которой сводится к тому, что компьютер можно научить различать цвета, но не более. Анализируя фотографию он не видет на ней траву, шмеля, лепестки, он видит 010101101001011010010101. И если, скажем, на фотографии 6 цветных карандашей лежащих на деревянном столе, он не понимает, что цвет карандашей, в данном случае, важнее цвета стола и запросто может выкинуть цвет одного из карандашей, вставив на его место цвет столешницы. Вот, что надо:



А вот, что делает компьютер, слепо исполняя команды:



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

В следующий раз я расскажу о построении цветовых сочетаний по науке. Это отдельная история, с гипербалойдными катализирующими графиками из спец. курса MIT и формулами 5 класса средней школы.

А пока я пишу продолжение рассказа, вы можете скачать приложение себе на айфончик:

Koj - https://itunes.apple.com/us/app/koj/id643485164?mt=8
Koj Lite - https://itunes.apple.com/us/app/koj-lite/id643497152?ls=1&mt=8

Либо ищите его в АппСторе по слову koj.

Продолжение следует.

алгоритм, koj

Previous post Next post
Up