Filtrado Espacial - Ingeniería En Automatización Y Control Industrial

   EMBED

Share

Preview only show first 6 pages with water mark for full document please download

Transcript

Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 Filtrado Espacial Introducción El filtrado espacial es la operación que se aplica a una imagen para resaltar o atenuar detalles espaciales con el fin de mejorar la interpretación visual o facilitar un procesamiento posterior, y constituye una de las técnicas comprendidas dentro del realce de imágenes. Ejemplos comunes incluyen aplicar filtros para mejorar los detalles de bordes en imágenes, o para reducir o eliminar patrones de ruido. El filtrado espacial es una operación "local" en procesamiento de imagen, en el sentido de que modifica el valor de cada píxel de acuerdo con los valores de los píxeles que lo rodean; se trata de transformar los niveles de gris originales de tal forma que se parezcan o diferencien más de los correspondientes a los píxeles cercanos. Frecuencia Espacial La frecuencia espacial define la magnitud de cambios en el nivel de gris por unidad de distancia en una determinada zona de la imagen. Las áreas de la imagen con pequeños cambios o con transiciones graduales en los valores de los datos se denominan áreas de bajas frecuencias. Las áreas de grandes cambios o rápidas transiciones se conocen como áreas de altas frecuencias (por ejemplo, los bordes). Así, los filtros espaciales se pueden dividir en tres categorías: - Filtros pasa bajos: enfatizan las bajas frecuencias, suavizando las imágenes y atenuando ruidos. Se trata de asemejar el nivel de gris de cada píxel al nivel de gris de los píxeles vecinos, reduciendo la variabilidad espacial de la imagen. Ello produce un borroneado de los bordes, perdiéndose en nitidez visual de la imagen, pero ganando en homogeneidad. - Filtros pasa altos: enfatizan las altas frecuencias, para mejorar o afilar las características lineales como los límites en general. Realizan por tanto el efecto contrario a los filtros pasabajos, eliminando las bajas frecuencias. - Filtro detectores de bordes: realizan otro tipo de operaciones con los píxeles, pero siempre con el resultado de enfatizar los bordes que rodean a un objeto en una imagen, para hacerlo más fácil de analizar. Estos filtros típicamente crean una imagen con fondo gris y líneas blancas y negras rodeando los bordes de los objetos y características de la imagen. Convolución Espacial El filtrado espacial se realiza trasladando una matriz rectangular de dos dimensiones (también llamada ventana, kernel, máscara o núcleo) que contiene "pesos" o ponderaciones sobre la imagen en cada localización de píxel. Se evalúa el píxel central de la ventana de acuerdo con los píxeles de alrededor y sus valores de ponderación. Cuando un nuevo valor es así calculado, se desplaza la ventana sobre el siguiente píxel, realizando la mis- Filtrado Espacial 1 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 ma operación. Este proceso de evaluar la vecindad ponderada del píxel se denomina "convolución bidimensional", y a la matriz de filtro se le conoce como "kernel de convolución". En general, la convolución de una imagen f de MxN con una máscara h de mxn está dada por la siguiente expresión: g ( x, y ) = a b ∑∑ f ( x + i, y + j ).h(i, j ) i =− a j =− b a= m −1 n −1 ,b = 2 2 Por ejemplo, consideremos la máscara de convolución mostrada en la figura 1 y una imagen genérica representada por f. Dado que m=3 y n=3, a y b son iguales a 1. Teniendo en cuenta todo lo anterior, la respuesta a la máscara de convolución dada, o sea, g(x,y), está dada por la expresión anterior. Luego, evaluando la respuesta para un punto cualquiera, por ejemplo, (5,4), obtenemos lo siguiente: 1 1 g (5,4) = ∑ ∑ f (5 + i,4 + i ).h(i, j ) i = − 1 j = −1 Figura 1: Máscara de convolución. g (5,4) = f (4,3).h(−1,−1) + f (4,4).h( −1,0) + f ( 4,5).h( −1,1) + f (5,3).h(0,−1) + + f (5,4).h(0,0) + f (5,5).h(0,1) + f (6,3).h(1,−1) + f (6,4).h(1,0) + f (6,5).h(1,1) Filtros Pasabajos El resultado de aplicar un filtro pasabajos a una imagen es simplemente el promediado de los píxeles contenidos en el vecindario (o entorno) de la máscara utilizada. Si bien anteriormente se dieron los usos de los filtros pasabajos, generalmente se los utiliza para atenuar los detalles irrelevantes en una imagen. Otra de las utilidades del filtro pasabajos, aparte de las más obvia que es la atenuación del ruido, es el suavizado de los falsos contornos producidos por una cuantización con un número insuficiente de niveles de gris. El procedimiento básico del filtro pasabajos es reemplazar el valor de cada píxel en una imagen por el promedio de los niveles de gris del vecindario definido por la máscara. La figura 2 muestra dos máscaras (o núcleos) de 3x3. Usando la primera se obtiene el promediado estándar de los píxeles abarcados por aquella. Se debe notar que, en lugar de ser 1/9, los coeficientes de la máscara son todos 1’s. Esto se hace así debido a que es más eficiente computacionalmente tener todos los coeficientes con el valor 1. Luego, la imagen completa se divide por 9 (o sea, por la suma de todos los coeficientes). Filtrado Espacial 2 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 Figura 2: Dos máscaras de 3x3 para realizar un filtrado pasabajos (suavizado, promediado) a) b) La segunda máscara de la figura 2 produce un promedio ponderado. Como se puede ver, los píxeles son multiplicados por diferentes coeficientes, dándoles así más importancia (peso) a algunos píxeles que a otros. En el caso particular de la máscara de la figura 2, el píxel del centro se multiplica por el valor más alto, mientras que los demás píxeles son pesados teniendo en cuenta la inversa de su distancia al centro. La razón de darle más importancia al píxel central y menos importancia a los píxeles más alejados al centro, radica en la necesidad de reducir el borroneado durante el proceso de suavizado. Como se hacía en el caso anterior, primero se multiplican los píxeles por los coeficientes de la máscara, que son números enteros potencias de 2 (mayor eficiencia, rapidez), y luego se divide por la suma de todos los coeficientes de la máscara, o sea, 16. En la figura 3 pueden verse los efectos del filtro espacial pasabajos, o suavizado. Teniendo en cuenta la imagen original, figura 3 (a), las figuras 3 (b) a 3 (f) son el resultado de filtrar la imagen original utilizando núcleos cuadrados de n=3, 5, 9, 15 y 35, respectivamente. Para la máscara de 3x3, notamos un leve borroneado general de la imagen, pero los detalles que tienen aproximadamente el mismo tamaño que el núcleo han sido afectados considerablemente. Para n=9, se ve un borroneado mucho mayor, y también que el 20% del círculo negro casi se confunde con el fondo, ilustrando así el efecto de mezclado que el borroneado produce sobre aquellos objetos cuyos niveles de gris son parecidos a los de sus vecinos. Otro efecto que se puede notar es la reducción del ruido en los rectángulos. Para n=15 y 35, se puede ver que el borroneado es excesivo. Este tipo de borroneado se utiliza para eliminar los objetos pequeños en una imagen. a) b) Filtrado Espacial 3 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 c) d) e) f) Figura 3: a) Imagen original, 500x500 píxeles. (b) – (f) Resultados de suavizar con máscaras cuadradas de n=3, 5, 9, 15 y 35, respectivamente. Como ya lo mencionamos, una aplicación importante de este tipo de filtrado es el borroneado de una imagen con el fin de obtener una presentación burda de los objetos de interés, de manera que la intensidad de los objetos pequeños se confunda con la del fondo y los objetos grandes sean fáciles de detectar. Por último, presentaremos la implementación general para filtrar una imagen de MxN con una máscara de promedio ponderado de mxn (m y n impares): a g ( x, y ) = b ∑ ∑ f ( x + i, y + j ).h(i, j ) i=− a j =− b a b ∑ ∑ h(i, j ) i =− a j =− b donde el denominador es simplemente la suma de los coeficientes de la máscara y, por lo tanto, una constante que sólo debe calcularse una vez. Filtrado Espacial 4 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 En el apéndice se presentan algunos algoritmos en scripts de Matlab que realizan los diferentes tipos de filtrado que se verán en este apunte. Filtros estadísticos: filtro de mediana Los filtros estadísticos son filtros espaciales no lineales cuya respuesta está basada en ordenar los píxeles abarcados por una máscara y luego reemplazar el valor del píxel central con el valor determinado por el resultado del ordenamiento. El más conocido de estos filtros es el filtro de mediana, el cual reemplaza el valor del píxel central por la mediana de los niveles de gris del vecindario de ese píxel (el valor original del píxel es incluido en el cálculo de la mediana). Los filtros de mediana son muy usados debido a que, para ciertos tipos de ruidos aleatorios, proveen una excelente reducción de ruido y un borroneado considerablemente menor que los filtros lineales de suavizado del mismo tamaño. Los filtros de mediana son particularmente efectivos cuando el ruido es del tipo impulso (también llamado ruido sal y pimienta) debido a que aparece como puntos negros o blancos sobrepuestos en la imagen. La mediana, ξ, de un conjunto de valores es aquella en la que la mitad de los valores en el conjunto son menores o iguales que ξ, y la otra mitad es mayor o igual a ξ. Por ejemplo, si en una imagen tomamos un conjunto de píxeles de 3x3 con valores {1, 9, 5, 0, 8, 7, 1, 2, 4} la mediana para este caso será el valor 4, ya que la mitad de este conjunto es menor (o igual) y la otra mitad es mayor (o igual) a éste: {0, 1, 1, 2, 4, 5, 7, 8, 9}. El procedimiento general para realizar el filtro de mediana en cualquier punto consiste en ordenar los valores de dicho píxel y los de su vecindario, determinar la mediana, y asignar éste último valor al píxel en cuestión. Para un vecindario de 3x3, la mediana es el 5to valor más grande; para uno de 5x5 es el 13mo valor más grande, y así. Cuando algunos valores en un vecindario son iguales, éstos se ven agrupados. Por ejemplo, supongamos que un vecindario de 3x3 tiene los valores {10, 20, 20, 20, 15, 20, 20, 25, 100}. Ordenando este conjunto nos queda {10, 15, 20, 20, 20, 20, 20, 25, 100}, de donde se ve que la mediana es 20. Así, la principal función de los filtros de mediana es hacer que los puntos con niveles de gris distintos sean más parecidos a los de su vecindario. En la figura 4 puede verse los efectos que produce el filtro de mediana en una imagen contaminada con ruido sal y pimienta. a) b) c) Figura 4: a) Imagen con ruido sal y pimienta. b) Filtrado de (a) con un filtro de suavizado de 3x3. c) Reducción de ruido con un filtro de mediana de 3x3. Filtrado Espacial 5 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 La figura 4 (b) es el resultado de promediar la imagen original, figura 4 (a), con una máscara de 3x3, mientras que la 4 (c) es la consecuencia de filtrar la original con un filtro de mediana de 3x3. Se puede ver claramente que el filtro de mediana es más efectivo a la hora de remover ruido sal y pimienta que los filtros de promediado. No obstante, el precio que se paga es un borroneado considerable. Filtros Pasaaltos El objetivo principal de estos filtros es resaltar los detalles delicados de una imagen (por ejemplo, los bordes) o realzar los detalles de una imagen borroneada. Anteriormente, vimos que el suavizado de una imagen, en el dominio espacial, se lograba promediando el vecindario de cada píxel. Dado que el promediado es análogo a la integración, es lógico pensar que en el proceso de filtrado con un pasaaltos se realicen operaciones de diferenciación espacial. Fundamentalmente, la magnitud de la respuesta de un operador derivada es proporcional al grado de discontinuidad de la imagen en el punto en donde este operador está siendo aplicado. Por esta razón, la diferenciación de una imagen realza o enfatiza los bordes y otras discontinuidades tales como el ruido y atenúa aquellas áreas cuyos niveles de gris varían lentamente. Los filtros pasaaltos que estudiaremos aquí están basados en la primer y segunda derivada. Las derivadas de una función discreta se definen en términos de diferencias. Existen muchas maneras de definir estas diferencias. Sin embargo, existen requerimientos que debe cumplir cualquier definición de aquéllas. La primer derivada debe ser: - cero en las zonas que tienen un nivel de gris constante; - distinta de cero ante un cambio del tipo escalón o rampa en el nivel de gris; - y distinta de cero en toda la zona que tiene un cambio del tipo rampa; Similarmente, cualquier definición de segunda derivada debe ser: - cero en zonas con nivel de gris constante; - distinta de cero al principio o al final de un cambio del tipo escalón o rampa; - y debe ser cero en toda la zona que tiene un cambio del tipo rampa con pendiente constante. Las definiciones básicas para la primer y segunda derivada de una función bidimensional discreta con respecto a x y a y son las siguientes: df = f ( x + 1, y ) − f ( x, y ) dx d2 f = f ( x + 1, y ) + f ( x − 1, y ) − 2 f ( x, y ) dx 2 df = f ( x, y + 1) − f ( x, y ) dy d2 f = f ( x, y + 1) + f ( x, y − 1) − 2 f ( x, y ) dy 2 Como ya lo hemos discutido, los bordes en una imagen están relacionados con los cambios en el nivel de gris, o sea, con las altas frecuencias. A continuación se desarrollarán diferentes métodos utilizados para la detección de líneas y bordes en general; métodos asociados con la primer derivada, el gradiente, y métodos asociados con la segunda derivada, el laplaciano. Filtrado Espacial 6 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 Detección de líneas Consideremos las máscaras de la figura 5. Si convolucionamos la primer máscara con una imagen, la respuesta será mayor para líneas del ancho de un píxel orientadas horizontalmente. Siempre que el fondo sea uniforme, la respuesta será máxima cuando la línea pase a lo largo de la segunda fila de la máscara. La segunda máscara de la figura 5 responderá mejor a líneas orientadas a 45º; la tercera máscara a líneas verticales; y la última a líneas orientadas a -45º. Estas direcciones se pueden establecer observando que para la dirección de interés las máscaras presentan valores mayores que para otras posibles direcciones. Si denotamos con R1, R2, R3 y R4 las respuestas de las cuatro máscaras de la figura 5 para un píxel en particular, entonces si se cumple que |Ri|>|Rj| con j≠i, será más probable que dicho píxel esté asociado a la dirección correspondiente a la máscara i. Figura 5: Máscaras de línea Detección de bordes Operador Gradiente. El gradiente de una imagen f(x,y) en la posición (x,y) viene dado por el vector    fx  ∇f =  =    fy   ∂f ∂x ∂f ∂x      El vector gradiente siempre apunta en la dirección de la máxima variación de la imagen f en el punto (x,y). En la detección de bordes es muy importante la magnitud de este vector, denominado simplemente como gradiente de la imagen, denotado por ∇f y dado por || ∇f ||= f x2 + f y2 Esta cantidad representa la variación de la imagen f(x,y) por unidad de distancia en la dirección del vector ∇f. En general, el gradiente se suele aproximar mediante la expresión ∇f ≈| f x | + | f y | que es mucho más simple de implementar en la práctica. La dirección del vector gradiente también es una cantidad importante. Sea α(x,y) el ángulo del vector ∇f en el punto (x,y). Entonces se tiene que α ( x, y ) = arctan f y ( x, y ) f x ( x, y ) Filtrado Espacial 7 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 donde los ángulos se miden con respecto al eje de abscisas. El cálculo del gradiente se basa en obtener las derivadas parciales para cada píxel. Las derivadas se pueden implementar digitalmente de varias formas. En la figura 6 se pueden ver los operadores de Robert, Prewitt, Sobel y Frei-Chen para determinar las derivadas parciales. Sin embargo, los operadores de Sobel y de Frei-Chen tienen la ventaja de que proporcionan un suavizado además del efecto de derivación. Ya que la derivación acentúa el ruido, el efecto de suavizado es particularmente interesante, puesto que elimina parte del ruido. El requisito básico de un operador de derivación es que, como ya habíamos dicho, la suma de los coeficientes de la máscara sea cero. Figura 6: Operadores de derivación: (a) de Roberts, (b) de Prewitt, (c) de Sobel, y (d) de Frei-Chen. Laplaciano. El Laplaciano de una imagen I(x,y) es una derivada de segundo orden definida por ∂2 f ∂2 f ∇ f = 2 + 2 ∂x ∂y 2 En general, se suele tomar el valor negativo del Laplaciano. Al igual que en el caso del gradiente se puede implementar en forma digital de varias formas. Puesto que el Laplaciano es un operador de derivación, la suma de los coeficientes debe ser cero. Además, el coeficiente asociado con el píxel central debe ser positivo y todos los demás coeficientes negativos o cero, o viceversa. En la figura 7 (c) podemos ver una máscara para el Laplaciano. En este caso, la expresión para determinar el Laplaciano viene dada por 4 f ( x, y ) − f ( x − 1, y ) − f ( x, y − 1) − f ( x, y + 1) − f ( x + 1, y ) Filtrado Espacial 8 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 a) b) c) d) Figura 7: Máscaras utilizadas para implementar los diferentes Laplacianos. Aunque el Laplaciano responde a transiciones en la intensidad de la imagen, se emplea en pocas ocasiones en la práctica. Debido a que es un operador de segunda derivadas es excesivamente sensible a la presencia de ruido. Además, el Laplaciano da lugar a bordes dobles y no permite determinar direcciones. En general, juega un papel secundario en la detección de bordes para determinar si un píxel está en la zona clara o en la zona oscura del borde a través del signo del Laplaciano. El Laplaciano se puede utilizar para realzar una imagen de la siguiente forma:  f ( x, y ) − ∇ 2 f ( x, y ) g ( x, y ) =  2  f ( x, y ) + ∇ f ( x, y ) si el coeficiente central de la máscara es negativo si el coeficiente central de la máscara es positivo El cálculo anterior se puede simplificar teniendo en cuenta que el Laplaciano es un operador lineal. En lugar de sumar (o restar) la imagen original, f(x,y), con el Laplaciano de esta, obtenido con alguna de las máscaras de la figura 7, se puede utilizar una máscara equivalente que realice las dos operaciones en un solo paso. Por ejemplo, para realzar una imagen, f(x,y), usando la máscara laplaciana 7 (a), las operaciones serían las siguientes: g ( x, y ) = f ( x, y ) − {−4 f ( x, y ) + f ( x + 1, y ) + f ( x − 1, y ) + f ( x, y + 1) + f ( x, y − 1)} O lo que es equivalente: g ( x, y ) = 5 f ( x, y ) − { f ( x + 1, y ) + f ( x − 1, y ) + f ( x, y + 1) + f ( x, y − 1)} Por lo tanto, la operación de realce se ve simplificada cuando se utiliza una máscara que realice todas las operaciones. Para el ejemplo anterior, la máscara usada se muestra en la figura 8 (a). En la figura 8 se puede ver cómo se realza una imagen con el Laplaciano. Las figuras 8 (a) y 8 (b) muestran las dos máscaras que se usan generalmente. La figura 8 (c) corresponde a la imagen original (filamento de tungsteno escaneado con un microscopio electrónico). Las figuras 8 (d) y 8 (e) son el resultado de filtrar la imagen original con las máscaras 8 (a) y 8 (b), respectivamente. Comparando la imagen original con las filtradas, notamos que ambas máscaras producen un realce efectivo, pero la resultante de filtrar con la máscara 8 (b) muestra mejor los bordes y las formas. Los mismos resultados hubiésemos obtenido de haber restado la imagen original con el Laplaciano de ésta (calculado con la máscara 7 (a) o 7 (b)). Filtrado Espacial 9 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 a) b) c) d) e) Figura 8: (a) y (b) Máscaras laplacianas compuestas. c) Imagen original. (d) y (e) Resultado de filtrar la imagen original con las máscaras (a) y (b), respectivamente. Filtros High-boost y Unsharp masking Anteriormente, vimos cómo resaltar las altas frecuencias en una imagen para enfatizar bordes y las formas. Para ello, utilizamos máscaras que realizaban operaciones de derivación. Ahora veremos dos tipos de filtros muy utilizados para el mismo fin pero que emplean otras operaciones. Un procedimiento usado para agudizar las formas en una imagen es el unsharp masking, que consiste en restar a la imagen original una versión promediada de ésta (por ejemplo, la imagen original filtrada con un pasabajos). Esto es, f s ( x , y ) = f ( x, y ) − f ( x, y ) Una generalización del unsharp masking es el denominado filtro high-boost que consiste en lo siguiente: Filtrado Espacial 10 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 f hb ( x, y ) = A. f ( x, y ) − f ( x, y ) donde A es mayor o igual a 1. La expresión anterior puede ser rescrita como f hb ( x, y ) = ( A − 1). f ( x, y ) + f s ( x, y ) Cuando A es igual a 1, obtenemos una imagen filtrada con una pasaaltos, y cuando A es mayor a 1, parte de la imagen original se añade al resultado del filtrado con pasaaltos, lo que recupera parcialmente las componentes de bajas frecuencias perdidas en el proceso de filtrado con pasaaltos. La última expresión del filtro high-boost es aplicable en general y no especifica cómo obtener la imagen filtrada con un pasaaltos. Si para ello elegimos el Laplaciano, entonces fhb(x,y) puede calcularse de la siguiente forma  A. f ( x, y ) − ∇ 2 f ( x, y ) f hb =  2  A. f ( x, y ) + ∇ f ( x, y ) si el coeficiente central de la máscara laplaciana es negativo si el coeficiente central de la máscara laplaciana es positivo El filtrado high-boost puede realizarse en un solo paso usando alguna de las máscaras de la figura 9. Figura 9: Máscaras usadas para el filtrado high-boost. El filtrado high-boost se aplica principalmente cuando la imagen original es más oscura que la deseada. Variando el coeficiente A, generalmente se puede obtener un incremento global del nivel de gris de la imagen. Esto se puede ver en la figura 10. a) b) Filtrado Espacial 11 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 d) e) Figura 10: a) Imagen original. b) Laplaciano de (a) calculado con la máscara 9 (b), usando A=0. c) Imagen realzada con el Laplaciano usando para ello la máscara 9 (b), A=1. d) Lo mismo que (c) pero usando A=1.7. La figura 10 (a) es una versión más oscura de la imagen de la figura 8 (c). La figura 10 (b) muestra el Laplaciano calculado con la máscara 9 (b), con A=0. La figura 10 (c) se obtuvo usando la máscara 9 (b) pero con A=1. Como era de esperar, se han resaltado las altas frecuencias en la imagen original (o sea, los bordes y las formas), pero la imagen obtenida sigue siendo tan oscura como la original. Por último, la figura 10 (d) muestra el resultado de emplear la máscara 9 (b) con A=1.7. Este resultado es mucho más aceptable ya que el nivel de gris promedio fue aumentado, haciendo a la imagen más clara y natural. Filtrado Espacial 12 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 Apéndice A continuación se presentarán algunos algoritmos utilizados para filtrar una imagen en el dominio espacial. A=double(imread('c:\MATLAB6p5\toolbox\images\imdemos\ic.tif','tif')); [f,c]=size(A); % Detección de bordes verticales for i=2:f-1 for j=2:c-1 C(i,j)=abs([1 1 1]*A((i-1):(i+1),j-1)-[1 1 1]*A((i-1):(i+1),j+1)); end end % Promediado con mascara de 3x3 for i=2:f-1 for j=2:c-1 D(i,j)=sum(sum(A((i-1):(i+1),(j-1):(j+1)))); D(i,j)=D(i,j)/9; end end % Laplaciano for i=2:f-1 for j=2:c-1 E(I,j)=4*A(i,j)-A(i-1,j)-A(i,j-1)-A(i,j+1)-A(i+1,j); end end Como vemos, existe más de una forma de implementar un filtro en los scripts de Matlab. Por supuesto que hay algunas que son más eficientes que otras pero como desventaja no son soportadas en otros lenguajes de programación. Por ejemplo, la función sum de Matlab está muy optimizada pero difícilmente esté implementada en otro lenguaje. Lo mismo sucede con el producto de matrices. Ahora se va a presentar una función de Matlab que realiza la correlación de una imagen con una máscara dada, pero es aconsejable hacer antes algunos algoritmos de filtrado de manera genérica y aceptable en cualquier lenguaje de programación. La función de la que hablamos es la que sigue: B=filter2(N,A,’same’); donde N representa el núcleo o máscara y A la imagen que se desea filtrar. El parámetro ‘same’ se utiliza para que la función devuelva la parte central de la correlación (que es del mismo tamaño que la imagen A). Por ejemplo, para promediar una imagen con un núcleo de 3x3 se hace lo siguiente: Np=1/9*ones(3); Ap=filter2(N,A,’same’); Filtrado Espacial 13 Universidad Nacional de Quilmes – Ing. en Automatización y Control Industrial Cátedra: Visión Artificial Septiembre de 2005 Para detectar bordes horizontales, la máscara es la que sigue (operador de Prewitt): Nh=[1 1 1;0 0 0;-1 -1 -1]; Laplaciano: Ng=[0 1 0;1 –4 1;0 1 0]; Ó Ng=[1 1 1;1 –8 1;1 1 1]; Por último, se presentarán dos formas de implementar el filtro de mediana. Primero, tomemos una imagen cualquiera y agreguémosle ruido del tipo sal y pimienta: A=double(imread('circuit.tif','tif')); [f,c]=size(A); Ar=A; for i=1:f*c if rand<0.05 Ar(i)=0; end if rand>0.95 Ar(i)=255; end end Veamos ahora una forma de aplicar el filtro de mediana con una máscara de 3x3: F=zeros(size(A)); for i=2:f-1 for j=2:c-1 F(i,j)=median([Ar(i-1,(j-1):(j+1)) Ar(i,(j-1):(j+1)) Ar(i+1,(j-1):(j+1))]); end end El algoritmo anterior simplemente forma un vector concatenando 3 filas de 3 elementos cada una, que corresponden a una ventana de 3x3 de la matriz Ar, y luego obtiene la mediana de ese vector por medio de la función de Matlab median. Como no podía ser de otra manera, Matlab también tiene una función que aplica el filtro de mediana a una imagen cualquiera para un tamaño de ventana dado. Es la siguiente: Fmat=medfilt2(Ar,[3 3]); Donde el vector [3 3] indica que la ventana deseada es de 3x3. Comparemos los resultados: figure, figure, figure, figure, imshow(uint8(A)) imshow(uint8(Ar)) imshow(uint8(F)) imshow(uint8(Fmat)) Filtrado Espacial 14