растровая маска (плавающее окно)
От: free.rFczZZ  
Дата: 22.07.10 03:34
Оценка: 3 (1)
Не могу понять, как должен работать фильтр на границе изображения, поскольку здесь не хватает влияющих пикселей..

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

Приходят следующие идеи:
  1. Не учитывать недостающие пиксели (тоже — считать их черными).
  2. Не учитывать границу.
  3. Распространять граничные точки на неизвестные области.
  4. Брать симметричную точку с противоположной границы..
  5. Преобразовывать маску. Например, занулять коэф. окна, выходящие за границу (тоже что и первый вариант), но при этом выполнять нормализацию (по сути умножать на k1/k2, где k1 — сумма коэф. исходной маски, k2 — новой).

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

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

Вообще говоря, мне нужно применить ряд конкретных фильтров, в моей задаче я могу подобрать приемлемый алгоритм. Но чювство эстетики и потребность к универсальному коду не дают мне покоя..
Re: растровая маска (плавающее окно)
От: denisko http://sdeniskos.blogspot.com/
Дата: 22.07.10 04:53
Оценка:
Здравствуйте, free.rFczZZ, Вы писали:

Граничные условия определяются из условий задачи. Когда что-нибудь обосновывают обычно предполагают исследуемую функцию непрерывной вместе с производными до нужного порядка (чаще 0 и 1) -- просто для удобства работы. Если не оговаривается, то предполагается либо просто непрерывность либо непрерывность со всеми производными. В твоем списке это что-то близкое к п 3. Довольно часто используется 4 и 2. 1 и особенно 5 используются крайне редко, поскольку просаживает производительность / жрет память на ровном месте.
<Подпись удалена модератором>
Re: растровая маска (плавающее окно)
От: goto Россия  
Дата: 22.07.10 11:48
Оценка:
Здравствуйте, free.rFczZZ, Вы писали:

FR>Не могу понять, как должен работать фильтр на границе изображения, поскольку здесь не хватает влияющих пикселей..


FR>Именно в общем смысле, ведь в некоторых графических приложениях маску можно вводить вручную, при этом метод обработки границ нигде не указывается..


FR>Приходят следующие идеи:

FR>

    FR>
  1. Не учитывать недостающие пиксели (тоже — считать их черными).
    FR>
  2. Не учитывать границу.
    FR>
  3. Распространять граничные точки на неизвестные области.
    FR>
  4. Брать симметричную точку с противоположной границы..
    FR>
  5. Преобразовывать маску. Например, занулять коэф. окна, выходящие за границу (тоже что и первый вариант), но при этом выполнять нормализацию (по сути умножать на k1/k2, где k1 — сумма коэф. исходной маски, k2 — новой).
    FR>

FR>Именно такие подходы использованы во встретившихся мне реализациях фильтров. В основном они обусловлены краткостью получаемого кода либо увеличением производительности.. В математической литературе же (про цифровые сигналы) обычно не рассматривают границы, там теория для непрерывного континуума..


Неужели в фильтрации сигналов не рассматриваются ограниченные? Странно.

Можно добавить.

— к п.1. Пикселы за границей считать не черными, а некоторого заданного цвета (в некоторых билиотеках задается как цвет-background объекта "картинка"). Проблему, конечно, не решает .

— Речь по сути идет об экстраполяции, поэтому можно попытаться экстраполировать заграничные пикселы каким-то методом буквально. Для скорости экстраполированные пикселы просчитывать один раз перед фильтрацией. Но метод тоже ничего 100% не гарантирует, хотя может быть и получше (не проверял). Еще микромысль. Обрабатывать картинку, абстрагируясь от ее природы, т.е. при промежуточных вычислениях допускать отрицательные значения цвета.

А в целом тут ничего не поделаешь, т.к. приходится строить предположения о свойствах сигнала. В случае картинок это в общем случае невозможно сделать красиво и строго, приходится делать эвристически и органолептически. Плюс за конкретной матрицей фильтра обычно стоит какая-то математика, физический смысл, так сказать (производные, интегралы и т.п). По-моему, искать решение, идеальное для всех фильтров и сигналов — это странно. Тут вылезет и природа фильтра, и соотношение размеров картинки и апертуры фильтра. Но это мне может только казаться , я не эксперт в фильтрации сигналов.
Re: растровая маска (плавающее окно)
От: minorlogic Украина  
Дата: 22.07.10 12:57
Оценка:
Я не раз сталкивался с этой задачей. Каждый раз принимал решение исходя из прикладной задачи.

Можно еще попробовать перевести всю математику на работу с альфаканалом (который в вашем описании принимает значения 0 — 1 ). Может какие нить решения станут более прозрачными.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.