вторник, 10 декабря 2024 г.

k-means и pixel-art

 У меня на практике давно встала нехитрая задача перевода картинки в ограниченное количество цветов, по сути — пиксель-арт на минималках. Нужно это в нескольких случаях:

  • Изображение сильно большое и тратить время пиксель-артиста — очень дорого, да и мало кто возьмётся.
  • На изображении немного чётких деталей, так что тратить на него ценное время художника не стоит.
Довольно долго я использовал ручной скриптик на питоне, который считал статистику пикселей, их цветов, пытался как-то через евклидову норму их группировать, но результаты частенько не устраивали — важные цвета терялись, а неважные иногда считались важными.
Попробовал подумать глубже в тему и пришёл к выводу, что технически это... задача кластеризации же! У нас  известно количество кластеров, под которыми подразумеваются результирующие цвета, и нам надо по ним разложить исходные.
Чтобы протестировать эту идею, я взял условный k-means из scikit (sklearn) Питона и попробовал сделать через него — т. е. пиксель по умолчанию имеет тот цвет, что и центр кластера, в который попадает. Но здесь я немного сделал пару хаков - во-первых, цвета взял в HSV, чтобы не кластеризовать условные красные, зелёные и синие цвета, а скорее исходить из оттенка, а во-вторых, добавил мультипликаторы для исходных значений, которые должны давать потенциальное улучшение результата.
Чтобы подизерить результат через евклидово расстояние ищется ближайший подходящий кластер, в который не входит текущий пиксель, оцениваются расстояния до текущего центра и второго и вычисляется вероятность того, что будет браться другой цвет. Это создаёт неплохой эффект, но не идеальный — потому что рандомный дизеринг сам по себе не очень.
В целом результатом доволен, хотя явно можно лучше. В будущем планирую попробовать другие алгоритмы кластеризации, ну и как-то стоит анализировать и само изображение для более хорошего дизеринга.

В заключение небольшой пример:

Исходное изображение

Результат (32 базовых цвета, альфа сохранена, т.к. важное)

Не идеально, но в принципе ок.




пятница, 29 ноября 2024 г.

Про ожидания, опенсурс и планирование.

 Вообще, я уже давно столкнулся с проблемой, которую трудно охарактеризовать. Она заключается в том, что, читая ченджлоги блендеров, редакторов кода и прочего возникает ощущение, что проблем в "обычном" прикладном софте не осталось - всё легко, покрыто туториалами. Бери туториал и пользуйся. И есть ощущение, что мелкие проекты часто сносно можно планировать - даже с учётом обновлений: разобрался раз, потом уже будет быстрее и проблем не будет.

четверг, 28 ноября 2024 г.

Прикладное программирование в 2024 на C++... На TURBO C++!

    Неожиданно набрёл на забавное - книгу "Прикладное программирование на C/C++"

    По названию, кажется, что вот оно - предлагается изучить работу со звуком, изображением и сетями на C++. Ну думается, бомба, сейчас нам покажут что юзать для норм обработки звука, сборки серверов, в общем надо брать.

    А нет, ни разу. Оказалось что это переиздание какой-то очень древней книги, где предлагается кодить на TURBO C++ (MS-DOS, ееее) и верх работы с вышеуказанным - это работа с WinAPI.

    В общем, если надо современный C++ с серьёзной работой с сетью, изображениями и прочим, не рекомендую. Но, если вдруг решите поностальгировать, как там жилось в прошлом, как надо было кодить году максимум в 2005 - однозначно, 10 из 10, одни скриншоты с Windows 98 чего стоят. Ну и на букинистический экспонат это точно годится.

Blender Transparent Film + Bloom

    Недавно перешёл на более новый (4.2) Blender, потому что в старом почему-то нормально не работала анимация. Обнаружил неприятное.

воскресенье, 27 октября 2024 г.

Давайте уже в январе

Я что-то давно ничего не постил и тому было много причин. 

В первую очередь, я в сентябре надолго уехал на отдых и не жалею. Оказалось, что мне этого реально не хватало и я замечательно отдохнул, несмотря на то, что умудрился в это время приболеть. Но санаторий - это просто тема, я по минимуму сидел за компом, в наглую игнорируя всякие местные новости и проблемы, и это сильно помогло. Из-за этого, пожалуй, должен отметить, что, судя по всему, до этого я отдыхал как-то НЕ ТАК. В связи с этим, придётся всё же пересмотреть свой режим - я всё же не молодею, и, судя по всему, кодинг в свободное время придётся сокращать.

Увы, до этого я взял некоторую подработку, и она отняла больше времени чем хотелось, и потребовала ещё потом тщательного рассмотрения. Я, возможно, некоторые моменты по этому распишу позднее, т.к. исследование вышло за рамки обычного ковыряния в коде, а пришлось потрогать всякие стрёмные моменты.

Ещё на меня свалилось маленькое чёрное пушистое счастье, которое сейчас беззаботно дрыхнет где-то за гладильной доской. Собственно, за ней ещё стоит позаботиться, и, частично, это моя забота, хотя Даша и старается.

В результате - пока hrtp-demake я не занимался. Кое-какие наработки по продолжению у меня висят на винте, и я к ним вернусь, но - ничего быстрого пока не будет. Скорее всего, к чему-то более-менее серьёзному по этому проекту я всё же вернусь в январе, т.к. ноябрь - очень мрачный месяц, в который обычно не тянет работать сверх обычного уже никого и меня в том числе. Хотя и не факт, что я вернусь к проекту - у меня нет уверенности в том, что это стоит делать. 

Посты, тем не менее, будут, но, скорее всего, по другим темам. 


среда, 28 августа 2024 г.

Про артбук Cyarin

Дисклеймер: я не художник, поэтому не буду как-то радикально высказываться по поводу артбука. За программирование и двор стреляю в упор, но арт - это другое дело.

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

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

Подкачала скорее верстка. Просто огромное количество белого пространства, полупустых страниц, на которых почти ничего нет. Как по мне, можно было бы существенно урезать формат самой книжки и заодно сделать её более конкретной. А так - вроде бы достаточно толстая книжка просматривается за час.

В общем, мне трудновато ругать этот артбук, но и трудно его порекомендовать. Такое себе. 

вторник, 20 августа 2024 г.

Доклад про оптимизацию на современные CPU

 Рекомендую: один из немногих докладов по плюсам, которые стоит смотреть в этом году.