|
|||||
Графика и обработка изображений. Фракталы.Поиск ближайшего цвета в палитре.Этот алгоритм Вам может понадобиться когда например нужно перекодировать картинку с одной палитры на другую. Для решения рассмотрим более простую задачу - нужно найти в некоторой палитре из n цветов, цвет максимально похожий на некоторый заданный цвет. Введем обозначения: 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); } Вверх по странице, к оглавлению и навигации.
|