На ум приходит несколько идей для хранения данных гистограммы. Очевидный выбор - иметь одну таблицу (или три для отдельных каналов 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» из всех трех цветовых компонентов. Я, вероятно, хотел бы написать несколько запросов и посмотреть, что лучше для вашего приложения.
Кроме того, причина, по которой я продолжаю говорить «нормализовано», заключается в том, что эта схема сделает ваш биннинг независимым от размера изображения.
Надеюсь, это поможет вам начать. Дайте нам знать, что вы в конечном итоге!