Как сохранить изображение гисторгама в базе данных и уметь выполнять поиск - PullRequest
5 голосов
/ 16 сентября 2010

Мне нужно написать веб-приложение, в котором пользователь сможет выполнять поиск по цветам изображений. У меня вопрос, как хранить данные о цвете? Я думаю, что лучшим решением будет уменьшить цвета изображения и подготовить гистограмму для каждого канала r, g и b, но я не знаю, как проектировать базу данных. Я хочу использовать СУБД MySQL. Может ли кто-нибудь указать мне правильное направление?

Привет

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

На ум приходит несколько идей для хранения данных гистограммы. Очевидный выбор - иметь одну таблицу (или три для отдельных каналов R / G / B), которая представляет (нормализованную) гистограмму, с колонкой для каждого бина. Если вы используете 24-битный цвет (8 бит / канал), вы можете разбить каждый канал на 16 интервалов ([0-15], ..., [240-255]), и в каждом столбце сохранить процент пикселей который упал в эту корзину.

Примерно так:

id  imgID  R_0_15 ... R_240_255 G_0_15 ... G_240_255 B_0_15 ... B_240_255
1   1234   0.1        0.23      0.023      0.234     0.11       0.01

При таком дизайне вся (нормализованная) гистограмма для каждого изображения будет представлена ​​в виде одной строки в таблице.

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

Возможно, лучшим способом была бы таблица HistogramBins с записью строки для каждого изображения и каждого бина:

id  imgID  component  bin_min  bin_max  percentage
1   1234   R          0        15       0.1
....omitted rows...
1   1234   R          240      255      0.23
...etc...

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

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

Надеюсь, это поможет вам начать. Дайте нам знать, что вы в конечном итоге!

2 голосов
/ 16 сентября 2010

Значения RGB не имеют значения для человеческого восприятия, но они могут быть легко преобразованы в Оттенок, Насыщенность, Яркость , которые более чувствительны для людей. К сожалению, насыщенность и яркость довольно интуитивны: richer: paler и lighter: darker, но у нас нет естественного упорядочения цветов, поэтому оттенок выражается в произвольном количестве градусов вокруг круга. На практике просить людей различать тон, особенно при поиске чего-то еще невидимого, довольно сложно. Поэтому вы можете ограничить свои категории вершинами шестиугольника на цифре "a" .

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

Праздное мышление на моделях восприятия

Даже HSL имеет свои описательные ограничения. Я упоминаю «загар» как цвет песка. У большинства читателей, вероятно, нет проблем с восприятием или присвоением ему названия, но если у вас нет слишком большого опыта игры с цветом, совершенно неочевидно, что оттенок загара оранжевый, но бледный (менее насыщенный) и яркий (более высокое значение). И около трети круга оттенков посвящено зелени и т. Д.

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