# Segmentação (processamento de imagem)

Em visão computacional, segmentação se refere ao processo de dividir uma imagem digital em múltiplas regiões (conjunto de pixels) ou objetos, com o objetivo de simplificar e/ou mudar a representação de uma imagem para facilitar a sua análise. Segmentação de imagens é tipicamente usada para localizar objetos e formas (linhas, curvas, etc) em imagens.
O resultado da segmentação de imagens é um conjunto de regiões/objetos ou um conjunto de contornos extraídos da imagem (ver detecção de borda). Como resultado, cada um dos pixels em uma mesma região é similar com referência a alguma característica ou propriedade computacional, tais como cor, intensidade, textura ou continuidade. Regiões adjacentes devem possuir diferenças significativas com respeito a mesma característica(s).

## Tipos de Segmentação

* Baseadas em Formatos
** Detecção de Descontinuidades;
** Detecção de Pontos;
** Detecção de Linhas;
** Detecção de Bordas.
* Baseadas em Características dos Pixels
** Segmentação de Cores;
** Segmentação de Intensidades.
* Baseadas no Histograma
* Utilizando movimento

## Classificação

Os processos de segmentação podem ser classificados como automáticos, manuais ou semiautomáticos, sendo diferenciados pela fato de haver ou não intervenção humana. Nos processos automáticos todas as etapas são realizadas sem a ação humana. Geralmente são muito utilizados por robôs que tomam decisões a partir da interpretação das imagens obtidas, como exemplo tem-se a aplicação nos carros autônomos. Nos processos de segmentação manual, por outro lado, toda a segmentação é feita com o auxílio do usuário, cabendo a ele utilizar as ferramentas e técnicas que melhor se adequem a imagem e a sua necessidade, é frequentemente usada em situações muito específicas onde as condições exteriores como luminosidade e ruídos prejudiquem o uso dos algoritmos tradicionais, também é muito utilizada ao se fazer testes que buscam a melhoria e aperfeiçoamento das técnicas. Os processos semiautomáticos, por sua vez, contém etapas feitas automaticamente e etapas manuais, são na maioria das vezes utilizados quando em alguma etapa específica os processos automáticos não trouxeram bons resultados. É amplamente utilizado na medicina no diagnóstico de doenças.
Além dos processos tradicionais de segmentação, existem também métodos de segmentação treináveis que, através de Redes Neurais, permitem modelar conhecimentos humanos utilizados na segmentação manual sem que para isso seja necessário um imenso banco de dados. A segmentação treinável provém do processamento de pequenas áreas de uma imagem utilizando-se uma ou um conjunto de redes neurais. Após esse processamento, o mecanismo de tomada de decisão distingue as áreas da imagem de acordo com a categoria identificada pela rede neural. As PCNNs (Pulse-Coupled Neural Networks) são as redes neurais comumente utilizadas em segmentação de imagem, atuam de maneira com que cada neurônio na rede corresponda a um pixel, que recebe as informações de cor deste como um estímulo externo. Cada neurônio também se conecta com os neurônios vizinhos, recebendo estímulos locais deles. Estes estímulos são combinados em um sistema de ativação, que os acumula até que se exceda um limiar dinâmico, resultando em uma saída de pulso. As PCNNs possuem vantagens significativas comparadas aos meios convencionais de processamento de imagem como, por exemplo, robustez contra ruídos, entre outros.
Vários algoritmos e técnicas de segmentação de imagens foram desenvolvidos, não havendo porém uma solução geral para este problema. Muitas vezes para a resolução de um problema de segmentação de imagem é necessário a combinação das técnicas de modo à sua adaptação ao domínio do problema, realizando portanto um pré-processamento da imagem antes da segmentação.

## Métodos de pré-processamento da imagem
### Thresholding

Um dos métodos mais simples de segmentação de imagens, o thresholding é um algoritmo que após determinar um valor constante de intensidade, ele analisará cada pixel da imagem. Se a intensidade do pixel for maior que o valor devido o pixel passará a ser branco, se for menor será preto, fazendo assim uma imagem binaria.
Como exemplo a imagem abaixo apresenta diversos tons diferentes.
Com a utilização do método com um valor de constante de intensidade de 121, obtém-se a imagem a seguir, e abaixo dela está o histograma obtido pelo Software Fiji.
As técnicas de segmentação via Thresholding são tipicamente agrupadas em duas classes: thresholding local (comumente referido como adaptativo), e thresholding global. O primeiro consiste em aplicar diferentes níveis de threshold para cada ponto da imagem, de maneira a dividir a figura original em diversos "alvos" menores e processá-los individualmente, segundo suas particularidades. O segundo, como sugerido por sua denominação, consiste em aplicar um único nível de threshold para a imagem inteira.
Vários métodos populares são usados ​​na indústria, incluindo o método de entropia máxima, o método de Otsu (variância máxima) e o agrupamento k-means.
Recentemente, métodos foram desenvolvidos para imagens de tomografia computorizada (CT) por thresholding. A ideia chave é que, ao contrário do método de Otsu, os limiares são derivados das radiografias em vez da imagem (reconstruída).
Novos métodos sugeriram o uso de limiares não-lineares baseados em regras fuzzy multidimensionais. Nestes trabalhos a decisão sobre a adesão de cada pixel a um segmento é baseada em regras multidimensionais derivadas de lógica difusa e algoritmos evolutivos baseados em ambiente de iluminação de imagem e aplicação.

#### Exemplo de uso

Objetivo: Isolar a informação de temperatura mostrada no display.
Podemos notar que após a realização do threshold (parâmetros: 1 para valores maiores que 7; 0 para valores menores que 7), foi possível a obtenção da informação de temperatura de maneira isolada do resto da imagem.

### Fusão de Região Estatística (Statistical Region Merging SRM)

O método de fusão da região estatística (SRM) começa construindo o gráfico de pixels usando conectividade 4 com bordas ponderadas pelo valor absoluto da diferença de intensidade. Inicialmente, cada pixel forma uma única região de pixels. Em seguida, o SRM classifica essas arestas em uma fila de prioridade e decide se deseja mesclar ou não as regiões atuais que pertencem aos pixels da aresta usando um predicado estatístico.
Na fusão da região, as regiões são conjuntos de pixels com propriedades homogêneas e são iterativamente crescidas combinando regiões ou pixels menores, sendo os pixels regiões elementares (primordiais). Técnicas de crescimento/fusão de regiões geralmente trabalham com um teste estatístico para decidir a fusão de regiões. Um predicado de mesclagem usa esse teste e cria a segmentação com base em (essencialmente) decisões locais. Este local de decisões deve preservar propriedades globais, como os responsáveis ​​pelas unidades perceptivas da imagem.
Na figura ao lado (do lado esquerdo), a região gramada abaixo do castelo é uma dessas unidades, mesmo quando sua variabilidade é alta em comparação com as outras regiões da imagem. Nesse caso, um algoritmo razoável de mesclagem de região tem que encontrar um bom equilíbrio entre preservar esta unidade somado ao risco de overmerging para as regiões restantes. A figura da direita mostra o resultado de tal abordagem.

### Baseados em Histograma

Os métodos baseados em histograma são muito eficientes em comparação com outros métodos de segmentação de imagem, porque eles normalmente exigem apenas uma passagem pelos pixels. Nesta técnica, um histograma é calculado a partir de todos os pixels da imagem, e os picos e vales no histograma são usados ​​para localizar os clusters na imagem. Cor ou intensidade pode ser usada como medida.
Um refinamento dessa técnica é recursivamente aplicar o método de busca de histograma a clusters na imagem, a fim de dividi-los em clusters menores. Essa operação é repetida com clusters menores e menores até que não mais clusters sejam formados.
Uma desvantagem do método de busca de histograma é que pode ser difícil identificar picos e vales significativos na imagem.
As abordagens baseadas em histograma também podem ser rapidamente adaptadas para se aplicarem a vários quadros, mantendo sua eficiência de passagem única. O histograma pode ser feito de várias formas quando vários quadros são considerados. A mesma abordagem que é tomada com um quadro pode ser aplicada a múltiplos e, após os resultados serem mesclados, os picos e vales que anteriormente eram difíceis de identificar têm maior probabilidade de serem distinguíveis. O histograma também pode ser aplicado em pixels por pixel, onde as informações resultantes são usadas para determinar a cor mais frequente da localização do pixel. Essa abordagem segmenta com base em objetos ativos e em um ambiente estático, resultando em um tipo diferente de segmentação útil no acompanhamento de vídeo.

### Bordas

Nos métodos de segmentação orientados por bordas, a imagem é segmentada por meio da identificação das bordas ou transições no objeto. Esta abordagem procura explorar o fato de que há uma transmissão detectável entre duas regiões relacionadas, alguns métodos como os mais antigos usam operadores como, por o exemplo, o filtro de Canny, que é um algoritmo usado para detecção de contorno), para destacar os pixels que parecem pertencer a um contorno.
Os limites de regiões e as bordas estão intimamente relacionados, pois há frequentemente uma forte transição de intensidade nos limites da regiões. E por isso, as técnicas de detecção de bordas podem ser usadas como técnicas de segmentação. As regiões identificadas pela detecção de bordas são, as vezes, desconectadas, por isso, para segmentar um objeto de uma imagem, é necessário que as bordas formem figuras fechadas.
Para detecção, podem ser usados métodos como o operador Sobel e o operador Laplace, com esses operadores e o uso de gradiente, os pixels que pertencem a borda das imagens podem ser encontrados. Mas mesmo com esses operadores, eles geralmente são fracos e devem ser complementados por um algoritmo de rastreamento das bordas.

### Agrupamento (Clustering)

Consiste em particionar os dados individuais contidos na imagem alvo de acordo à suas características mais evidentes, tais como intensidade, valores em RGB, dimensões, distância euclidiana em relação ao próximo dado, ou outras propriedades. As regiões agrupadas são chamadas de “clusters”.
Diversos algoritmos são comumente implementados com o objetivo de segmentar imagens através desse princípio, o mais conhecido deles é o de k-médias.
Nele, um conjunto de pontos iniciais é determinado para representar os grupos (aleatoriamente, ou através de um método escolhido pelo programador) e cada pixel da imagem é então atribuído ao grupo cuja distância euclidiana entre o pixel e a média do grupo seja mínima, a média do grupo é então calculada novamente e o processo se repete, até que nenhum pixel mude de grupo durante a iteração.
Apesar de muito efetivo, o referido método não garante o resultado global ótimo, tendo sua eficácia condicionada à qualidade dos grupos iniciais escolhidos.

### Utilizando movimento

O movimento é uma poderosa pista usada por seres humanos e animais para a extração de um objeto de interesse de um fundo de detalhes irrelevantes, logo também é muito utilizada na segmentação. O modelo utilizado mais básico consiste na comparação pixel a pixel entre duas imagens, subsequentes, capturadas de um mesmo ambiente. Tal diferença pode ser expressa como:
$d_{ij}(x,y)={\begin{cases}1,&f(x,y,t_{i})-f(x,y,t_{i})>\theta \\0,&caso\ contrario\\\end{cases}}$
onde, $\theta$ é o limiar entre os tons de cinza, isto é na imagem obtida $d_{ij}$, só existiram os pixeis que apresentaram uma diferença de cor maior que $\theta$. Com isso a imagem obtida sera apenas a silhueta do objeto que se movimentou, porque o ambiente permanecera o mesmo e sera apagado com a diferença. Porem tal método possui algumas limitações: o ambiente nas duas imagens tem que possuir uma iluminação constante, o tempo entre as duas imagens tem que ser pequeno o suficiente para pegar apenas uma silhueta do objeto e não um borrão do mesmo e grande o suficiente para ser possível a observação do movimento. Uma possível melhora para esse método é a utilização de mais imagens, onde as diferenças entre elas são acumulativas, gerando uma imagem mais nítida do objeto e diminuindo os ruidos da imagem.

### Método de Otsu

Técnica que determina um limiar ótimo considerando uma imagem I, com bom funcionamento em imagens cujos histogramas são bi-modais. A ideia é aproximar o histograma de uma imagem por duas funções Gaussianas e escolher o limiar de forma a minimizar a variância intra-classes. Cada classe possui suas próprias características, ou seja, sua média e desvio-padrão. Considere uma imagem digital f, de dimensões M × N e quantizada em L níveis de cinza. O primeiro passo é calcular o histograma p da imagem, dado por pi = ni/ MN (1)
em que ni é a quantidade de pixels da imagem I que possuem a intensidade de cinza i, para i = 0, ..., L − 1. Assim, MN = n0 + n1 + ... + nL−1 e
$\textstyle \sum _{k=1}^{N}pi=1\displaystyle$ ,onde n=L-1 pi ≥ 0 (2)
Seja k o nível de cinza que particiona o histograma da imagem em duas classes C1 e C2, em que a primeira e a segunda classes compreendem os pixels cujos níveis de cinza pertencem ao intervalo [0, k] e [k + 1, L − 1]. Assim, podemos definir as probabilidades
* P1(k) é a probabilidade do n´ıvel de cinza k ser da classe C1
* P2(k) é a probabilidade do nível de cinza k ser da classe C2
P1(K)=$\textstyle \sum _{i=0}^{K}pi\displaystyle$
P2(K)=$\textstyle \sum _{i=K+1}^{h}pi\displaystyle$ ,onde h=L-1 (3)
Como o histograma ´e aproximado por duas funções Gaussianas,
m1(K)=$\textstyle \sum _{i=0}^{K}iP(i|c1)\displaystyle$
e utilizando a regra de Bayes, temos
m1(K)=$\textstyle \sum _{i=0}^{K}P(i|c1)P(i)/P(c1)\displaystyle$
P(C1) = P1(k), P(i) ´e o próprio pi e P(C1|i) ´e sempre 1, uma vez que i está no intervalo de cinza da própria classe C1. Assim
m1(K)=$\textstyle 1/P1(K)\sum _{i=0}^{K}iPi\displaystyle$
Similarmente, m2(K)=$\textstyle 1/P2(K)\sum _{i=k+1}^{h}iPi\displaystyle$ onde h=L-1
Por sua vez, a variância para cada distribui¸c˜ao de probabilidade pode ser determinada como
$\sigma ^{2}=1/P1(K)\sum _{i=0}^{k}(m1(K)-p1)^{2}$
$\sigma 2^{2}=1/P2(K)\sum _{i=k+1}^{h}(m2(K)-p1)^{2}$ onde h=L-1
Por fim, determina-se a variância intra-classes em relação ao nível de cinza k
$\sigma c^{2}=\sigma 1^{2}(K)P1(K)+\sigma 2^{2}(K)P2(K)$
Após calcular $\sigma c^{2}$ para todos os valores de k, determina-se o limiar ótimo k∗ de acordo com a Eq. :
$K^{*}=\min \sigma c^{2}(K)$ , 0<k<L-1

## Etapa no processamento de imagem

A segmentação é um passo importante para diversas aplicações que visam trabalhar com o objeto segmentado ou isolado da imagem. Portanto, a segmentação é o meio para se realizar medições de forma, de tamanho (área e comprimento) e ou identificar características do objeto como centro de massa.
Uma outra aplicabilidade da segmentação é facilitar e tornar possível a mensuração da quantidade de partículas específicas presentes em determinada imagem. Como exemplo, podemos utilizar a seguinte imagem na qual se deseja contabilizar apenas os caracteres do título “Sistemas Digitais” (Figura 1). Primeiramente a imagem é transformada para 8 bits onde apresentará apenas diferentes tons de cinza. Após isso, é ajustada a ferramenta “Threshold” (Software FIJI) de forma que se enxergue somente as palavras que se pretende efetuar a contagem, palavras essas que possuem coloração mais marcante (Figura 2). A partir da imagem segmentada (Figura 2) é possível contabilizar a quantidade de partículas, que nesse caso são caracteres, presentes na imagem através da ferramenta “Analize Particles“ (Software FIJI) (Figura 3). Podemos, com base nesse modelo, expandir para áreas com aplicabilidade funcional como no ramo da Biologia podendo-se fazer estimativa da quantidade de células de uma determinada estrutura.

## Aplicações

* Imagens Médicas
** Localização de tumores e outras patologias;
** Medida de volume de tecidos;
** Cirurgia guiada por computador;
** Diagnostico de doenças;
** Planos de tratamento;
** Estudo da estrutura anatômica.
* Localização de objetos em imagens de satélite (estradas, florestas, etc.)
* Sistemas de reconhecimento facial;
* Sistemas de controle automático de trafego;
* Sistemas de visão computacional.

## Exemplo de aplicação

Aqui é possível observar uma aplicação da segmentação de imagem através do uso do software ImageJ, um software gratuito desenvolvido em Java e disponível para Linux, Mac OS e Windows. Na Figura 4 é representado a segmentação de um cone. Fazer a segmentação desse tipo de objeto é algo que pode ser útil por exemplo para carros autônomos, cuja identificação de sinalizadores de tráfego é de grande importância.
O primeiro passo foi abrir a foto no ImageJ e a partir disso foi feita a saturação da cor vermelha através do menu Image>Adjust>Color Threshold. A seguir,a imagem foi separada em três partes (RGB) através do menu Image>Type>RGB Stack, a terceira imagem da Figura 4 representa a composição apenas em vermelho, que é a cor predominante do objeto a ser segmentado. Depois foi utilizada a ferramenta Threshold através do menu Image>Adjust>Threshold, aqui a intenção é separar o cone do restante da imagem em tons de preto e branco, onde o cone ficou preto e o restante da imagem ficou branca. Por fim, foi utilizada um filtro de média através do menu Process>Filters>Median, para que os pequenos e isolados pixels em preto fossem eliminados.

## Alguns Problemas encontrados

Geralmente o tipo de imagem a ser segmentada não está em perfeitas condições, devido a várias interferências pontuais sobre a qual está sujeita no local real de sua aplicação, com isso, a segmentação não fica adequada. Nessas situações cabe ao desenvolvedor, automaticamente ou manualmente, recorrer a outras práticas de segmentação ou a particionar o mesmo em várias etapas, como pré-processamentos, até atingir o efeito necessário.
Problemas recorrentes e até comuns são observados com o uso de pouca segmentação ou até mesmo no caso contrário, onde a segmentação é usada de forma excessiva comprometendo a imagem analisada, isso geralmente acontece quando não são conhecidos os dados autuados.
Um problema típico recorrentemente encontrado em várias plataformas de segmentação é a fragilidade para trabalhar com alterações de luminosidade (brilho ou sombras) dentro da imagem, podendo decorrer desse problema que apenas algumas partes isoladas sejam segmentadas corretamente e outras partes fiquem avariáveis. Sendo assim o indicado é avaliar o problema e aplicar pré-processamentos, como dito acima, fazendo a correção do brilho ou sombra como desejado no projeto.

## Outros exemplos da utilização de segmentação de imagem

* Imagem de uma folha caída no piso. A folha será o objeto segmentado.
* Canal azul da imagem isolado em níveis de cinza.
* Imagem do objeto (folha) segmentado da imagem em vermelho.
* Imagem do objeto (folha) segmentado em branco e preto (binário)