В современном мире нейронные сети имеют обширную область практического применения. Одной из таких областей является промышленный дизайн. Несмотря на то, что нейронные сети могут справиться со многими различными задачами, часто результаты их работы нуждаются в анализе и дополнительной обработке специалистами прикладной области. Примером дополнительной обработки является преобразование точечных контуров, сгенерированных нейронными сетями, в векторизованный CAD-формат. Как правило, необходимо объединить несколько «одинаковых» контуров, отличающихся шумом порядка размера пикселя. Последовательное объединение двух контуров даёт два контурных витка, которые необходимо преобразовать в один. При этом простейшие алгоритмы поиска ближайших соседей могут пропустить часть точек (рис. 1), поэтому появилась необходимость в разработке алгоритма, упорядочивающего два наложенных контура в один без пропуска точек. В данной работе описывается несколько решений поставленной задачи.
На рис. 1 в крайней справа фигуре синим цветом обозначен исходный двойной контур, красным — одинарный. Здесь поиск ближайшего соседа работает корректно, однако в нижней фигуре, где оранжевым цветом выделен исходный контур, а фиолетовым — одинарный, алгоритм пропускает 5 точек из исходного контура.
В рамках выполнения выпускной квалификационной работы была поставлена задача упорядочивания наложенных контуров, были рассмотрены различные алгоритмы, позволяющие упорядочить точки.
В результате работы было сформулировано несколько алгоритмов, решающих поставленную задачу. На языке Python с использованием пакета Numpy был разработан программный код, реализующий данные алгоритмы. По результатам применения алгоритмов на 21-ом наборе данных была произведена оценка пригодности рассматриваемых алгоритмов по требованиям поставленной задачи. Среди алгоритмов, хорошо справившихся с задачей, был проведён сравнительный анализ, в результате которого был сформулирован лучший алгоритм, показавший отличные результаты при построении одинарного контура.
В связи с отсутствием работ по теме упорядочивания всех исходных данных в виде одинарного контура, данная работа может быть полезна для изучения указанной темы.
[1] Язык программирования Python [Электронный ресурс]:URL:https://python.org/ (дата обращения: 18.05.2021)
[2] Документация Shapely [Электронный ресурс]:URL:https://shapely.readthedocs.io/en/latest/index.html (дата обращения: 18.05.2021)
[3] Библиотека OpenCV [Электронный ресурс]:URL:https://opencv.org/(дата обращения: 18.05.2021)
[4] Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К. Алгоритмы: построение и анализ. М.: Вильямс, 2013. 1328 с.
[5] Follett B., Torrence E. The Student’s Introduction to Mathematica// Cambridge University Press. 1999.
[6] Левитин А. В. Алгоритмы. Введение в разработку и анализ. М.: Вильямс, 2006. 576 с.
[7] Gutin G., Yeo A., Zverovich A. Traveling salesman should not be greedy: domination analysis of greedy-type heuristics for the TSP // Discrete Applied Mathematics. 2002. No 117. P. 81-86.
[8] Croes G. A. A Method for Solving Traveling-Salesman Problems// Operations Research. 1958. Vol 6. No 6. P. 791-812.
[9] Шикин А. В., Боресков А. В. Компьютерная графика. Полигональные модели. М.: ДИАЛОГ-МИФИ, 2001. 464 с.
[10] Программный код [Электронный ресурс]:URL:https://github.com/erveve/sequence_contour (дата обращения: 31.05.2021)
[11] Библиотека Numpy [Электронный ресурс]:URL:https://numpy.org/(дата обращения: 18.05.2021)
[12] Библиотека Matplotlib [Электронный ресурс]:URL:https://matplotlib.org/ (дата обращения: 18.05.2021)
[13] Gmsh [Электронный ресурс]:URL:http://gmsh.info (дата обращения:
31.05.2021)