|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergey Andrianov 2:5020/1507.400 09 Oct 2002 20:38:06 To : Yury Benesh Subject : Re: findcolor -------------------------------------------------------------------------------- Однажды 08-Oct-02 в 16:06 Yury Benesh (2:454/21.43) написал All по поводу -=- findcolor -=- YB> дан массiв iз 256 элементов (палiтpа), каждый элемент опiсывает цвет: YB> record YB> case LongInt of YB> 0: b,g,r,align:byte; YB> 1: longw:longint; YB> end; YB> пользователь задает r,g,b компоненты цвета, iз данного массiва находiтся YB> наiболее блiжнiй цвет i возвpачается его iндекс. YB> каков будет алгоpiтм? YB> пpобовал такой алгоpiтм, котоpый сpабатывает не всегда, не соблюдается YB> соотношенiе цветовых составляючiх (т.е. вместо кpасноватого оттенка YB> выбipается сiневатый i т.д.): YB> pattern:longint; // aling,r,g,b для поiска, запакованные в dword YB> newmatch,lastmatch:longint; YB> lastcolor:byte; YB> lastcolor:=0; YB> lastmatch:=$0FFFFFFF; YB> for n:=0 to 255 do YB> begin YB> newmatch:=abs(pal[n].longw-pattern); YB> if newmatch<lastmatch then begin lastmatch:=newmatch;lastcolor:=n;end; YB> end; В общем случае минимизировать надо функцию Kr*(R'-R)^N + Kg*(G'-G)^N + Kb*(B'-B)^N Обычно принимают, что Kr = 0.3, Kg = 0.59, Kb = 0.11, N = 1, но можно выбрать и свои. Твоя формула также подпадает под это определение, только коэффициенты очень неудачно подобраны: Kb = 1, Kg = 256, Kr = 65536, в результате чего подбирается цвет максимально близкий по интенсивности красного, а остальными составляющими по существу пренебрегается. До свидания, в 20:30 MSK Sergey --- * Origin: Sergiev Posad (2:5020/1507.400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/52053DA493AE.html, оценка из 5, голосов 10
|