Не могу понять, как должен работать фильтр на границе изображения, поскольку здесь не хватает влияющих пикселей..
Именно в общем смысле, ведь в некоторых графических приложениях маску можно вводить вручную, при этом метод обработки границ нигде не указывается..
Приходят следующие идеи:
Не учитывать недостающие пиксели (тоже — считать их черными).
Не учитывать границу.
Распространять граничные точки на неизвестные области.
Брать симметричную точку с противоположной границы..
Преобразовывать маску. Например, занулять коэф. окна, выходящие за границу (тоже что и первый вариант), но при этом выполнять нормализацию (по сути умножать на k1/k2, где k1 — сумма коэф. исходной маски, k2 — новой).
Именно такие подходы использованы во встретившихся мне реализациях фильтров. В основном они обусловлены краткостью получаемого кода либо увеличением производительности.. В математической литературе же (про цифровые сигналы) обычно не рассматривают границы, там теория для непрерывного континуума..
Что мне не нравится здесь? Ну вообще говоря хочется какой-то математической точности. К примеру вариант 1, для Гауссова фильтра сделает белую картинку (за несколько проходов) серой, что имхо неверно по логике. 4 сложен для окон с большим радиусом по сравнению с размерами изображения. Или же то что работает верно для маски Гаусса, будет неверно работать для такой:
000
100
000, где, по идее, должна появляться черная полоска слева (хотя не факт, здесь не известно.. )
Вообще говоря, мне нужно применить ряд конкретных фильтров, в моей задаче я могу подобрать приемлемый алгоритм. Но чювство эстетики и потребность к универсальному коду не дают мне покоя..
Здравствуйте, free.rFczZZ, Вы писали:
FR>Не могу понять, как должен работать фильтр на границе изображения, поскольку здесь не хватает влияющих пикселей..
FR>Именно в общем смысле, ведь в некоторых графических приложениях маску можно вводить вручную, при этом метод обработки границ нигде не указывается..
FR>Приходят следующие идеи:
FR>
FR>Не учитывать недостающие пиксели (тоже — считать их черными).
FR>Не учитывать границу.
FR>Распространять граничные точки на неизвестные области.
FR>Брать симметричную точку с противоположной границы..
FR>Преобразовывать маску. Например, занулять коэф. окна, выходящие за границу (тоже что и первый вариант), но при этом выполнять нормализацию (по сути умножать на k1/k2, где k1 — сумма коэф. исходной маски, k2 — новой).
FR>
FR>Именно такие подходы использованы во встретившихся мне реализациях фильтров. В основном они обусловлены краткостью получаемого кода либо увеличением производительности.. В математической литературе же (про цифровые сигналы) обычно не рассматривают границы, там теория для непрерывного континуума..
Неужели в фильтрации сигналов не рассматриваются ограниченные? Странно.
Можно добавить.
— к п.1. Пикселы за границей считать не черными, а некоторого заданного цвета (в некоторых билиотеках задается как цвет-background объекта "картинка"). Проблему, конечно, не решает
.
— Речь по сути идет об экстраполяции, поэтому можно попытаться экстраполировать заграничные пикселы каким-то методом буквально. Для скорости экстраполированные пикселы просчитывать один раз перед фильтрацией. Но метод тоже ничего 100% не гарантирует, хотя может быть и получше (не проверял). Еще микромысль. Обрабатывать картинку, абстрагируясь от ее природы, т.е. при промежуточных вычислениях допускать отрицательные значения цвета.
А в целом тут ничего не поделаешь, т.к. приходится строить предположения о свойствах сигнала. В случае картинок это в общем случае невозможно сделать красиво и строго, приходится делать эвристически и органолептически. Плюс за конкретной матрицей фильтра обычно стоит какая-то математика, физический смысл, так сказать (производные, интегралы и т.п). По-моему, искать решение, идеальное для всех фильтров и сигналов — это странно. Тут вылезет и природа фильтра, и соотношение размеров картинки и апертуры фильтра. Но это мне может только казаться
, я не эксперт в фильтрации сигналов.
Я не раз сталкивался с этой задачей. Каждый раз принимал решение исходя из прикладной задачи.
Можно еще попробовать перевести всю математику на работу с альфаканалом (который в вашем описании принимает значения 0 — 1 ). Может какие нить решения станут более прозрачными.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>