Обнаружение края или триангуляция в этом приложении менее важны. Основная часть заключается в понимании псевдокода в 1:27 видео. Конечный продукт использует одну нитку для наматывания вокруг разных гвоздей особым образом, так что: более темные области исходного изображения имеют меньшую плотность строк, а более яркие области имеют большее количество пересекающихся нитей.
Начальная подготовка к:
- сгенерировать версию изображения с краем (A)
- создать размытую версию изображения (B)
Тогда первым шагом будет создание случайных позиций для ногтей. По-видимому, для достижения хорошего результата, если случайно сгенерированный гвоздь находится достаточно близко к «краю» черно-белого изображения, вы должны «привязать» его к краю, чтобы позже обернуть струны вокруг этих краевых гвоздей точная граница, как на оригинальной картинке. Здесь вы используете изображение А), чтобы отрегулировать ваши ногти. Например, просто выполните некоторую потенциальную минимизацию:
Добавьте небольшое случайное изменение положения к ногтям. Если гвоздь сейчас получает
достаточно близко к белой точке (краю) на изображении А), непосредственно измените на
эта позиция.
Рассчитать потенциал. Убедитесь, что ваша потенциальная функция
наказывает два очка, которые слишком близки. Повторите 1) 100 раз
выберите один с самым низким потенциалом.
Повторение 1) и 2) 20 раз
Затем вы решаете, как вы хотите, чтобы струны обвивали ногти.
- Начиная с точки A, посмотрите на некоторые соседние точки (в пределах определенного радиуса) B1, B2, B3 и т. Д. Представьте, что если вы прикрепите строку определенной ширины от A до Bi, она визуально изменит ваше строковое изображение P в легкий путь Рендеринг сегмента линии A-B1 на P для получения P1, рендеринга A-B2 на P для получения P2 и т. Д.
- Найдите лучшую Би, чтобы новое изображение Пи выглядело ближе к оригиналу. Вы можете просто сделать попиксельное сравнение между строковым изображением и исходным изображением и использовать это измерение для оценки каждого Bi. Автор видео использовал размытое изображение B), чтобы избавиться от текстур, которые могут случайно повлиять на его алгоритм подсчета очков.
- Теперь оптимальный Bi становится новым A. Найдите его соседей и зацикливайтесь. Алгоритм может остановиться, если добавление каких-либо новых строк только отрицательно влияет на оценку.
В некоторых случаях яркие области на фотографии широко разделены, поэтому любые белые линии, пересекающие темный промежуток, только уменьшают оценку. Используйте свое суждение, чтобы настроить алгоритм, чтобы обойти эти невыпуклые сценарии.