Как лучше всего сгладить шумовой фильтр изображения? - PullRequest
0 голосов
/ 31 марта 2019

Я сейчас пытаюсь воссоздать акварельный эффект Instagram в Unity.

Instagram: https://i.imgur.com/aMyEhjS.jpg

Мой подход: https://i.imgur.com/9zIOQ7k.jpg

Мой подход довольно шумный. Это основной код, который создает эффект:

float3 stepColor(float3 col){
     const float3 lumvals = float3(0.5,0.7,1.0);

    float3 hsv = rgb2hsv(col);
    if(hsv.z <= 0.33){
        hsv.z = lumvals.x;
    }
    else if(hsv.z <= 0.55){
        hsv.z = lumvals.y;
    }
    else{
        hsv.z = lumvals.z;
    }
    return hsv2rgb(hsv);
} 

Какой алгоритм будет здесь подходящим для шумоподавления и сглаживания конечного результата по мере того, как его достигает Instagram?

1 Ответ

1 голос
/ 01 апреля 2019

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

Вот пример кода Java: https://imagej.nih.gov/ij/plugins/mean-shift.html

Вот документ, который описывает эффект акварели и егокомпоненты (включая затемнение краев): http://maverick.inria.fr/Publications/2006/BKTS06/watercolor.pdf

Существует проект github с реализациями CUDA и OpenCL, но если вы действительно хотите понять алгоритм, я бы отсылал вас к этой странице, которая объясняет его довольно аккуратноиспользуя код Python:

http://www.chioka.in/meanshift-algorithm-for-the-rest-of-us-python/

Еще один вариант в моей голове - использовать перекрестный фильтр Собеля / Робертса, чтобы обнаружить все границы на изображении, а затемиспользуйте инверсию этого значения в качестве маски для размытия по Гауссу.Это не даст вам такой же приятный эффект отслоения.

...