Как мультяшное изображение программно?

Мое приложение работает с фотографиями и видеороликами людей, которые я хочу мультфильм. Поэтому мне нужен алгоритм для этого вручную (мы используем c ++ / Qt для нашего продукта, который имеет classы манипуляции с изображениями) или, возможно, какую-то программу CLI, которая сделает это для меня, что я могу позвонить и использовать из нашего собственного приложения.

    Вот несколько алгоритмов для игры:

    • Медиана или повторный фильтр размытия коробки, чтобы получить мультяшную цветовую палитру
      • Изменить: Двусторонняя фильтрация должна лучше соответствовать вашим потребностям
    • Минимальный фильтр (нулевой процент) для улучшения некоторых типов ребер
    • Сегментация цветного изображения с использованием либо малого субкуба или сферы в цветовом кубе RGB
    • Улучшение общего края на сегментированном изображении с использованием обнаружения края, такого как ядра Sobel или 8-сторонняя трассировка края
    • Композитное изображение с размытым / срединным фильтром с расширенными краями

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

    Дополнительные изменения:

    Как только вы поймете идею алгоритма Хуанга, реализация фильтра размытия ящика – восхитительный кусок пирога.

    Материал для чтения:

    • Быстрая медианная и двусторонняя фильтрация (получить PDF)
    • Медиана Фильтрация Постоянное время (получить PDF) Примечание: У меня есть реализация этого в C # с использованием Mono / SIMD для ускорения слияния гистограмм, однако это кажется лучше, чем алгоритм O ( r ), когда диаметр превышает ~ 60 пикселей из-за сопоставимое количество инструкций add / sub (точка безубыточности), реализация C ++, вероятно, намного лучше подходит для использования SIMD.

    Другие материалы для чтения include в себя обработку цифровых изображений Gonzalez & Woods (как представляется, более старое издание) для сегментации и краевой трассировки. 8-сторонняя трассировка края может быть очень сложной, чтобы наклонить голову (выбор между пикселями в пикселях или между пикселями и как защелкиваться на краях). Я был бы рад поделиться каким-то кодом, но сто-лайнеры здесь не подходят ровно.

    Вы можете попробовать ротоскопию, например, toonyphotos.com :

    Пример ротоскопии

    Возможно, вы захотите проверить Freestyle , проект с открытым исходным кодом (Google Summer of Code, even) для реализации нефотореалистического рендеринга для Blender . Вот пример его вывода в мультяшном режиме: alt text http://freestyle.sourceforge.net/GALLERY/CARTOON/girl-color-and-lines-crop.jpg

    Если есть некоторый набор параметров, которые достигают желаемого эффекта в фильтре мультфильма GIMP (или какой-либо другой комбинации фильтров), его можно запустить в режиме пакетной обработки .

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

    1. Обнаружите края и нарисуйте довольно плотную линию (несколько пикселей) на этих краях.

    2. Уменьшите количество цветов в изображении.

    Не уверен, что это поможет, но этот учебник для Photoshop предлагает сделать следующее:

    1. Откройте изображение в Photoshop
    2. Фильтр> Размытие> Размытие по Гауссу. Установите радиус 3,0 или выше, чтобы по вкусу.
    3. Правка> Отклонить гауссовское размытие. Появится окно. , , установите режим затемнения. Вам также может потребоваться уменьшить непрозрачность.

    Вот результат.

    введите описание изображения здесь

    Я предполагаю, что вы могли бы сделать что-то подобное в своей программе.

    на самом деле я не знаю инструмент, но вы можете посмотреть на osg (openSceneGraph)

    есть библиотека osgFX, и есть мультяшный эффект … возможно, вы можете вдохновить эту библиотеку …


    возможно (я не знаю), у imagemagick есть много возможностей, возможно, у него есть такая функция, но я не знаю …

    Это относительно легко сделать. Вот шаги:

    • двусторонняя фильтрация для упрощения / абстракции фотографии. Вы можете отделить двусторонний фильтр так, чтобы он был быстрее. Выполните двусторонний фильтр в 1d вдоль gradleиента, а затем вдоль нормали к gradleиенту.

    • обнаружить края. Например, используя разницу гауссова алго. Вы можете использовать DoG в направлении gradleиента и сгладить его по линиям streamа. Чтобы получить линии streamа, вам нужно будет получить пограничный stream (ETF), который вы можете получить через тензор структуры.

    • квантовать цвета. Фактически, вы квантовали яркость, чтобы имитировать затенение cel aka toon shading.

    • смешать абстрагированное квантование afer изображения и обнаруженные вами края.

    Это даст вам визуализированное изображение, похожее на затушеванный мультфильм cel.

    Я сделал некоторое бесплатное программное обеспечение (для win64), которое делает именно это по адресу: http://3dstereophoto.blogspot.com/p/painting-software.html

    Название программного обеспечения «The Cartoonist», и вы можете увидеть его в действии здесь: http://3dstereophoto.blogspot.com/2018/07/non-photorealistic-rendering-software_9.html

    Это ссылки на мой блог, который в основном касается 3d-фотографии (карты глубины, фотограмметрия и т. Д.).

    Давайте будем гением компьютера.