Создание строкового искусства из изображения - PullRequest
4 голосов
/ 05 мая 2019

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

https://youtu.be/RSRNZaq30W0?t=56

enter image description here

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

Я посмотрел пример кода для OpenCV и выяснил, как выполнить базовое обнаружение краев.Как мне тогда преобразовать их в баллы?А затем, какой алгоритм мне понадобится, чтобы «заполнить» различные градиенты?

Я даже не знаю, является ли это правильным подходом для достижения этой цели.Может ли кто-нибудь указать мне правильное направление и, возможно, дать мне пример кода, чтобы начать?Я был бы очень признателен.

1 Ответ

0 голосов
/ 11 мая 2019

Обнаружение края или триангуляция в этом приложении менее важны. Основная часть заключается в понимании псевдокода в 1:27 видео. Конечный продукт использует одну нитку для наматывания вокруг разных гвоздей особым образом, так что: более темные области исходного изображения имеют меньшую плотность строк, а более яркие области имеют большее количество пересекающихся нитей.

Начальная подготовка к:

  • сгенерировать версию изображения с краем (A)
  • создать размытую версию изображения (B)

Тогда первым шагом будет создание случайных позиций для ногтей. По-видимому, для достижения хорошего результата, если случайно сгенерированный гвоздь находится достаточно близко к «краю» черно-белого изображения, вы должны «привязать» его к краю, чтобы позже обернуть струны вокруг этих краевых гвоздей точная граница, как на оригинальной картинке. Здесь вы используете изображение А), чтобы отрегулировать ваши ногти. Например, просто выполните некоторую потенциальную минимизацию:

  1. Добавьте небольшое случайное изменение положения к ногтям. Если гвоздь сейчас получает достаточно близко к белой точке (краю) на изображении А), непосредственно измените на эта позиция.

  2. Рассчитать потенциал. Убедитесь, что ваша потенциальная функция наказывает два очка, которые слишком близки. Повторите 1) 100 раз выберите один с самым низким потенциалом.

  3. Повторение 1) и 2) 20 раз

Затем вы решаете, как вы хотите, чтобы струны обвивали ногти.

  • Начиная с точки A, посмотрите на некоторые соседние точки (в пределах определенного радиуса) B1, B2, B3 и т. Д. Представьте, что если вы прикрепите строку определенной ширины от A до Bi, она визуально изменит ваше строковое изображение P в легкий путь Рендеринг сегмента линии A-B1 на P для получения P1, рендеринга A-B2 на P для получения P2 и т. Д.
  • Найдите лучшую Би, чтобы новое изображение Пи выглядело ближе к оригиналу. Вы можете просто сделать попиксельное сравнение между строковым изображением и исходным изображением и использовать это измерение для оценки каждого Bi. Автор видео использовал размытое изображение B), чтобы избавиться от текстур, которые могут случайно повлиять на его алгоритм подсчета очков.
  • Теперь оптимальный Bi становится новым A. Найдите его соседей и зацикливайтесь. Алгоритм может остановиться, если добавление каких-либо новых строк только отрицательно влияет на оценку.

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

...