Processamento de imagens na prática

Truques da visão humana e seleções manuais

Depois de uma pausa de verão bem mais longa do que eu imaginava, só mesmo um comentário de leitor para me trazer de volta ao blog para escrever.

O Carlos tem um problema interessante sobre análise de solda que, apesar de simples, não vai encontrar nenhum software que o resolva de forma direta. No ImageJ vou mostrar um caminho com ferramentas de seleção manual e threshold.

A imagem

Perfil de solda

Este é um perfil de solda, e precisamos medir a quantidade de material que penetrou sob a superfície inicial. O bom é que o fundo é escuro e o material de solda é bem claro, assim não teremos problemas de segmentação.

Recebi esta imagem em JPG, por isso a primeira coisa é transformar para 8 bits… você sabe o que os programas fazem quando você pega uma imagem em tons de cinza e salva em JPG? Eles criam mais duas bandas, cópias da original, para depois compactar perdendo parte dos dados. Você acaba com uma imagem de informações repetidas e de menor qualidade. Então para quê fazer isso? Tá, eu sei, a maioria das pessoas não sabe disso… por isso continuam fazendo. Tem até câmeras que fazem isso por padrão! Mas isso é só um desabafo, vamos à solução do problema.

Passo a passo

Depois de converter para tons de cinza (8bits, por exemplo: Image –> Type –> 8-bit)…

Primeiro vou calcular a área do material de solda, que vamos chamar de “Área Total”:

  1. Use o threshold em Image –> Adjust –> Threshold, e cuide para eliminar o máximo de outros objetos, sem destruir a área que queremos calcular.O resultado é a área de interesse, mais alguns pontinhos, e a escala.
  2. Para tirar os pontinhos vamos usar Fechamento. No ImageJ a única forma de ter controle dos parâmetros do fechamento é usando as opções. Abra o diálogo em Process –> Binary –> Options… No diálogo, há dois parâmetros numéricos que você pode mudar. Faça uma tentativa (dica: para eliminar pontinhos use números baixos), mude o “Do:” para “Close” e marque a opção “preview”. Na imagem você verá o resultado previsto, e pode mudar os parâmetros até ficar contente com o resultado, então clique OK.
  3. A escala não sai fácil, então o melhor é cortar a imagem excluindo a escala. Podia até ter feito isso antes de começar: Clique no botão que tem um retângulo (ferramenta de seleção em retângulo), desenhe sobre a imagem uma área que inclua o que queremos medir e corte em Image –> Crop
  4. Valor do BrancoUm cuidado que precisamos tomar com o ImageJ: normalmente preto vale 0 e branco vale 255, mas no ImageJ isso não funciona assim, então coloque o cursor sobre a área branca e olhe a barra de status: o valor que estiver lá é o que temos que procurar na tabela do próximo passo.
  5. Agora que o que consideramos “Área total” está em branco e todo o resto está em preto, vamos em Analyze –> Histogram, que vai abrir uma janela de histograma, que não importa. Clique em “List” e procure, na tabela que vai aparecer, o registro com o número que você leu no passo anterior, que corresponde ao branco. O resultado é 71.251 pixels.

Agora a “Área penetrada”:

  1. Comece novamente com a imagem original (transformada para 8bits).
  2. Corte a área que interessa, deixando de fora a escala, desta vez.
  3. Agora vem a parte delicada: Considerando que a linha da superfície original era reta, podemos estimar onde ela estava, traçando uma linha de um extremo a outro da solda. Vamos usar a ferramenta de seleção em polígono, para desenhar um polígono que inclui a parte da solda que não penetro na superfície original, como na figura.
  4. Use Edit –> Fill para pintar o polígono de preto, descartando a área que não queremos medir.
  5. Agora sequimos a mesma sequencia anterior, prestando atenção para não perder as linhas finas na operação “Close”. Neste caso, como eu não consegui apagar todos os pontos brancos usando “close”, me preocupei somente com os que ficaram mais próximos da área de interesse, depois apaguei os outros desenhando um polígono em torno deles e usando a função “Fill” com ono passo anterior.
  6. O valor da área penetrada estará na linha de mesmo valor em que obtivemos a área total da tabela do histograma. Desta vez o resultado é 22.245 pixels

Resultado

A relação entre a área que penetrou e a área total é a resposta que procuramos: 22.245 / 71.251 = 0,3122.
Ou em porcentagem: 31,22 %

Como é uma relação entre duas grandezas do mesmo valor, não há unidade – por isso não precisamos da escala neste caso. Não faria diferença fazer este cálculo em centímetros quadrados, milímetros quadrados ou qualquer outra unidade – só daria mais trabalho.

É isso. Não gosto destas soluções muito manuais, mas esta é uma das situações em que automatizar daria uma complexidade muito maior do que parece. Concluir que o limite do material original é o prolongamento das superfícies laterais intactas é algo que seres humanos fazem quase sem pensar, mas não as máquinas. Levar o software a concluir isso por ele mesmo exigiria muitas fórmulas matemáticas!

Até mais!

2 Comentários para Truques da visão humana e seleções manuais

  1. wellington's Gravatar wellington - 7 de junho de 2011 at 13:09 | Permalink

    ola gostei muito dos seus tutoriais, eu tenho uma enorme vontade de aprender e preciso de tua ajuda, vi em site um cidadão que usou esse programa para achar porcentagem de perlita e ferrita em ferro fundido atraves da micrografia e tambem em aço temperado como consigo fazer isso pois o cidadão não colocou como usar o programa por favor me ajude.
    grato.

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>