Watershed

programador

O algoritmo watershed é uma técnica poderosa de segmentação. Ele inspira-se na topografia e no fluxo da água. Primeiramente, a imagem é interpretada como um relevo tridimensional. A intensidade de cada pixel representa a altitude. Regiões escuras são vales (mínimos locais). Regiões claras, por outro lado, são montanhas (máximos locais). O algoritmo simula a inundação a partir dos vales. A água sobe gradualmente e preenche as bacias de captação. Barreiras são construídas onde bacias diferentes se encontram. Estas barreiras formam as linhas de watershed (divisores de água). Consequentemente, o algoritmo segmenta a imagem em regiões distintas.

funcionamento do algoritmo de inundação

O algoritmo de inundação ocorre em níveis crescentes de intensidade. Primeiramente, identificam-se todos os mínimos locais da imagem. Cada mínimo local torna-se uma “semente” de uma bacia. Em seguida, a água sobe uniformemente a partir destas sementes. Quando águas de bacias diferentes estão prestes a se encontrar, uma barreira é construída. Este processo continua até que toda a imagem seja inundada. As barreiras finais são as linhas de watershed. Por exemplo, o algoritmo separa objetos que se tocam. Células em uma lâmina de microscopia são um caso clássico. O resultado são contornos fechados de um pixel de espessura.

desafios: oversegmentation e uso de marcadores

O watershed sofre com um problema conhecido: oversegmentation. Ruído e texturas criam muitos mínimos locais falsos. Consequentemente, o algoritmo produz centenas de pequenas regiões indesejadas. Uma solução eficaz é o uso de marcadores (markers). Primeiramente, o usuário ou um pré-processamento identifica os objetos de interesse. Estes objetos tornam-se os únicos mínimos permitidos. Por exemplo, pode-se usar a abertura morfológica para remover ruídos. Em seguida, o algoritmo watershed roda apenas com estes marcadores. O resultado elimina a oversegmentation e segmenta apenas os objetos desejados. Portanto, marcadores são essenciais para aplicações práticas.

quando utilizar o algoritmo watershed

Utilize o watershed quando precisar separar objetos que se tocam. Por exemplo, células em imagens biológicas ou bolhas em líquidos. Outra aplicação é na segmentação de relevos em imagens de satélite. O algoritmo também é útil para extrair contornos de objetos irregulares. Contudo, evite o watershed em imagens muito ruidosas sem pré-processamento. A oversegmentation torna o resultado inútil sem o uso de marcadores. Combine o watershed com operadores morfológicos para melhores resultados. Por exemplo, use a abertura para remover ruídos e o fechamento para conectar regiões. Além disso, o gradiente morfológico da imagem é frequentemente usado como entrada. Em resumo, escolha o watershed quando a topografia da imagem for relevante e os objetos se tocarem.

Corte de Grafos (Graph Cuts)

programador

O corte de grafos é uma técnica poderosa para segmentação de imagens. Ela modela a imagem como um grafo ponderado. Cada pixel torna-se um nó (vértice) do grafo. Arestas conectam pixels vizinhos com pesos de similaridade. Dois nós especiais representam o objeto (fonte) e o fundo (sumidouro). Primeiramente, o algoritmo encontra o corte de custo mínimo no grafo. Este corte separa a fonte do sumidouro de forma ótima. Consequentemente, os nós de cada lado definem a segmentação final. Portanto, o corte de grafos resolve um problema de otimização global.

modelagem do problema como grafo

A modelagem correta do grafo é crucial para o sucesso. Primeiramente, nós (pixels) conectam-se por arestas neig(h)boças (n-links). O peso destas arestas reflete a similaridade entre pixels vizinhos. Pixels semelhantes (mesma cor/textura) recebem pesos altos. Pixels diferentes, por outro lado, recebem pesos baixos. Além disso, nós conectam-se aos terminais fonte e sumidouro (t-links). O peso dos t-links reflete a probabilidade de pertencer ao objeto ou fundo. Por exemplo, sementes fornecidas pelo usuário definem estas probabilidades. O corte mínimo, portanto, separa o objeto do fundo cortando arestas de baixo peso.

algoritmo de corte mínimo e fluxo máximo

O teorema do fluxo máximo / corte mínimo fundamenta este método. Ele afirma que o corte mínimo equivale ao fluxo máximo no grafo. Primeiramente, o algoritmo envia fluxo da fonte para o sumidouro. O fluxo máximo satura as arestas de menor capacidade. Estas arestas saturadas formam o corte mínimo do grafo. Algoritmos eficientes como Boykov-Kolmogorov resolvem este problema rapidamente. Por exemplo, imagens de até 1 megapixel são segmentadas em segundos. A vantagem é a garantia de encontrar o mínimo global. Diferentemente de métodos iterativos, o corte de grafos não fica preso em mínimos locais. Portanto, a solução é globalmente ótima para a função de energia definida.

vantagens e quando utilizar graph cuts

O corte de grafos oferece várias vantagens significativas. Primeiramente, ele produz segmentações precisas mesmo com bordas fracas. Além disso, o método lida bem com ruído e texturas complexas. A segmentação é globalmente ótima para a função de energia escolhida. Utilize graph cuts quando precisar de segmentações interativas de alta qualidade. Por exemplo, separar o objeto do fundo em fotografias (matting). Outra aplicação é na segmentação de órgãos em imagens médicas. O usuário fornece algumas sementes (pinceladas) no objeto e no fundo. Contudo, o método é computacionalmente mais caro que limiarização simples. Portanto, evite-o em aplicações embarcadas de tempo real. Em resumo, escolha graph cuts quando precisão for mais importante que velocidade.

LinkedIn
Share
Instagram