Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
На данный момент написана функция на 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 знаю на уровне детсада, поэтому обращаюсь к вам.))
Возможно моя схема БД ошибочна, если да - прошу подсказать более правильную.
Неактивен
Напишите что-нибудь простое? Типа
SELECT img_id, SUM(prc) prc, COUNT(*) cnt
FROM colors
WHERE color IN (цвета)
GROUP BY img_id
HAVING cnt >= сколько цветов должно совпасть
ORDER BY prc DESC
Неактивен
Страниц: 1