Como aplicar bacias hidrográficas para segmentar imagens usando o matlab?

7

insira a descrição da imagem aqui

Como segmentar esta imagem usando a bacia hidrográfica para recuperar apenas as pessoas na imagem?

Eu fiz o seguinte até agora:

  1. Calculou um gradiente

insira a descrição da imagem aqui

  1. Calculada a transformação da bacia hidrográfica

insira a descrição da imagem aqui

Meu código:

  clear;
I=imread('inpaint.jpg');
I=rgb2gray(I);

hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);


figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)')
L = watershed(gradmag);
% Lrgb = label2rgb(L);
 figure, imshow(L), title('Watershed transform of gradient magnitude (Lrgb)')

Consegui aplicar a bacia hidrográfica

insira a descrição da imagem aqui

Queria saber como posso delinear meus objetos na imagem original para que pareçam segmentados?

vini
fonte
Um pouco tangencial, mas você está usando a licença de processamento de imagem do MATLAB de universidade ou empresa? Eu olhei para ele e parece muito caro: - /
Spacey
Sim, minha universidade tem uma licença ...
vini
11
O @Mohammad Octave possui quase todas as funções da caixa de ferramentas Processamento de Imagem do MATLAB e, em muitos casos, o código é compatível.
@reve_etrange Ah, obrigado por isso! Vou ter que olhar para ele - meu antigo chefe sempre disse coisas ruins sobre oitava como ele não pode segurar grandes matricies, não é agradável GUI como Matlab, etc etc, então eu nunca olhei para ele ...
Spacey
@Mohammad Além disso, a caixa de ferramentas de processamento de imagem do Scilab está crescendo e prosperando. Não tenho certeza se ainda oferece o que você está procurando.
Phonon

Respostas:

8

Lembre-se de que a transformação da bacia hidrográfica trata sua entrada como um mapa topográfico e simula a inundação dessa topografia com água. As "bacias hidrográficas" ou "regiões da bacia hidrográfica" são então as partes do mapa que "retêm água" sem derramar em outras regiões.

A magnitude do gradiente é uma função de segmentação ruim como está; o ruído e os contornos abertos levam a uma super-segmentação extrema da imagem. Podemos tentar uma série de operações morfológicas com a intenção de criar marcadores aproximados de primeiro plano e de fundo e usá-los para remover as partes espúrias do gradiente.

%# Normalize.
g = gradmag - min(gradmag(:));
g = g / max(g(:));

th = graythresh(g); %# Otsu's method.
a = imhmax(g,th/2); %# Conservatively remove local maxima.
th = graythresh(a);
b = a > th/4; %# Conservative global threshold.
c = imclose(b,ones(6)); %# Try to close contours.
d = imfill(c,'holes'); %# Not a bad segmentation by itself.
%# Use the rough segmentation to define markers.
g2 = imimposemin(g, ~ imdilate( bwperim(a), ones(3) );
L = watershed(g2);

Isso funciona bem. Você recebe dois grupos de pessoas e suas sombras como regiões, com um pouco de barulho.

Você pode elaborar seus objetivos? Ou seja, você segmentará muitas imagens diferentes ou apenas imagens altamente semelhantes a este exemplo? Você precisa ignorar as sombras e separar as duas pessoas que se sobrepõem?

Tentarei atualizar a resposta se você responder a essas perguntas.

Sobreposição de segmentação

Você perguntou como sobrepor uma segmentação. Uma maneira é usar as linhas da bacia hidrográfica para especificar pixels no original e defini-los para uma cor brilhante.

boundaries = L == 0;
I(boundaries) = 255;
reve_etrange
fonte
Todas minhas imagens têm as mesmas condições como retratado por este limiar image..Isn't considerado como um mau meio de segmentação e sim eu gostaria de mostrá-los como objetos diferentes
vini
O limiar pode produzir resultados ímpares em imagens com histogramas ímpares, e um determinado limite geralmente é útil apenas para uma única imagem, mas não há nada inerentemente "ruim" neles. O método de Otsu deve estar na caixa de ferramentas de qualquer codificador de visão computacional - apenas não o aplique cegamente.
Sim, está presente no entanto, os resultados não foram satisfatórios quando eu apliquei
vini
Verifique meu resultado de segmentação, é bom o suficiente? =)
vini
@ vini: Qualquer segmentação de imagem requer algum tipo de limiar em algum momento, já que você precisará decidir se um objeto faz parte do primeiro plano ou do fundo, eventualmente.
Jonas