Такая задачка.
Есть два цвета принятые как основные. Палитра 8bpp (rrrgggbb).
Нужно привести (приравнять) третий цвет к одному из основных цветов, который больше всего подходит.
Может кто подскажет алгоритм или направление куда рыть?
Такая задачка.
Есть два цвета принятые как основные. Палитра 8bpp (rrrgggbb).
Нужно привести (приравнять) третий цвет к одному из основных цветов, который больше всего подходит.
Может кто подскажет алгоритм или направление куда рыть?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
как вариант -покурить сырки bmp2scr или другого продвинутого конвертера. или, как вариант, почитать про квантизацию цветов например.
Ответ найден (но ещё не тестировал). Поиск ближайшего цвета в палитре.
Этот алгоритм Вам может понадобиться когда например нужно перекодировать картинку с одной палитры на другую. Для решения рассмотрим более простую задачу - нужно найти в некоторой палитре из 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); }
...отображаемым на устройстве древнего стандарта NTSC. Для других стандартов другие пр0центы:
http://www.brucelindbloom.com/index....YZ_Matrix.html (в матрицах смотреть на вторую строку)
Прихожу без разрешения, сею смерть и разрушение...
Lethargeek, И что лучше взять для Профи 5.06, палитра 16 из 256 (rrrgggbb) с выводом на жк монитор?
Я не спец по графике, можно для таких ткнуть пальцем? Была бы одна матрица, а там целый веер.
Последний раз редактировалось tae1980; 22.01.2019 в 00:46.
tae1980, лучше - знать, на какой стандарт рассчитывал автор пикчи
да не парься, просто напиши конвертер с выводом кучи вариантов всех сразу
просматривай потом результаты и выбирай каждый раз один на свой вкус
Прихожу без разрешения, сею смерть и разрушение...
В продолжении темы.
В текущей версии конвектора изображения под экран Profi реализованы две схемы выборки цветов для байта:
1. Находим два самых частых цвета, остальные приводим к ним.
2. То же, но если по краям находятся два самых светлых или самых темных цвета, приводом все цвета к ним.
Начитался про квантизацию изображений, но тут не много другая задача. Не вижу возможности применить её здесь. Или я не прав?
Вопрос: можно ли улучшить качество? Будут ли советы, рекомендации?
Вот два примера:
Последний раз редактировалось tae1980; 26.01.2019 в 00:02.
Про дизеринг напомнить?
https://ru.wikipedia.org/wiki/Дизеринг
ПК8010 "Корвет"+ExtRom+AY, Atari 65XE+SDrive, Дельта-С(52ИС)+AY, Scorpion ZS 1024+SMUC
marinovsoft, думал о нем. Но для меня это сложно.
Поступаю так в фотошопе сначала индексирую цвет к 256 в палитре Профи. Потом делаю цвет снова 24 битным. После привожу к 16 цветам. Такая последовательность, так как фотошоп не позволяет привести к 16 цветам если загружена палитра 256 цветов.
если я правильно понимаю, то квантизацию и дизеринг изображения делает при этих манипуляциях фотошоп.
Я же беря подготовленный файл, привожу палитру 24bpp к палитре Профи и объединяю последовательность из 8 точек в байт. Так как у Профи 2 цвета на 8 точек. Для чего нужно выкинуть до 6 цветов, приведя их к двум основным (правила их выбора из 8 возможных описал выше). От сюда и вылазит "размазывание" картинок.
Думаю дизеринг в данной ситуации мог бы помочь "сгладить" изображение. Но вот как его организовать я не пойму.
Последний раз редактировалось tae1980; 23.01.2019 в 17:36.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)