Параллельная фильтрация изображений в области Фурье

Мы работаем над проектом, в котором собираемся обрабатывать изображения на Apache Hadoop. Мы хотим ускорить вычисления, разбивая изображения на более мелкие части (изображения очень большие), применяя любые фильтры в области Фурье к каждой части, а затем конвертируя обратно в пространственную область перед объединением всех частей вместе. Мы знаем, как фильтровать в пространственной области, заполняя каждую часть пикселями от соседей (в соответствии с размером маски). Применяется ли это также, если фильтрация выполняется в частотной области?

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


person bjorncs    schedule 26.05.2013    source источник


Ответы (2)


Да, действует тот же принцип. Процесс такой:

  1. Разложите изображение на перекрывающиеся плитки (степень перекрытия в каждом направлении равна длине фильтра - 1).
  2. Обнулите каждую плитку (чтобы избежать круговой свертки).
  3. Возьмите БПФ каждой плитки.
  4. Умножьте результат на БПФ фильтра.
  5. Обратное БПФ.
  6. Снова соедините результаты вместе, убедившись, что суммируются области перекрытия.
person Oliver Charlesworth    schedule 27.05.2013

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

Как (я думаю) вы указали в своем вопросе, большинство пространственных фильтров (то есть те, которые основаны на свертке с некоторым ядром) используют эвристический подход на краях изображения, где ядро ​​будет перекрываться «за пределами» границы изображения. Неизвестные значения пикселей могут быть проигнорированы, приняты равными нулю, отражены обратно от изображения и т. Д. В вашем случае эти эффекты будут возникать в разделах между фрагментами изображения, где у вас действительно фактически "отсутствует" пикселей. Этого можно избежать, убедившись, что плитки перекрывают друг друга, чтобы каждая плитка могла включать пиксели от своих соседей при применении фильтра. То же самое применимо и к области Фурье - и вам также необходимо убедиться, что ваши плитки достаточно велики, чтобы содержать все частоты, которые вы хотите сохранить.

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

Если вы разбиваете на достаточно маленькие плитки, вероятно, будет быстрее, чтобы большинство операций фильтрации оставалось в пространственной области. Стоимость БПФ сведет на нет любую экономию, которую вы могли бы получить от многопоточности. Конечно, для некоторой фильтрации Фурье - например, деконволюции - вы должны использовать все изображение.

person Roger Rowland    schedule 27.05.2013