Мое приложение работает с фотографиями и видеороликами людей, которые я хочу мульмонизировать. Поэтому мне нужен алгоритм для этого вручную (мы используем С++/Qt для нашего продукта, который имеет классы манипуляции с изображениями) или, возможно, какую-то программу CLI, которая сделает это для меня, что я могу позвонить и использовать из нашего собственного приложения.
Как мультяшное изображение программно?
Ответ 1
Вот некоторые алгоритмы для игры с:
- Медиана или повторяющийся фильтр размытия ящика, чтобы получить мультяшную цветовую палитру
- Изменить: Двусторонняя фильтрация должна лучше соответствовать вашим потребностям
- Минимальный фильтр (нулевой процентиль) для улучшения некоторых типов ребер.
- Сегментация цветного изображения с использованием либо малого субкуба или сферы в цветовом кубе RGB
- Улучшение общего края на сегментированном изображении с использованием обнаружения края, такого как ядра Sobel или трассировка с 8-сторонней границей
- Композитное изображение с размытым/срединным фильтром с расширенными ребрами
Это довольно простые и очень простые в реализации. Имейте в виду, что срединные и размытые фильтры могут быть реализованы с линейной временной сложностью w.r.t. радиус ядра.
Дополнительные изменения:
Как только вы получите идею алгоритма Хуанга, реализация фильтра размытия ящика - восхитительный кусок пирога.
Материал для чтения:
- Быстрая медианная и двусторонняя фильтрация (получите PDF)
- Медиана Фильтрация Постоянное время (получить PDF) Примечание: У меня есть реализация этого в С# с использованием Mono/SIMD для ускорения слияния гистограмм, однако он кажется лучше, чем алгоритм O (r), когда диаметр превышает ~ 60 пикселей из-за сопоставимого количества добавочных/вспомогательных инструкций (точка безубыточности), реализация С++, вероятно, намного лучше подходит для использования SIMD.
Другие материалы для чтения включают в себя Обработка изображений в формате Gonzalez и Woods (похоже, это более старое издание) для сегментации и трассировки границ. 8-сторонняя трассировка края может быть очень сложной, чтобы наклонить голову (выбор между пикселями в пикселях или между пикселями и как защелкиваться на краях). Я был бы рад поделиться каким-то кодом, но сто-лайнеры здесь не подходят ровно.
Ответ 2
Вы можете попробовать ротоскопию, например toonyphotos.com:
Ответ 3
Возможно, вы захотите проверить Freestyle, проект с открытым исходным кодом (даже Google Summer of Code, даже) для реализации нефотореалистичного рендера для Blender. Вот пример его вывода, в мультипликационном режиме:
(источник: sourceforge.net)
Ответ 4
Если есть набор параметров, которые достигают желаемого эффекта в GIMP Фильтр мультфильмов (или какая-либо другая комбинация фильтров), он может быть запущен в режиме пакетной обработки.
Ответ 5
Я не делал этого сам, но думал о двух шагах, которые могли бы придать изображению мультяшный вид.
-
Обнаружение ребер и наложение на них довольно довольно толстой линии (несколько пикселей).
-
Уменьшите количество цветов на вашем изображении.
Ответ 6
Не уверен, что это поможет, но этот учебник для Photoshop предлагает сделать следующее:
- Откройте изображение в Photoshop
- Фильтp > Размытие > Размытие по Гауссу. Задайте радиус 3,0 или выше, чтобы попробовать.
- Изменить > Отклонить гауссовское размытие. Появится окно., установите режим затемнения. Вам также может потребоваться уменьшить непрозрачность.
Вот результат.
Я предполагаю, что вы могли бы сделать что-то подобное в своей программе.
Ответ 7
Это относительно легко сделать. Вот шаги:
-
двусторонняя фильтрация для упрощения/абстрагирования фотографии. Вы можете отделить двусторонний фильтр, чтобы он работал быстрее. Выполните двусторонний фильтр в 1d вдоль градиента и затем по нормали к градиенту.
-
обнаружить края. Например, используя дифференциал гауссовского алгоритма. Вы можете использовать DoG в направлении градиента и сгладить его по линиям потока. Чтобы получить линии потока, вам нужно получить Edge Tangent Flow (ETF), который вы можете получить через тензор структуры.
-
квантовать цвета. На самом деле, вы квантуете яркость, чтобы имитировать затенение cel или toon shading.
-
смешайте абстрактное изображение после квантования и края, которые вы обнаружили.
Это даст вам визуализированное изображение, которое выглядит как затененный мультфильм.
Я сделал несколько бесплатных программ (для win64), которые делают именно это по адресу: http://3dstereophoto.blogspot.com/p/painting-software.html
Название программного обеспечения "The Cartoonist", и вы можете увидеть его в действии здесь: http://3dstereophoto.blogspot.com/2018/07/non-photorealistic-rendering-software_9.html
Это ссылки на мой блог, который в основном посвящен трехмерной фотографии (карты глубины, фотограмметрия и т.д.).
Ответ 8
На самом деле я не знаю инструмент, но вы можете посмотреть на osg (openSceneGraph)
есть библиотека osgFX, и есть мультяшный эффект... возможно, вы можете вдохновить эту библиотеку...
возможно (я не знаю) imagemagick имеет много функций, возможно, у него есть такая функция, но я не знаю...