El filtro Kuwahara es un filtro de suavizado no lineal que se utiliza en el procesamiento de imágenes para la reducción adaptativa del ruido. La mayoría de los filtros que se utilizan para suavizar imágenes son filtros de paso bajo lineales que reducen eficazmente el ruido pero también difuminan los bordes. Sin embargo, el filtro Kuwahara puede aplicar suavizado a la imagen mientras conserva los bordes.
Lleva el nombre de Michiyoshi Kuwahara, Ph.D., quien trabajó en las Universidades de Kioto y Osaka Sangyo en Japón , desarrollando las primeras imágenes médicas del músculo cardíaco dinámico en los años 1970 y 1980.
Supongamos que se trata de una imagen en escala de grises y que tomamos una ventana cuadrada de tamaño centrado alrededor de un punto de la imagen. Este cuadrado se puede dividir en cuatro regiones cuadradas más pequeñas, cada una de las cuales será [1]
donde es el producto cartesiano . Los píxeles ubicados en los límites entre dos regiones pertenecen a ambas regiones, por lo que hay una ligera superposición entre las subregiones.
Se calculan la media aritmética y la desviación estándar de las cuatro regiones centradas alrededor de un píxel (x,y) y se utilizan para determinar el valor del píxel central. La salida del filtro Kuwahara para cualquier punto se expresa mediante donde .
Esto significa que el píxel central tomará el valor medio del área que sea más homogénea. La ubicación del píxel en relación con un borde juega un papel importante a la hora de determinar qué región tendrá la mayor desviación estándar. Si, por ejemplo, el píxel está ubicado en el lado oscuro de un borde, lo más probable es que tome el valor medio de la región oscura. Por otro lado, si el píxel está ubicado en el lado más claro de un borde, lo más probable es que tome un valor claro. En el caso de que el píxel esté ubicado en el borde, tomará el valor de la región más suave y menos texturizada. El hecho de que el filtro tenga en cuenta la homogeneidad de las regiones garantiza que conservará los bordes mientras que el uso de la media crea el efecto de desenfoque.
De manera similar al filtro de mediana, el filtro Kuwahara utiliza un enfoque de ventana deslizante para acceder a cada píxel de la imagen. El tamaño de la ventana se elige de antemano y puede variar según el nivel de desenfoque deseado en la imagen final. Las ventanas más grandes suelen dar como resultado la creación de imágenes más abstractas, mientras que las ventanas pequeñas producen imágenes que conservan sus detalles. Por lo general, se eligen ventanas cuadradas con lados que tienen un número impar de píxeles para lograr simetría. Sin embargo, existen variaciones del filtro Kuwahara que utilizan ventanas rectangulares. Además, no es necesario que las subregiones se superpongan o tengan el mismo tamaño siempre que cubran toda la ventana.
En el caso de las imágenes en color, no se debe aplicar el filtro a cada canal RGB por separado y luego volver a combinar los tres canales de color filtrados para formar la imagen RGB filtrada. El problema principal con esto es que los cuadrantes tendrán diferentes desviaciones estándar para cada uno de los canales. Por ejemplo, el cuadrante superior izquierdo puede tener la desviación estándar más baja en el canal rojo, pero el cuadrante inferior derecho puede tener la desviación estándar más baja en el canal verde. Esta situación daría como resultado que el color del píxel central se determine por diferentes regiones, lo que podría generar artefactos de color o bordes más borrosos.
Para superar este problema, para las imágenes en color se debe utilizar un filtro Kuwahara ligeramente modificado. La imagen se convierte primero a otro espacio de color, el espacio de color HSV . El filtro modificado actúa entonces sólo sobre el canal de "brillo", la coordenada de valor en el modelo HSV. La varianza del "brillo" de cada cuadrante se calcula para determinar el cuadrante del que se debe tomar el color filtrado final. El filtro producirá una salida para cada canal que corresponderá a la media de ese canal del cuadrante que tuvo la desviación estándar más baja en "brillo". Esto garantiza que sólo una región determinará los valores RGB del píxel central.
ImageMagick utiliza un enfoque similar, pero utilizando el Luma Rec. 709 como métrica de brillo. [2]
Usando estadísticas Usando imágenes "Calcula un color promedio a partir de una lista de colores"rgbAverage ( colores ) = RGB ( suma ( mapa ( c -> c . r , colores )) / longitud ( colores ), suma ( mapa ( c -> c . g , colores )) / longitud ( colores ), suma ( mapa ( c -> c . b , colores )) / longitud ( colores ) );""" kuwahara(yo, tamaño_de_ventana)Aplica el filtro kuwahara a una imagen `I`, utilizando un cuadrado de ventana de tamaño `window_size`"""función kuwahara ( I , tamaño_ventana ) # Convierte la imagen a un espacio de color hsv# (necesario para ejecutarse en imágenes en color)hsv = VHS . ( yo ) # Obtiene el valor de brillo como valores[y, x]valores = canalvista ( float . ( hsv ))[ 3 , : , : ] # Para Rec.601 Luma, reemplace las dos líneas anteriores con: # valores = Gris.(I)# Crea una imagen vacía de las mismas dimensiones que la entrada imagen_resultante = similar ( I ) # El tamaño de cada cuadrante de la ventana.tamaño_cuadrante = Int ( ceil ( tamaño_ventana / 2 )) # (y, x) bucle sobre la imagen original para y en 1 : tamaño ( I , 1 ) para x en 1 : tamaño ( I , 2 ) # La posición superior izquierda de la ventanatl_x = x - ( tamaño de ventana ÷ 2 ) tl_y = y - ( tamaño de ventana ÷ 2 ) # Función que mantiene un número entre 1 y el tamaño de la imagen# (se asegura de que todas las posiciones que estamos usando sean válidas)c1 ( i ) = mapa ( j -> abrazadera ( j , 1 , tamaño ( valores , 1 )), i ) c2 ( i ) = mapa ( j -> abrazadera ( j , 1 , tamaño ( valores , 2 )), i ) # Las posiciones de cada cuadrantecuadrante_a = [ c1 ( tl_y : tamaño_cuadrante + tl_y ), c2 ( tl_x : tl_x + tamaño_cuadrante )] cuadrante_b = [ c1 ( tl_y : tamaño_cuadrante + tl_y ), c2 ( tl_x + tamaño_cuadrante : tl_x + tamaño_ventana )] cuadrante_c = [ c1 ( tl_y + tamaño_cuadrante : tl_y + tamaño_ventana ), c2 ( tl_x : tl_x + tamaño_cuadrante )] cuadrante_d = [ c1 ( tl_y + tamaño_cuadrante : tl_y + tamaño_ventana ), c2 ( tl_x + tamaño_cuadrante : tl_x + tamaño_ventana )] # Desviación estándar de cada cuadranteσ_a = std ( valores [ cuadrante_a ... ]) σ_b = std ( valores [ cuadrante_b ... ]) σ_c = std ( valores [ cuadrante_c ... ]) σ_d = std ( valores [ cuadrante_d ... ]) # Seleccione el cuadrante con la desviación estándar más pequeñacuadrantes = [ cuadrante_a , cuadrante_b , cuadrante_c , cuadrante_d ] mín = argmín ([ σ_a , σ_b , σ_c , σ_d ]) cuadrante = cuadrantes [ min ] # El píxel que estamos procesando recibe el promedio del cuadrantepíxeles = I [ cuadrante ... ] imagen_resultante [ y , x ] = rgbAverage ( píxeles ) fin fin devolver imagen_resultante fin# Código de prueba con una imagen de muestraurl = "https://upload.wikimedia.org/wikipedia/commons/7/73/León_esperando_en_Namibia.jpg" Descargar ( url , "lion.jpg" ) img = carga ( "león.jpg" ) tamaño de ventana = 13 resultado = kuwahara ( img , tamaño_ventana ) guardar ( "resultado.png" , resultado )
Originalmente, el filtro Kuwahara se propuso para su uso en el procesamiento de imágenes angiocardiográficas RI del sistema cardiovascular. [3] El hecho de que se conserven los bordes al suavizar lo hace especialmente útil para la extracción y segmentación de características y explica por qué se utiliza en imágenes médicas .
Sin embargo, el filtro Kuwahara también tiene muchas aplicaciones en la fotografía artística y de imágenes artísticas debido a su capacidad para eliminar texturas y afinar los bordes de las fotografías. El nivel de abstracción ayuda a crear un efecto de pintura deseable en las fotografías artísticas, especialmente en el caso de la versión de imagen en color del filtro. Estas aplicaciones han tenido un gran éxito y han fomentado investigaciones similares en el campo del procesamiento de imágenes para las artes.
Aunque la gran mayoría de aplicaciones han sido en el campo del procesamiento de imágenes, ha habido casos que utilizan modificaciones del filtro Kuwahara para tareas de aprendizaje automático como la agrupación en clústeres. [4]
El filtro Kuwahara se ha implementado en CVIPtools . [5]
El filtro Kuwahara, a pesar de sus capacidades de conservación de bordes, tiene ciertos inconvenientes.
El éxito del filtro Kuwahara ha impulsado el desarrollo de filtros suavizadores que mejoran los bordes. Se han propuesto varias variaciones para un uso similar, la mayoría de las cuales intentan solucionar los inconvenientes del filtro Kuwahara original.
El "filtro Kuwahara generalizado" propuesto por P. Bakker [7] considera varias ventanas que contienen un píxel fijo. A cada ventana se le asigna una estimación y un valor de confianza. El valor del píxel fijo toma entonces el valor de la estimación de la ventana con la confianza más alta. Este filtro no se caracteriza por la misma ambigüedad en presencia de ruido y logra eliminar los artefactos de bloque.
El filtro "Media de mínima varianza" (MLV), propuesto por MA Schulze [8], también produce resultados de suavizado que mejoran los bordes de las imágenes. De manera similar al filtro Kuwahara, supone una ventana de tamaño , pero en lugar de buscar entre cuatro subregiones de tamaño la que tenga la mínima varianza, busca entre todas las subregiones posibles. Esto significa que al píxel central de la ventana se le asignará la media de la subregión de entre todas las posibles que tenga la menor varianza.
El "filtro Kuwahara adaptativo", propuesto por K. Bartyzel, [9] es una combinación del filtro Kuwahara anisotrópico y el filtro de mediana adaptativo. En comparación con el filtro Kuwahara estándar, tanto los objetos como los bordes conservan una mejor calidad. A diferencia del filtro Kuwahara estándar, el tamaño de la ventana cambia según las propiedades locales de la imagen. Para cada una de las cuatro áreas básicas que rodean un píxel, se calculan la media y la varianza. Luego, el tamaño de la ventana de cada una de las cuatro áreas básicas se incrementa en 1. Si la varianza de una nueva ventana es menor que antes del cambio de tamaño de la ventana del filtro, entonces la media y la varianza del área básica tomarán los nuevos valores calculados. El tamaño de la ventana continúa incrementándose hasta que la nueva varianza sea mayor que la anterior, o se alcance el tamaño máximo de ventana permitido. Luego se compara la varianza de las cuatro áreas y el valor del píxel de salida es el valor promedio del área básica para la cual la varianza fue la más pequeña.
JE Kyprianidis también propuso un intento más reciente de suavizado de mejora de bordes. [6] La salida del filtro es una suma ponderada de los promedios locales con más peso dados los promedios de regiones más homogéneas.