Я пытаюсь реализовать свертку изображения с матрицей 3х3, где мои цветовые компоненты (каждый в диапазоне от 0 до 255) хранятся с использованием предварительно умноженной альфа. Все учебные пособия (например, http://www.codeproject.com/KB/GDI-plus/csharpfilters.aspx), которые я могу найти, описывают только выполнение сверточных вычислений для компонентов RGB, и ничего не упоминается об альфа-компоненте.
Мой текущий код оставляет альфа-компонент как есть. Фильтры, которые я пробовал, выглядят хорошо при работе с изображениями, где каждый пиксель уже имеет полный набор альфа. Когда у меня есть частично прозрачные пиксели, например Фильтр boxblur выглядит странно, потому что цвета пикселей не распространяются в прозрачные области, когда происходит размытие.
Какие вычисления я выполняю для альфа-компонента при запуске алгоритма свертки и как мне обращаться с предварительно умноженными альфа-значениями при установке конечного значения пикселя? Кроме того, нужно ли добавить смещение фильтра к альфа-компонент?
Я пытался вычислить свой новый альфа-компонент таким же образом, как я вычисляю компоненты RGB (т.е. складываю окружающие альфа-значения для этого пикселя в соответствии с матрицей фильтра), но на краю прозрачных областей появляются цветные полосы и полупрозрачные пиксели начинают слишком темнеть. Я думаю, что мне нужно изменить новые компоненты RGB, чтобы учесть новое альфа-значение, но я не уверен, что делать.
Спасибо.