televisor rayones rayada quitar pulir para pantallas pantalla liquido glass como celular casero carro carcasa image matlab image-processing

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.


Mi resultado usando un filtro mediano con ImageJ


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: