Как устранить ореол на размытом краю? - PullRequest
0 голосов
/ 19 октября 2019

Итак, я работаю над фильтром, который выполняет размытие.

Когда изображение имеет альфа-канал, оно размыто неправильно. Это потому, что он размыт с цветными пикселями, которые лежат на разделах alpha = 0.

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

В правом верхнем изображении я импортирую его с альфа-каналом. Пиксели в секции альфа-канала отображаются черными.

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

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

Blur Halo

Я читал, что это может быть проблемой предварительного умножения. Я предварительно умножил пиксели RGB, которые лежат на секциях alpha = 0, черным цветом, но это все еще неправильно. Когда я комбинирую эту версию, вы можете видеть, что она создает темный ореол вместо яркого.

Кажется, мне нужно знать значения RGB конечного изображения, но это невозможно узнать как пользовательопределит это.

Так что я делаю не так? Как я могу настроить свой алгоритм так, чтобы он правильно размывал края, а не на фоне ярких пикселей, создавая яркий ореол?

Я ценю любую помощь в этом, так как я действительно застрял!

1 Ответ

0 голосов
/ 19 октября 2019

Размытие работает путем усреднения пикселей в некоторой окрестности целевого пикселя. Когда вы достигнете границ объектов переднего плана, у алгоритма не останется иного выбора, кроме как брать пиксели с фона.

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

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

...