Войти
ПрограммированиеФорум2D графика и изометрия

Посоветуйте конвертер Jpeg/PNG в PixelArt, или матем. алгоритм конвертации.. (2 стр)

Страницы: 1 2
#15
16:19, 10 сен. 2018

joub

спасибо, но не немножко не о том. суть проблемы уменьшения количества цветов (палитры). уж очень много оттенков выходит...

Вводишь минимальное расстояние в цветовом про-ве RGB, которое должно отличать цвета Dmin.
Стандартная метрика в R3: D(x, y) = distance(x, y) = sqrt( (Rx-Ry)^2 + (Gx-Gy)^2 + (Bx-By)^2). Корень можно не считать для экономии.
Или такая: D(x, y) = max{|Rx-Ry|, |Gx-Gy|, |Bx-By|}
Заводим массив цветов палитры пустой.
Проход по картинке, если цветом пикселя не попадает в Dmin окрестность ни одного цвета, что уже есть в палитре, то добавляем его туда.
Если цвет близок к какому-то цвету в палитре (в Dmin окрестности), то перекрашиваем его на этот цвет из палитры.
Так сокращаем кол-во цветов в изображении.

Еще лучший результат был бы, если бы для каждой замены мы записали какой цвет это был.
Потом после прохода нужно будет цвета палитры заменить на средние арифметические всех цветов, которые были на него заменены, включая и сам цвет из палитры.
Таким образом, останутся цвета наиболее похожие на часто встречающиеся.


#16
16:29, 10 сен. 2018

как-то не очень понял... а можно примерчик простенький?

#17
17:28, 10 сен. 2018

joub

можно примерчик простенький?

Массив палитра — заводим в начале алгоритма в нем N элементов. Это максимум цветов, который ты хочешь иметь.
Dmin — устанавливаем какой-то. Подберешь удобный экспериментально.

цикл по пикселям картинки
  текущий пиксель x = (Rx, Gx, Bx)  //  это его цвет в системе RGB
{
    цикл по непустым элементам палитры
        текущий элемент y = (Ry, Gy, By)  //  это его цвет в системе RGB
    {
        если (D(x, y) <= Dmin) то      //  D(x, y) взять из формулы в моем предыдущем посте
            x в рисунке меняем на y;
        иначе
            добавляем x в палитру;
    };
};

Если есть желаемая палитра, составленная заранее,
то можно ее взять уже полностью заполненную и Dmin подобрать такой, чтобы "иначе" не случалось.

Страницы: 1 2
ПрограммированиеФорум2D графика и изометрия

Тема в архиве.