2011-06-13 29 views
7

¿Hay un equivalente 3D de imfilter disponible para MATLAB? Deseo aplicar el filtrado Gaussiano a un histograma 3D. Iba a implementarlo yo mismo, creando un filtro Gaussiano (3D), luego recorriendo cada elemento de mi histograma y resumiendo las entradas de datos correspondientes.Filtro Gaussiano 3D en MATLAB

Sin embargo, no quería implementarlo yo mismo de una manera lenta e ineficiente si hay algo que ya existe, o una forma más inteligente de hacerlo.

+0

Suponiendo que su filtro Gaussian es separable, ¿debería poder aplicar un filtro 2D seguido de un filtro 1D? –

Respuesta

5

Hay dos maneras de resolver esto con el fin de hacer el filtrado de una manera eficiente:

(1) Use CONVN tres veces para filtrar los datos con tres gaussianas 1D, un x-por-1-por -1, uno 1 por uno y 1 y uno 1 por 1 por z.

(2) Si tiene la caja de herramientas de procesamiento de señal, use FFTFILT para realizar el filtrado en el espacio inverso (o use cualquiera de los algoritmos de convolución fft en el intercambio de archivos).

[(3) me envía un correo electrónico y te envío mi fftFilterImage, lo que hace el filtrado 3D Gauss.]

4

IMFilter ya se puede hacer el filtrado 3D, siempre y cuando la matriz de datos y el filtro que da es 3D. Ver the imfilter page.

1

Esta tarea se puede manejar con la nueva función (a partir del R2015a) imgaussfilt3.

La sintaxis básica es la siguiente:

B = imgaussfilt3(A,sigma) 

También hay una serie de name-value pair arguments:

  • 'FilterSize': Tamaño del filtro de Gauss, por defecto a un cubo de tamaño 2*ceil(2*sigma)+1.
  • 'Padding': Tipo de relleno ('replicate' (predeterminado) | 'circular' | 'symmetric').
  • 'FilterDomain': realizar la convolución en el dominio: 'frequency' o 'spatial' (predeterminado automático).