2012-03-21 28 views
9

¿Cómo hago un alisado de gaussi en la 3ª dimensión?Cómo hacer un filtrado gaussiano en 3D

Tengo esta pirámide de detección, los votos se acumularon en cuatro escalas. Los objetos se encuentran en cada pico.

Detection Pyramid

ya Alisé cada uno de ellos en 2D, y la lectura en mis papeles que necesito para filtrar la tercera dimensión con un \ sigma = 1, que no he probado antes, ni siquiera estoy seguro de lo significa.

I Descubierto cómo hacerlo en Matlab, y necesito algo similar en opencv/C++.

Matlab primas Valores: Raw Matlab Smoothen con M0 = smooth3 (M0, 'gaussiano'); : Smooth

+0

¿Cuál es el propósito del suavizado adicional? ¿Hay alguna información diferente en cada nivel de pirámide? –

+0

Si mira la imagen, los picos se encuentran en una de las cuatro escalas, por lo que supongo que el suavizado es para encontrar un pico global en todas las escalas. Está escrito en mi documento de detección, atm. Solo estoy buscando picos en todas las escalas y confirmo cuál es el mejor candidato y me gustaría compararlo con el método sugerido. –

+0

El suavizado gaussiano en 3D es lo mismo que el suavizado gaussiano en 2D. Se aplica un filtro de convolución para 3 dimensiones de modo que G (x, y, z) = Q – Adam

Respuesta

2

Hace mucho tiempo (en 2008-2009) He desarrollado una pequeña plantilla lib de C++ para aplicar algunas transformaciones simples y filtros de convolución. La fuente de la biblioteca se puede encontrar en el Motor Linderdaum: no tiene nada que ver con el resto del motor y no utiliza ninguna de las características del motor. La licencia es MIT, así que haz lo que quieras con ella.

echar un vistazo a código fuente del Linderdaum (http://www.linderdaum.com) en src/Linderdaum/Imágenes/VolumeLib. *

La función de preparar el núcleo es PrepareGaussianFilter() y MakeScalarVolumeConvolution() se aplica el filtro. Es fácil adaptar la biblioteca para las diferentes fuentes de datos porque la E/S se implementa utilizando funciones de devolución de llamada.

2

Los filtros Gaussian son separables. Aplicar filtro de 1D en cada dimensión de la siguiente manera:

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

recomendaría OpenCV para una implementación de un filtro gaussiano (y el procesamiento de imágenes en general) en C++.

Tenga en cuenta que esto supone que sus niveles de pirámide son todos del mismo tamaño. Puede tener sus propias funciones que muestreen su pirámide de espacio de escala sobre la marcha mientras convoluciona la tercera dimensión, pero si tiene suficiente memoria, creo que sería más rápido escalar su nivel más grueso para tener el mismo tamaño de la mejor nivel.

Cuestiones relacionadas