LINUX.ORG.RU

Пиксель-арт из фотографии

 


2

1

Имеется фотография. Например, такая: https://pxhere.com/en/photo/348762 Требуется уменьшить её до 320х200 пикселей, так, чтобы она не превратилась в груду пикселей или мешанину цветных пятен. То есть с потерей большей части мелких деталей и с большими однотонными областями. Чтобы итоговая картинка была похожа на https://pic4a.ru/811/Ngi.png или https://pic4a.ru/811/9kr.png А не как в https://pikabu.ru/story/pikselnaya_grafika_v_fotografii_5356446

Кто-нибудь может посоветовать годные руководства?

Результаты применения 8Bit Photo Lab после повышения HSV Saturation:
https://raw.githubusercontent.com/tkzv/looters/master/cutscenes/dump-1.png
https://raw.githubusercontent.com/tkzv/looters/master/cutscenes/dump-2.png
https://raw.githubusercontent.com/tkzv/looters/master/cutscenes/dump-3.png
https://raw.githubusercontent.com/tkzv/looters/master/cutscenes/empty-hangar.png

★★★★★

Ответ на: комментарий от dk-

Цветность, как раз, сокращал. До 8 или 12 цветов.

Под «цветностью» я имел в виду насыщенность цветов.

Там в меню «экспор для веба» было (в шопе. гимпа нет. но гимп 100% это умеет)

Веб-палитра в Гимпе 216 цветов. В Фотошопе, когда я им пользовался последний раз, было на выбор 16 и что-то большее. (Могу путать с Ulead.)

question4 ★★★★★ ()
Ответ на: комментарий от atsym

Is there any way to programmatically turn any image into pixel art? - https://www.quora.com/Is-there-any-way-to-programmatically-turn-any-image-int...

A: I've been a pixel artist for almost 20 years, and my answer is no.

Судя по характеристике, человек ничего не знает о нейросетях, но берётся судить :) Хотя в ручной обработке он разбирается.

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

GrafX2 — FOSS pixelart editor

Пробовал. После Гимпа — как на Атари вернулся :)

question4 ★★★★★ ()
Ответ на: комментарий от atsym

Есть програмка Pixelator (free for personal use)

Уже скачал, спасибо. Всё забываю на работе антивирусом проверить. Вспомню — запущу, попробую.

question4 ★★★★★ ()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

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

Richard Fhager ('DawnBringer') — это тот, кто тебе нужен!
>>> http://pixeljoint.com/p/23821.htm

atsym ★★★★★ ()
Последнее исправление: atsym (всего исправлений: 2)
Ответ на: комментарий от AP

Не связанный с обсуждаемой темой вопрос. Разбиение цветов на кластеры через к-средние использует координаты пикселей? Если да, можно ли это отключить? И по какой формуле сравнивает цвета?

question4 ★★★★★ ()
Ответ на: комментарий от AP

https://en.wikipedia.org/wiki/K-means_clustering

Это я нашёл, и реализацию в scipy нашёл, и ещё несколько штук. Я спрашивал про особенности реализации в GEGL. В каком пространстве цветов меряет расстояния, учитывает ли координаты пикселей, можно ли это менять...

question4 ★★★★★ ()
Ответ на: комментарий от question4

Расстояние — сумма квадратов разностей строго 3 компонент типа gfloat. То есть, только цвета. Никаких ограничений, что там хранить, нет. Дальнейшие вопросы требуют глубже знать принципы работы с GEGL.

question4 ★★★★★ ()
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от question4

Попробовал питоновскую реализацию:

def yccs(a):
  return np.dot( матрица 3х3, a )

def dist2(p, q):
  if (p==q).all():
    return 1000000
  else:
    return np.linalg.norm(p-q)

jan = np.asarray( PIL.Image.open('....png') )
lngth = jan.shape[0]*jan.shape[1]
sorted1, index1, counts1 = np.unique( np.reshape( jan, (lngth, 3) ), axis=0, return_index=True, return_counts=True )
ycca1 = np.array([ yccs(e) for e in sorted1 ])
for clustersTotal in range(4, 257):
  res1y, res1yd = kmeans( ycca1, clustersTotal, check_finite=False )
  distanceMatrix = [[ dist2(p,q) for q in res1y] for p in res1y]
  np.save(distanceMatrix, ...)
  print( clustersTotal, np.amin( distanceMatrix ) )

Неожиданный результат: результаты прогонов отличаются процентов на 5. А как получить стабильный результат?

question4 ★★★★★ ()
Ответ на: комментарий от Deleted

Есть же фоторесайз.

В смысле? Ресайзить можно кучей инструментов. Но проблема не в этом.

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

question4 ★★★★★ ()