Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Алгоритмы / Графика /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Поиск ближайшего цвета в палитре - Программирование от RIN.RU
Поиск ближайшего цвета в палитре

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


Введем обозначения:


(R0,G0,B0) - цвет, аналог которого нужно найти в палитре.
(Ri,Gi,Bi) - i-тый цвет в палитре.
Различие цветов будем оценивать с помощью следующей функции:

fi = 30*(Ri-R0)2+59*(Gi-G0)2+11*(Bi-B0)2.




Множители 30;59;11 - отражают различную чувствительность человеческого глаза к красному,зеленому и синему цветам соответственно. Далее мы поочереди перебираем все цвета палитры и ищем цвет, для которого fi принимает минимальное значение. Это и будет искомый цвет.



// структуры
typedef struct RGB_type
{
char r,g,b;
} RGB;


typedef struct Pal_type
{
int n; // число цветов в палитре
RGB* C;
} Pal;


// это подпрограмма поиска
// P - палитра
// С - цвет, который требуется найти
// Возвращаемое значение - индекс цвета в палитре
int FindColor(Pal *P,RGB *C)
{
int i, fi, best_color, f_min=1000000;
for(i=0;i<P->n,i++)
{
fi=30*(P->C.r-C->r)*(P->C.r-C->r)+
59*(P->C.g-C->g)*(P->C.g-C->g)+
11*(P->C.b-C->b)*(P->C.b-C->b);
if(fi<f_min){best_color=i,f_min=fi;}
}
return(best_color); }




 8  Комментарии к статье  8  Обсудить в форуме  8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь