|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Victor Anikeev 2:5043/3.88 04 Aug 2003 14:12:42 To : Mykola Kovalchuk Subject : Уменьшить количество цветов в изобpажение -------------------------------------------------------------------------------- 01 Aug 03 07:24, Mykola Kovalchuk -> All: MK> Подскажите подход к такой задаче: MK> Есть каpтинка с N1 цветами. MK> Hужно поставить в соответствие этим N1 цветам N2 новых, заpанее MK> неизвестных цветов, но N2 известно и N2<N1. Цвета в N2 можно бpать из MK> N1 или создавать новые как усpедненные занчения (что я считаю лучшим MK> ваpиантом). Естественно качесво каpтинки пpи этом должно остаться по MK> возможности лучшим. В лоб: 1. Считаешь в исходном изображении сколько раз встречается каждый цвет, сортируешь, выбираешь первые N2. Остальные цвета заменяешь из выбранных стандартными методами (например по минимальному "расстоянию" в трехмерном "цветовом пространстве"). Если различных цветов в исходной картинке много больше N2, то перед выборкой можно пройтись по всему списку и убрать очень похожие цвета ("расстояние" между которыми очень маленькое). 2. Если разрешение достаточно большое, то можно сделать простейший дизеринг. Пример: пусть N2 = 256. (обычный 8bit режим) Сделать палитру: for i := 0 to 63 do begin SetRGBColor(i, i, 0, 0); // градации синено SetRGBColor(i+64, 0, i, 0); // градации красного SetRGBColor(i+128, 0, 0, i); // градации зеленого SetRGBColor(i+192, i, i, i); // градации белого Затем вместо каждого пиксела исходного изображения ставишь матрицу пикселей 2 на 2. Hапример исходный цвет RGB(55,10,60) (получено делением на четыре всех компонент из исходного цвета). перейдет в матрицу | 55 64+10 | |128+60 192+wh | WH подберешь самостоятельно - это дополнительный белый цвет, предназначенный для того чтобы сохранить яркость пиксела - потому что из-за черного фона картинка с черным пикселом в углу будет горазде темнее оригинала. Конечно, картинка станет в четыре раза больше. Вместо этого можно устреднять в исходном изображении матрицы пикселей 2 на 2. К размышлению: В первом методе можно использовать следующую информацию: зеленый цвет гораздо лучше воспринимается глазом, чем синии. Красный между ними. Пример: Есть три цвета: 1. (5,10,5) встречается 100 раз 2. (5,11,5) встречается 101 раз 3. (5,5,10) встречается 100 раз 4. (5,5,11) встречается 101 раз Hужно сделать три цвета - убрать лучше третий чем первый. Третий заменять четвертым. Было не очень страшно. Пока. *Victor* [Сейчас пьется: Martini Bianco со льдом] ... [.asm.cpp.pas.] [q3.level.design] [demo.making] [i.girls] --- [mgl@pisem.net] [mglmap.narod.ru] [icq91208291] * Origin: Южно-Сахалинск, Россия (2:5043/3.88) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/28423f2e6f6b.html, оценка из 5, голосов 10
|