rayones - Cómo eliminar un arañazo de una imagen usando matlab
quitar rayones celular gorilla glass 5 (3)
Digamos que tengo esta imagen esta :
Con un rasguño negro y quiero eliminarlo de mi imagen. Sé que es ruido. He intentado el filtro de barrio y también el filtro gaussiano pero no tuve éxito.
Si conoce la ubicación del rasguño, este problema se conoce como pintar , y hay algoritmos muy sofisticados para eso. Entonces, un enfoque sería detectar el arañazo tan bien como sea posible, y luego usar un algoritmo de pintura estándar sobre él. He jugado un poco con tu imagen en Mathematica:
Primero apliqué un filtro mediano a la imagen. Como descubriste por ti mismo, esto elimina el arañazo, pero también elimina muchos detalles. Sin embargo, la diferencia entre la imagen original y la mediana es un buen indicador de su rasguño:
Cuando binario esta imagen con un umbral seleccionado manualmente, obtengo un detector de arañazos rápido y sucio:
Si tiene más conocimiento sobre cómo se ven sus arañazos, puede mejorar mucho este detector. por ejemplo, ¿los arañazos son siempre oscuros? ¿Siempre tienen alto contraste? ¿Son siempre curvas suaves, es decir, su curvatura siempre es baja? - Cada una de estas propiedades se puede medir de alguna manera, por lo que combinaría estas medidas en una sola imagen y binarizaría eso.
Una pequeña mejora es eliminar los componentes pequeños:
Esto aún no es perfecto, pero el resultado es lo suficientemente bueno como para usarlo como máscara de pintura:
Esto eliminará algunos detalles, también, pero las diferencias son más difíciles de detectar.
Código completo de Mathematica:
difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]];
mask = DeleteSmallComponents[Binarize[difference, 0.15], 15];
Inpaint[sourceImage, mask]
EDITAR:
Si no tiene acceso a un algoritmo estándar de pintura (como Navier Stokes o Telea), el algoritmo de un pobre sería usar la imagen media filtrada en aquellas regiones donde la máscara es 1 (probablemente algo así como mask*sourceImage + (1-mask)*medialFilteredImage
en Matlab). Dependiendo de los datos de la imagen, la diferencia puede no valer la pena el esfuerzo extra de un algoritmo de "real" en la pintura:
Un filtro para Avisynth y un complemento para VirtualDub (mis dos herramientas de edición de video favoritas). Difícilmente será mejor que estos dos (Puedes aprender de ellos si realmente necesitas implementarlo tú mismo).