Contagem automática de árvores em imagens obtidas com drones

Informe Publicitário

Contar árvores pode não soar exatamente como um negócio interessante ou lucrativo. No entanto, com um tamanho de mercado global de US $ 227 bilhões, obviamente há muito mais pessoas ativas no setor florestal do que a maioria das pessoas pode imaginar.

As florestas exigem o acompanhamento do desenvolvimento das árvores para identificar problemas de saúde e o crescimento das árvores, e também para projetar o momento ideal da colheita e seu valor monetário.

Normalmente, isso é feito analisando-se várias amostras pequenas ao longo do reflorestamento (parcelas) e inferindo-se o volume total de madeira. A análise aqui significa: Conte as árvores, meça a espessura das árvores e observe as anomalias.

No projeto em questão, estávamos analisando uma área de algumas centenas de hectares de pinus (pinus taeda) no estado de Santa Catarina.

A análise, realizada pela empresa SuperGeo Engenharia e Topografia, revelou que cada hectare valeria cerca de US $ 6.000, depois de descontar os custos de extração e transporte. A análise levou uma dúzia de homens-dia devido ao tamanho da área.

No entanto, desta vez também usamos imagens de drone e aplicamos algoritmos de Visão Computacional e Reconhecimento de Imagem para fazer a contagem para nós. O potencial de economia de tempo e trabalho é enorme, com custos esperados em no máximo 50% da abordagem original, podendo ir até 80% para grandes projetos.

O objetivo deste post é dar-lhe uma visão de onde estamos atualmente neste empreendimento.

De geo-dados para uma imagem crua

Como entradas, recebemos os dados geográficos da área em questão. Então nós fomos lá e mandamos um drone para tirar fotos da área em questão e juntar as fotos a uma imagem grande e crua (ortofoto).

As fotos tiradas pela câmera do drone tiveram uma resolução onde cada pixel é equivalente a uma área aproximada de 10×10 cm².

Isso significa que um hectare se traduz no tamanho de uma imagem padrão de celular (1 milhão de pixels) e uma área de 3×3 quilômetros (900 hectares) dá uma imagem do tamanho de um gigabyte.

Esta imagem é grande o suficiente para levar alguns segundos para carregar em um computador moderno e neste caso já é muito grande para ser processado pelos meus programas padrão de visualização de imagens: Para imagens maiores que 2GB minhas aplicações não conseguiam mais ler as imagens, suponho que isso é porque eles não esperam (e nunca foram testados com) “fotos”.

Visão geral da área
Visão geral da área

Quebrando a grande figura

O Geo-Data representa um número de parcelas, isto é, sub-áreas onde o plantio e tratamento de árvores seriam semelhantes em todas as árvores da parcela.

No caso mais simples, cada gráfico é uma lista de pares de latitude-longitude que formam um anel. Todas as árvores dentro do anel pertencem ao mesmo enredo.

Assim, dados esses Geo-Dados, transformamos cada “anel de pares lat / long” em coordenadas de imagem e extraímos, usando a Biblioteca GDAL, a sub-imagem correspondente para cada plotagem.

Em nosso grande arquivo, havia 35 parcelas e a área variou de 0,1 a 25 hectares, ou de 100 a cerca de 50.000 árvores. Os tamanhos das imagens variaram de menos de um megabyte a algumas dezenas de megabytes.

Uma dificuldade adicional é que cada parcela pode ter buracos (devido a rochas, lagos etc ou mesmo consistir em várias peças não conectadas (devido a estradas, rios, …).

Então, assumindo uma numeração para cada parcela de 1 a 35, nós processamos cada peça não conectada e atribuímos a ela um caractere. Com todas as sub-imagens nomeadas assim: 1a, 2a, 2b, 3a, …, sabemos que temos que analisar as imagens 2a e 2b separadamente e depois apenas agregar os resultados (= contagens de árvore) para obter o resultado para o gráfico 2.

Um único lote com aproximadamente 6 mil árvores
Um único lote com aproximadamente 6 mil árvores

Analisando uma imagem

É aqui que as coisas ficam interessantes: temos uma imagem com três canais de cores e um canal de transparência (vermelho, verde, azul, alfa) e queremos obter o número de árvores na imagem. Usamos a conhecida biblioteca OpenCV para isso e transformamos a imagem primeiro em escala de cinza.

O mesmo gráfico anterior, mas em escala de cinza
O mesmo gráfico anterior, mas em escala de cinza

Como toda a área de interesse é de alguma forma acinzentada (de 100 a 200 em uma escala de 0 a 255), mapeamos o espaço de cores da imagem para [0,255]. Portanto, agora os pixels mais escuros têm escala de cinza 0 (= preto) e os mais brilhantes têm escala de cinza 255 (= branco).

O mesmo gráfico, mas agora em escala de cinza com brilho reescalado
O mesmo gráfico, mas agora em escala de cinza com brilho reescalado

Então nós primeiro tentamos contar as árvores usando um algoritmo que encontra o pixel mais brilhante em relação aos seus vizinhos, no entanto, o resultado para uma imagem com 6 mil árvores foi cerca de 30 mil, o que obviamente não é a resposta correta.

A razão para isso é o ruído: no momento em que o drone tira a grande imagem, pode haver partículas de poeira na árvore que afetam o brilho do pixel.

Podemos remover esse ruído suavizando a imagem. Isso basicamente define cada pixel como a média de seus próprios valores de pixel de seus vizinhos. O problema aqui é claro que, se fizermos isso muito ou com muita frequência, nossa imagem se tornará uma massa acinzentada.

Após o alisamento obtemos um número muito melhor que já está no parque de bolas do número de árvores. Ainda assim, geralmente é muito alto (em aproximadamente 20%), então, para cada um dos pixels mais claros da imagem, obtemos os pixels ao redor com um brilho ligeiramente inferior, mas aproximadamente semelhante. Podemos pensar em cada um deles como o conjunto de pixels que descreve um dossel da árvore.

O mesmo gráfico, porém com áreas de brilho máximo em azul. O resultado ainda é de 20% de desconto
O mesmo gráfico, porém com áreas de brilho máximo em azul. O resultado ainda é de 20% de desconto

Para cada um desses conjuntos de pixels,

• dividi-lo em dois se for muito longo ou largo – dois dosséis muito próximos foram identificados como um;

• remova-o se ainda for apenas um único pixel – não pode ser um dossel de 10x10cm, por isso deve ser ruído;

• remova-o se estiver muito escuro em comparação com o ambiente – às vezes há pixels “relativamente claros” entre as copas das árvores

• removê-lo se estiver na borda da área de interesse – nós mantemos a área de não-interesse toda preta, então trivialmente há uma quantidade de pixels relativamente mais brilhantes na fronteira.

+Informações:

SuperGeo Engenharia e Topografia,