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”.
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.
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.
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).
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.
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: