¿Cómo eliminar el resplandor y el brillo de una imagen (preprocesamiento de imagen)?

19

Tengo una imagen

ingrese la descripción de la imagen aquí

¿Hay alguna forma de eliminar las manchas blancas brillantes? Por favor ayuda gracias

Editar:

Después de operar con gaussiano y luego mostrar usando imagesc, obtenga el siguiente resultado que muestra claramente los puntos rojos brillantes ¿Cómo me deshago de ellos?

ingrese la descripción de la imagen aquí

Canal rojo:

ingrese la descripción de la imagen aquí

Canal verde:

ingrese la descripción de la imagen aquí

Canal azul:

ingrese la descripción de la imagen aquí

Edición 2:

Detección de defectos con filtro Gabor

ingrese la descripción de la imagen aquí

Su histograma:

ingrese la descripción de la imagen aquí

¿Cómo calcular su umbral apropiado de forma adaptativa?

vini
fuente
¿Se conoce la configuración de las luces?
nav
No, en realidad, ¿no hay forma de eliminar estos puntos a través del filtrado, etc.?
vini
44
En general, este es un problema mal planteado. Tienes demasiadas incógnitas y tendrás que recurrir a una solución basada en heurística. Buena suerte escogiendo una respuesta.
navegue el

Respuestas:

19

Supongamos que las porciones de deslumbramiento son las únicas áreas saturadas en la imagen. La detección se puede realizar al limitar la intensidad (código en Mathematica):

saturated = Binarize[ColorConvert[img, "Grayscale"], .9]

ingrese la descripción de la imagen aquí

Entonces solo necesitamos reemplazar las partes de la imagen alrededor de la máscara de saturación (la función morfológica amplía la máscara Dilation). La incrustación usando síntesis de textura (usando la función Inpaint) parece funcionar bien en este ejemplo, aunque no puedo probarlo como entrada a su algoritmo de detección de defectos:

Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

ingrese la descripción de la imagen aquí

Matthias Odisio
fuente
¿Hay un método de pintura en matlab?
vini
Lo siento, no sé la respuesta a eso.
Matthias Odisio
La detección de defectos es perfecta, sin embargo, la pintura debe implementarse ya que no hay una función integrada en MATLAB
vini
1
Me alegra que la respuesta haya resuelto el problema. En cuanto a la incrustación en matlab, probablemente sea adecuada para una pregunta independiente sobre SO. Consulte stackoverflow.com/search?q=matlab+inpainting como inicio.
Matthias Odisio
2
La incrustación se puede hacer con lo que comúnmente se conoce como "Tutorial de mezcla de imágenes de Poisson" aquí , código de Matlab y ejemplos aquí .
Maurits
4

Esta puede ser una respuesta un poco simplista, pero ¿podría simplemente umbral? p.ej:

img = imread('daRNS.png');
imflat = img; 
imflat(img>150) = 150; 
imagesc(imflat)

resultados en:

imagen aplanada

Obviamente, sería mejor seleccionar el umbral de forma adaptativa. Por ejemplo, podría mirar el histograma de la imagen:

hist(double(img(:)),0:255)

histograma

e intente seleccionar un umbral apropiado basado en eso.

tdc
fuente
por favor revise mi edición 2
vini
@vini Trate de ver el corte donde se explica el 90% de la señal
tdc
podría limitarme, pero mi objetivo final es la detección de defectos ... lo que no ayuda de ninguna manera si lo
umbralo
3
Pero su pregunta es "¿Cómo eliminar el resplandor y el brillo de una imagen (preprocesamiento de imagen)?" no cómo detectar defectos, que es otra pregunta (más difícil). @mrkulk a continuación parece haber proporcionado una respuesta casi completa a esa pregunta también a continuación.
tdc
Sí, mi pregunta es que ahora cómo detectar defectos, sin embargo, este resplandor dificulta el resultado
vini
2

ingrese la descripción de la imagen aquíSin información de iluminación, es difícil. Sin embargo, si se conoce la forma del objeto en la imagen, puede configurar una plantilla de forma del resplandor blanco (gaussiano) y hacer una ventana deslizante para encontrar la posible detección del resplandor (seguido de una mezcla de colores del área adyacente). Perceptivamente, inferimos la forma 3D de las imágenes usando sombreado. Si la forma del sombreado puede dar gradiente a la superficie, podríamos hacer una ventana deslizante y verificar nuestra plantilla de deslumbramiento en cada ubicación.

Después de la detección de bordes astutos: -

ingrese la descripción de la imagen aquí

Básicamente, la superposición (área de superposición máxima) entre la imagen n. ° 1 y n. ° 2 será el defecto.

mrkulk
fuente
Describiendo lo que estoy tratando de hacer: estoy aplicando un filtro gabor que se usa principalmente para la segmentación de texturas para encontrar defectos en las frutas, sin embargo, el resplandor plantea un problema ya que el filtro muestra las dos manchas blancas también como un defecto potencial que idealmente no quiero
vini
¿intentaste simplemente tomar canales individuales (de RGB o YUV) y simplemente operarlos?
mrkulk
La imagen más reflejada es la del canal verde. ¿Cómo lo opero y lo corrijo?
vini
Intenté tomar la imagen de borde (canny) con un umbral de 0.5. Como era de esperar, no vi el resplandor en la imagen. Esto debería darle un fuerte previo para las regiones que NO contienen deslumbramiento.
mrkulk
¿Cómo me ayudará a producir una imagen sin reflejos?
vini
0

Mi opinión es que este es un problema de visión artificial en el que debe controlar la iluminación y tener una buena idea del brillo máximo de un brillo de píxeles sin reflejos en la imagen. La detección de defectos es generalmente un problema de visión artificial en lugar de un problema de visión por computadora.

Lo que vemos como resultado de la iluminación es una adición de reflejos de luz especulares y difusos (más algo de emisión pero es insignificante aquí).

El componente especular es el resplandor, en una superficie brillante como esta manzana, es mucho más que el reflejo difuso (> 10x)

Esto significa que si configura su iluminación, ganancia y exposición antes de esto, en una superficie difusa, puede estar seguro de que nada estará ni siquiera cerca de saturado. Por lo tanto, el uso de un umbral fijo es en realidad la solución preferida aquí, siempre que haya probado con suficientes datos que "ningún píxel que no contenga deslumbramiento" estaría por encima del umbral. En esencia, está configurando las condiciones de iluminación y los parámetros de la cámara de modo que la clasificación de un píxel se vuelva trivial, en este caso realizada por un umbral simple, en lugar de una función de píxel más compleja que aprendió la máquina.

Me gusta el enfoque de "vini", no hay necesidad real de mostrar los planos RGB. Solo un simple umbral de escala de grises realmente funcionaría aquí.

1- diseñas las condiciones de iluminación, no la ambiente

2- hacer que el trabajo de clasificación sea extremadamente trivial (umbral)

3- mide la función

4- comparar con tolerancia

Denis
fuente
0

Convierta primero al espacio de color de laboratorio, mapminmax, luego use el primer canal de luminosidad. Eso reduce los problemas de color. Luego, use algunos umbrales en el 80% de los píxeles más brillantes. Verifique y pruebe si hay una inmersión en el histograma, el mejor umbral está cerca del fondo de la inmersión. Si no hay min local en esta región, su imagen probablemente tenga reflejos mínimos ...... Martin

Mercado
fuente