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?


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;

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.