Remover sombras da imagem

7

Quero extrair apenas as uvas das imagens. Infelizmente, às vezes eu não entendo exatamente as uvas.

Eu tenho um código que não funciona bem em todos os casos. Às vezes, não diferencia entre as sombras e as uvas.

A imagem de entrada de exemplo:

insira a descrição da imagem aqui

O resultado que estou obtendo:

insira a descrição da imagem aqui

E este é o meu 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
fonte
Eu acho que esta questão é mais apropriado em SE DSP ...
bla
@ Nate, obrigado .. mas o que significa SE DSP? Eu li que é um ambiente pequeno, mas eu realmente não sei: / você pode me dizer, por favor?
Alon, testei seu código e realmente não entendo o que não é exato. filtra muito bem as sombras.
bla
3
@Alon Shmiel O par de entrada / saída que você forneceu parece produzir bons resultados. Talvez você possa apontar especificamente onde está o problema nessa saída específica ou, alternativamente, postar um par de imagens de entrada / saída em que os problemas são mais facilmente visíveis?
Penelope
11
Penso que o problema original de Alon é o de remover as sombras escuras diretamente abaixo de cada uva e não as que parecem um cilindro alongado. Você precisa segmentar com precisão a uva sozinha - as formas parecem estranhas e não ovais ou circulares das sombras. Ou não são sombras, mas a pele mais fina da uva que refrata a luz para se parecer com isso?

Respostas:

8

Isto é o que seu código produz (usando o mapa de cores (quente) com limites em branco obtidos do IM2): insira a descrição da imagem aqui

Eu acho que as sombras são bem tratadas, por que você acha que seu código não percebe entre sombra e uvas?

Este é o código usado para produzir esta imagem

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
fonte
11
Eu concordo, as sombras parecem boas. Em vez disso, são os destaques das uvas (veja as uvas 4 e 5 na linha superior, por exemplo) que causam algumas irregularidades.
Junuxx
11
Esta resposta dá a melhor explicação. @Alon Shmiel: Seja mais específico sobre o problema em relação às sombras e poste um exemplo em que não se encaixa. Atenciosamente
mchlfchr 26/10/12