G
G
gelerum2022-02-14 10:10:35
Machine learning
gelerum, 2022-02-14 10:10:35

How to implement a network for generating a geometric image from a sketch?

To make it work like this, we
6209fe463dadd800797545.jpeg
divide it into tasks:

  1. Divide the input image into parts (part 1 with a blue circle, part 2 with a yellow circle)
  2. Determine the location of each part in the image
  3. Determine the type of figure in each part
  4. Define the color of the background, shape fill, shape stroke

Well, then the written generator collects data from the neurons into the final picture
. Do I understand correctly that I need to create several neurons for each task? Perhaps such a system can be created differently, without 4 separate networks?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
F
freeExec, 2022-02-14
@freeExec

Googled GAN, and although there are technically two networks, you can perceive it as one neuron, because they train together. And in general, there are no preliminary divisions into figures, colors, etc.

V
Vindicar, 2022-02-14
@Vindicar

Neural networks will not help you if you do not know how to extract the original information from the image. And besides, where can you find several tens/hundreds of thousands of images for network training? Neuronki - this is not magic, to vzhuh and it's on its own. -_-
I would try to find all the pixel colors that occur and cluster them, but the matter is complicated by the fact that the number of colors used is not known in advance. After that, it will be possible to select each blackness separately by comparing the color of the pixel with the center of a particular cluster, and then separating individual fragments through the search for connected components .
Next, you can take this algorithm as a basis .

or a little differently

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question