SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.08.2010 09:19:16

oleg_l
Участник
Зарегистрирован: 20.05.2010
Сообщений: 3

Поиск изображений по цвету, как организовать MySQL часть такой задачи?

На данный момент написана функция на PHP, которая прочесывает изображение и считает, сколько раз, и какой цвет встречается в изображении, интенсивность каждого составляющего цвета (RGB) предусмотрительно огрубляется до 8-ми градаций интенсивности, функцией приведенной ниже:

function rough_int($int, $rough=8, $int_src=255)
{
    $part = $int_src / $rough;
    for($i=0; $i <= $rough; $i++)
    {
        if($int <= ($part * $i)) return round($part * $i);
    }
}

// пример
for($i=0; $i<=255; $i++)
    echo "Было: $i, стало: ".rough_int($i)."<BR />\n";

Т.е. в итоге может получиться лишь 512 разных цветов, думаю для поиска по равенству это самое то.

На выходе из основной функции получается массив, отсортированный по доминированию цветов, такого вида:
array(
'#RGB' => 71,
'#RGB' => 20,
'#RGB' => 9
);
// #RGB - оргубленое представление интенсивностей, а число - процент участия данного цвета в изображении.

Теперь опишу свое представление об организации базы данных:
первая таблица - images:
id, filename

вторая таблица - colors:
img_id, color, prc

img_id - id изображения
color   - #RGB
prc     - процент этого цвета color в изображении img_id

Записываться в таблицу colors будут только доминирующие 10 цветов, больше - ИМХО, просто излишне.

Задача такая - на входе поискового скрипта получаем от 1 до 10 цветов и огрубляем их все той же функцией rough_int(), теперь нужно произвести выборку тех изображений, цвета которых совпадают с переданными цветами и отсортировать по СУММЕ prc. По сути нужен запрос осуществляющий подобную выборку, MySQL знаю на уровне детсада, поэтому обращаюсь к вам.))

Возможно моя схема БД ошибочна, если да - прошу подсказать более правильную.

Неактивен

 

#2 21.08.2010 12:30:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Поиск изображений по цвету, как организовать MySQL часть такой задачи?

Напишите что-нибудь простое? Типа
SELECT img_id, SUM(prc) prc, COUNT(*) cnt
FROM colors
WHERE color IN (цвета)
GROUP BY img_id
HAVING cnt >= сколько цветов должно совпасть
ORDER BY prc DESC

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson