2012-03-21 7 views
9

Как сделать gaussi сглаживание в 3-м измерении?Как сделать гауссовскую фильтрацию в 3D

У меня есть эта пирамида обнаружения, накопленная в четырех масштабах. Объекты находятся на каждом пике.

Detection Pyramid

Я уже сглажены каждый из них в 2D, и чтение в моих статьях, что мне нужно фильтровать третье измерение с \ сигма = 1, что я нету пробовали раньше, я даже не уверен, что это значит.

Я выяснил, как это сделать в Matlab, и нужно что-то симулятивное в opencv/C++.

Matlab Сырые значения: Raw Matlab Сглаживание с M0 = smooth3 (М0, 'гауссовой'); : Smooth

+0

Какова цель дополнительного сглаживания? Есть ли какая-то другая информация на каждом уровне пирамиды? –

+0

Если вы посмотрите на изображение, пики находятся в одном из четырех шкал, поэтому я предполагаю, что сглаживание - это поиск глобального пика во всех масштабах. Его написано в моей статье для обнаружения, atm, я просто нахожу пики во всех масштабах и проверяет, что является лучшим кандидатом, и хотел бы сравнить с предлагаемым методом. –

+0

Gaussian Сглаживание в 3D - это то же самое, что и гауссовское сглаживание в 2D. Вы применяете фильтр свертки для трех измерений, так что G (x, y, z) = Q – Adam

ответ

2

Давным-давно (в 2008-2009 гг.) Я разработал небольшой шаблон C++ для применения простых преобразований и фильтров свертки. Источник библиотеки можно найти в Linderdaum Engine - он не имеет никакого отношения к остальной части движка и не использует никаких функций движка. Лицензия - MIT, так что делайте с ней все, что хотите.

Посмотрите в исходный код Linderdaum в (http://www.linderdaum.com) на Src/Linderdaum/Images/VolumeLib. *

Функция для подготовки ядра является PrepareGaussianFilter() и MakeScalarVolumeConvolution() применяет фильтр. Легко адаптировать библиотеку для разных источников данных, поскольку ввод-вывод выполняется с использованием функций обратного вызова.

2

Гауссовые фильтры отделимы. Вы применяете 1D фильтр при каждом измерении следующим образом:

for (dim = 0; dim < D; dim++) 
    tensor = gaussian_filter(tensor, dim); 

Я бы рекомендовал OpenCV для реализации гауссова фильтра (и обработки изображений в целом) в C++.

Обратите внимание, что это предполагает, что уровни вашей пирамиды имеют одинаковый размер. У вас могут быть свои собственные функции, которые проецируют вашу масштабную пирамиду «на лету», сверяя третье измерение, но если у вас достаточно памяти, я считаю, что было бы быстрее увеличить ваш более грубый уровень, чтобы иметь тот же самый размер уровень.