• Как реализовать сеть по генерации геометрического изображения из скетча?

    Vindicar
    @Vindicar
    RTFM!
    Нейронные сети тебе не помогут, если ты не знаешь, как извлечь исходную информацию из изображения. Да и потом, где ты найдешь несколько десятков/сотен тысяч изображений для обучения сети? Нейронки - это не магия, чтобы вжух и оно само. -_-

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

    Для каждого фрагмента определи описывающий выпуклый многоугольник, чтобы избежать мути с неровной штриховкой внутри.
    Затем переведи этот многоугольник в полярные координаты. Для этого найди центр масс этого многоугольника. Потом из этой точки пускаешь наружу лучи, по кругу, с некоторым шагом (скажем 1 градус), и считаешь расстояние от центра масс до точки пересечения луча с многоугольником. Ты получишь своего рода профиль фигуры, зависимость расстояния от центра фигуры от направления, в котором мы смотрим.
    Этот профиль можно сравнить с профилями заранее известных фигур - треугольников, прямоугольников, эллипсов - чтобы понять, на что фрагмент походит больше всего.
    Чтобы сравнение было проще, стоит сделать так. Сдвинь многоугольник так, чтобы центр масс попал в (0;0). Найди вершину многугольника, которая наиболее удалена от центра. Поверни многоугольник так, чтобы она смотрела, скажем, под уголом 45 градусов (вверх и вправо). Запомни этот угол поворота.
    Потом сожми многоугольник так, чтобы он вписывался в квадрат 1 х 1 единицу. Так как ты работаешь с координатами вершин, а не с пикселями, это не проблема. Запомни, насколько ты сжал многоугольник.
    Теперь, когда ориентация, размер и отношение сторон фрагмента известны, можно сравнивать его с заранее подготовленными профилями фигур - квадратом, кругом, разными треугольниками. Например, находишь разность между значением профиля фигуры и значением профиля фрагмента для этого же направления. Суммируешь эти разности по модулю. Чем меньше сумма - тем более профиль похож.
    Определив наиболее похожую фигуру, растягиваешь её так же, как сжимал многоугольник. Потом поворачиваешь назад на столько же, на сколько повернул многоугольник. Потом смещаешь, чтобы центр фигуры попал на центр масс. Если всё сделано правильно, фигура ляжет "поверх" фрагмента рисовки. Осталось только её обвести тем же цветом.
    С заливкой и перекрытиями будет сложнее, но их можно добавить, оттолкнувшись от этого алгоритма.
    Ответ написан
    Комментировать
  • Как заработать школьнику на программировании?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Делай школьные задания по информатике/программированию за деньги.
    Ответ написан
    1 комментарий
  • Как увеличить размер пиксель арта без смазывания краев?

    ScriptKiddo
    @ScriptKiddo
    from PIL import Image
    
    im = Image.open("source.png").convert('RGBA')
    im = im.resize((100, 100), resample=Image.NEAREST)
    im.save("result.png")


    https://stackoverflow.com/a/53172086

    source.png
    618a43110d0a4552527414.png

    result.png
    618a43224613b243004401.png
    Ответ написан
    1 комментарий