Не могу понять, как должен работать фильтр на границе изображения, поскольку здесь не хватает влияющих пикселей..
Именно в общем смысле, ведь в некоторых графических приложениях маску можно вводить вручную, при этом метод обработки границ нигде не указывается..
Приходят следующие идеи:
Не учитывать недостающие пиксели (тоже — считать их черными).
Не учитывать границу.
Распространять граничные точки на неизвестные области.
Брать симметричную точку с противоположной границы..
Преобразовывать маску. Например, занулять коэф. окна, выходящие за границу (тоже что и первый вариант), но при этом выполнять нормализацию (по сути умножать на k1/k2, где k1 — сумма коэф. исходной маски, k2 — новой).
Именно такие подходы использованы во встретившихся мне реализациях фильтров. В основном они обусловлены краткостью получаемого кода либо увеличением производительности.. В математической литературе же (про цифровые сигналы) обычно не рассматривают границы, там теория для непрерывного континуума..
Что мне не нравится здесь? Ну вообще говоря хочется какой-то математической точности. К примеру вариант 1, для Гауссова фильтра сделает белую картинку (за несколько проходов) серой, что имхо неверно по логике. 4 сложен для окон с большим радиусом по сравнению с размерами изображения. Или же то что работает верно для маски Гаусса, будет неверно работать для такой:
000
100
000, где, по идее, должна появляться черная полоска слева (хотя не факт, здесь не известно.. )
Вообще говоря, мне нужно применить ряд конкретных фильтров, в моей задаче я могу подобрать приемлемый алгоритм. Но чювство эстетики и потребность к универсальному коду не дают мне покоя..