Eliminar sombras de la imagen

7

Quiero extraer solo las uvas de las imágenes. Desafortunadamente, a veces no obtengo las uvas exactamente.

Tengo un código que no funciona bien en todos los casos. A veces, no diferencia entre las sombras y las uvas.

La imagen de entrada de ejemplo:

ingrese la descripción de la imagen aquí

El resultado que estoy obteniendo:

ingrese la descripción de la imagen aquí

Y este es mi código:

RGB = imread('DSC02807.JPG');
GRAY = rgb2gray(RGB);

threshold = graythresh(GRAY);
originalImage = im2bw(GRAY, threshold);

originalImage = bwareaopen(originalImage,250);

SE = strel('disk',10);
IM2 = imclose(originalImage,SE);

originalImage = IM2;

imshow(originalImage);
Alon Shmiel
fuente
Creo que esta pregunta es más apropiada en SE dsp ...
bla
@nate, gracias ... pero, ¿qué significa SE dsp? Leí que es un entorno pequeño, pero realmente no lo sé: ¿me puede decir por favor sobre eso?
Alon, he probado tu código, y realmente no entiendo lo que no es exacto al respecto. filtra las sombras muy bien.
bla
3
@Alon Shmiel El par de entrada / salida que proporcionó parece producir buenos resultados. ¿Quizás podría señalar específicamente dónde está el problema en esta salida en particular, o, alternativamente, publicar un par de imágenes de entrada / salida donde los problemas sean más fácilmente visibles?
Penélope
1
Creo que el problema original de Alon's es eliminar las sombras oscuras directamente debajo de cada uva y no las que parecen un cilindro alargado. Necesita segmentar con precisión la uva sola: las formas se ven raras y no ovales o circulares debido a las sombras. ¿O no son sombras sino la piel exterior más delgada de la uva que refracta la luz para que se vea así?

Respuestas:

8

Esto es lo que produce su código (usando un mapa de colores (hot) con límites blancos que se obtienen de IM2): ingrese la descripción de la imagen aquí

Creo que las sombras están bien tratadas, ¿por qué crees que tu código no se nota entre sombras y uvas?

Este es el código utilizado para producir esta imagen.

bw=IM2<1;
[B,L] = bwboundaries(bw,'noholes'); % fill any holes, so that regionprops can be used to estimate
imagesc(GRAY); hold on
for k = 1:length(B) 
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 1); hold on
end
colormap(hot(256))
bla
fuente
1
Estoy de acuerdo, las sombras se ven bien. En cambio, son los aspectos más destacados de las uvas (ver uvas 4 y 5 en la línea superior, por ejemplo) lo que causa algunas irregularidades.
Junuxx
1
Esta respuesta da la mejor explicación. @Alon Shmiel: Sea más específico sobre el problema con respecto a las sombras y publique un ejemplo donde no se ajuste. Saludos cordiales
mchlfchr