Processamento de imagens na prática

Segmentação de Ácinos

Este post é uma análise de tentativas, não uma solução. Nele discuto algumas opções para resolver um problema de segmentação bem difícil, em uma lâmina de ácinos. Mas… o que são ácinos? Bom, eu também tive que perguntar: são “pequenas cavidades glandulares arredondadas, em forma de fundo-de-saco, que desemboca num canal excretor. Pode ser alveolar, salivar e etc…nesse caso é prostático.” Quem respondeu foi o Jorge Alves, que também permitiu o uso as imagens e forneceu o motivo deste texto.

A Imagem

Esta imagem foi obtida a partir de uma lâminda de ácinos prostáticos em microscópio ótico. Os ácinos são as estruturas delimitadas pelas bordas arroxeadas, e vamos precisar contá-las, medir a área interna e total de cada uma delas.

Repare no detalhe das linhas brancas quebrando as bordas. Este vai ser um grande problema…

Também não há uma escala nesta imagem, por que o método de captação do laboratório usa uma escala pré-definida, ou seja, eles fotografaram uma escala usando cada um dos aumentos do microscópio, e então é possível fazer a correspondência com as imagens que serão estudadas. Mas atenção: esta método só funciona quando se usa sempre a mesma câmera!

Primeira tentativa


Para amenizar o problema das linhas brancas, escolhi um filtro de mediana de tamanho 5. Foi o tamanho máximo que consegui usar sem destruir os limites das bordas.

Depois escolhi a banda verde, que mostrou maior contraste entre os elementos, e apliquei um threshold por média. Como o resultado foram bordas intermitentes, apliquei fechamento morfológico em 6 iterações, para tentar fechar as bordas. O que aconteceu na realidade foi que acabei fundindo as bordas adjacentes entre si, obtendo as áreas internas dos ácinos, e mais alguns artefatos pequenos.

Apliquei o Analyze Particles nesta última imagem e o programa foi capaz de detectar todas as áreas internas de ácinos que não ficaram cortadas pela borda da imagem. Ainda assim um dos ácinos (mais ou menos no centro do quadrante inferior esquerdo) é menor do que um dos artefatos da segmentação, então descartar por tamanho não resolve o problema, mas pode ser que descartar por tamanho e circularidade resolva.

Mesmo sendo possível medir a área interna, esta estratégia não me dá nenhuma chance de medir o tamanho total dos ácinos (área interna + borda), já que funde as bordas de ácinos adjacentes.

Outros métodos investigados

Crescimento de regiões e Mean-shift esbarraram no mesmo problema: as linhas brancas quebrando as bordas. Usar outros filtros de desfocar no lugar do filtro de mediana também não melhorou o resultado final.

A imagem ao lado foi obtida com o Gimp, usando uma detecção de bordas e sobrepondo o resultado à imagem original com uma operação de diferença. O resultado é interessante, mas ainda não resolve o problema.

Também procurei algumas demonstrações de contornos ativos, mas não encontrei nada que pudesse usar.

Caminhos…

Uma forma de analisar o problema seria partir da forma como nós, seres humanos conseguimos ver o contorno dos ácinos nesta imagem. Nós “sabemos” que eles são formados por uma área interna e uma borda. Então, para cada área interna (mais fácil de diferenciar), sabemos que há uma borda, com espessura mais ou menos homogênea e curvas suaves.

Isto implica em usar características estruturais, partindo de um objeto para encontrar outro. O problema com esta solução é que não há nada pronto – é preciso implementar. E só vai ser possível testar depois de gastar um bom tempo implementando…

Se o problema em questão envolve processar apenas algumas imagens (20, 30, ou até um pouco mais) pode ser que pintar a área total de cada ácino à mão seja um método aceitável. Tudo depende dos objetivos a longo prazo.

Se alguém tiver alguma ideia diferente por favor use os comentários!

Até mais!

Trackbacks/Pingbacks

           
  1.        

Comente

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>