2011-08-09 29 views
5

Tengo un vector n-dimensional (1xn conjunto de datos, y no son datos de imagen), y quiero aplicarle un filtro Gaussiano. Tengo el Toolkit de procesamiento de imágenes y algunos otros (pregunte si necesita una lista).Filtro Gaussiano en un vector en Matlab

Presumiblemente puedo hacer que el parámetro hsize de la función fspecial sea algo así como [1 n]. ¿Puedo seguir usando imfilter para aplicarlo a mi vector como paso siguiente, o debería estar usando algo más?

He visto bastantes ejemplos sobre cómo aplicar un filtro Gaussiano a datos de imagen bidimensionales en Matlab, pero todavía soy relativamente nuevo en Matlab como plataforma, así que un ejemplo sería realmente bueno.

Nota: Actualmente no estoy en posición de probarlo y ver qué sucede (actualmente no está en una máquina con Matlab instalado), de lo contrario lo habría intentado primero y solo me habría preguntado si tuve problemas al usar fspecial y imfilter.

Respuesta

15

¿Por qué no crear usted mismo el filtro gaussiano? Se puede ver en la fórmula en fspecial (o cualquier otra definición de Gauss):

sigma = 5; 
sz = 30; % length of gaussFilter vector 
x = linspace(-sz/2, sz/2, sz); 
gaussFilter = exp(-x .^ 2/(2 * sigma^2)); 
gaussFilter = gaussFilter/sum (gaussFilter); % normalize 

y con el fin de aplicarlo puede utilizar filter:

y = rand(500,1); 
yfilt = filter (gaussFilter,1, y); 

y no se olvide el filtro tiene latencia, lo que significa que la señal filtrada se desplaza en comparación con la señal de entrada. Puesto que el filtro es simétrica, se puede obtener una salida no desplazada mediante el uso de conv en lugar de filter, y utiliza la opción same:

yfilt = conv (y, gaussFilter, 'same'); 
+2

Bueno, yo realmente no veo la necesidad de escribir mi propia función si otra las funciones existentes también harán el trabajo, pero sí, la creación del filtro soluciona el problema. Gracias. Por cierto, ¿estoy en lo correcto al creer que comúnmente el tamaño es 6 (más-menos 3) veces el valor sigma? –

+1

Realmente depende de la aplicación, pero generalmente quieres que las colas gaussianas desaparezcan, por lo que truncar el filtro no tiene un efecto significativo (ya que las colas van a 0 en + -infinito, debes truncar para tener una longitud finita filtrar). Entonces sí, ir 4 o más sigmas a cada lado lo garantiza. –

+2

Por supuesto, existe la necesidad de escribir su propia función, ¡especialmente cuando es parte de una costosa caja de herramientas! ¿Qué ocurre si el número de licencias de Matlab Image Toolbox es limitado en su empresa o universidad? ¡Sucede! – Wok

Cuestiones relacionadas