Início > dados > Cálculo de área foliar

Cálculo de área foliar

Áreas foliares (cm²)

Área foliar calculada com funções do pacote EBImage.

Sinceramente, eu vi no r-bloggers e não acreditei. É possível calcular área de figuras geométricas no R. Bem isso sempre foi possível, basta ter as coordenadas do polígono. Mas não estou falando de áreas geográficas das quais possuímos os mapas. Estou falando de áreas de figuras digitalizadas, como por exemplo a folha de uma planta, as asas de uma borboleta, um torrão de solo, uma pedra, a seção de de um tronco, uma semente. Enfim, as possibilidades são infinitas.

Em agronomia, a análise de imagens é algo que vem se tornando mais comum. Determinações de volume/comprimento/diâmetro de raízes, dimensão de agregados do solo (diâmetros, rendondezas, perimentros), porcentagem de área ocupada por doença ou atacada por inseto são alguns exemplos de aplicação. Alguns aplicativos para essas tarefas são disponíveis. Alguns deles são pagos. E todos eles não permitem automatizar o trabalho, pois requerem em alguma altura do processo, intervenção do usuário via mouse. Imagine ter que calcular a área de 3000 folhas fazendo o trabalho uma a uma? Não dá né?

Nessa matéria eu calculo área de algumas folhas que encontrei no chão, embaixo de algumas árvores. Para ter a medidas das folhas em cm² eu coloquei um quadrado de papel de área conhecida como referência. Nos vamos usar funções disponíveis no pacote EBImage. O meu tutorial não é muito diferente do original que me motivou (leaf area measuring — R package “EBImage”). O fato é que não me contentei em apenas ler mencionada matéria, tive que ver com meus próprios olhos, e já que foi assim, está qui o código que produzi. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# página de desenvolvimento do pacote
# http://www.bioconductor.org/packages/devel/bioc/html/EBImage.html

# instalação no linux, no terminal do linux, fazer
# sudo apt-get install libmagickcore-dev libmagickwand-dev

# instalando do bioconductor
source("http://bioconductor.org/biocLite.R")
biocLite("EBImage") # pacote EBImage, permite determinar área foliar

# instalando do tar.gz, pegar o link da página e rodar no terminal
# R CMD INSTALL EBImage_xxxxx.tar.gz # xxx representa a versão

#-----------------------------------------------------------------------------
# carrega o pacote

require(EBImage)

#-----------------------------------------------------------------------------
# lendo o arquivo

# lê imagem com folhas digitalizadas
fol <- readImage("http://www.leg.ufpr.br/~walmes/ridiculas/folhas.jpg")
str(fol)

display(fol) # vê a imagem
hist(fol)    # histograma dos componentes verde, vermelho e azul
             # picos de azul estão mais afastados, separam melhor

#-----------------------------------------------------------------------------
# tratamento

fol2 <- imageData(channel(fol, mode="blue")) # seleciona um canal
fol2 <- 1-fol2                               # inverte as tonalidades
hist(fol2)                                   # histigrama dos tons de cinza

display(fol2) # escala cinza com claro sendo a folha

#-----------------------------------------------------------------------------
# dicotomiza para branco e preto

fol2[fol2<0.5] <- 0
fol2[fol2>=0.5] <- 1

display(fol2)

#-----------------------------------------------------------------------------
# calcula atributos de cada região

fol3 <- bwlabel(fol2)     # coloca os rótulos nas regiões disjuntas
kern <- makeBrush(3, shape="disc", step=FALSE)
fol3 <- erode(fol3, kern) # remove alguns ruídos

display(fol3)

forma <- computeFeatures.shape(fol3)
area <- forma[, "s.area"]
area

# áreas foliares
areacm <- 25*area/min(area) # quadrado de área conhecida 25 cm²

#-----------------------------------------------------------------------------
# prepara para exportação

fol4 <- paintObjects(fol3, fol, opac=c(NA, 0.45), col=c(NA, "red"))
display(fol4)

xy <- computeFeatures.moment(fol3, fol)[, c("m.cx", "m.cy")] # centróides
font <- drawfont(weight=600, size=15)
fol5 <- drawtext(fol4, xy=xy, labels=paste(format(areacm, digits=4), "cm²"),
                 font=font, col="white")
display(fol5)

writeImage(fol5, "f038.jpg")

#-----------------------------------------------------------------------------
Categoriasdados Tags:,
  1. Alline Mendes Alves
    04/02/2013 às 22:53

    Olá, como alguns dos meus amigos fiquei chocada com a matéria…
    Por anos gastamos centenas de horas calculando área foliar manualmente no Image J.
    Queria saber se pelo método descrito, é contabilizada toda a área da folha ou
    se são descontados os espaços retirados por herbívoros ou outros danos.

    Obrigada!

    • Walmes Zeviani
      19/06/2013 às 13:53

      Tem como contabilizar a área total e também descontar os ‘buracos’ feitos por insetos.

  2. Raphael Machado
    01/08/2013 às 16:25

    Boa tarde pessoal, rodei com sucesso até aqui:

    > #——————————————————
    > # prepara para exportação

    > fol4 display(fol4)

    > xy font fol5 display(fol5)
    > writeImage(fol5,”f038.jpg”)

    quando coloco a função drawfont(), dá:
    Warning message:
    ‘drawfont’ is deprecated.
    See help(“Deprecated”)

    ok, faço o que eles dizem para fazer:

    > ?drawfont()

    E aparece:

    These following functions are deprecated and will be defunct in the next Bioconductor release.

    Que beleza, hein?

    Alguém pode me ajudar?

    Desde já, agradeço pelo tempo e pela ajuda.

    • Walmes Zeviani
      19/12/2013 às 15:40

      O pacote teve atualizações e em função disso algumas funções podem ter sido removidas ou renomeadas.

  3. 31/08/2013 às 14:52

    Quando vou dar o comando Drawfont, aparece uma mensagem de erro ” Warning message:
    ‘drawfont’ is deprecated. See help(“Deprecated”). Tentei entrar no Help do R mas não consegui responder. Qual a solução deste problema?

    • Walmes Zeviani
      19/12/2013 às 15:42

      Pacote foi atualizado e funções podem ter sido renomeadas ou removidas.

  1. 14/07/2012 às 08:14
  2. 17/01/2013 às 13:18

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 51 outros seguidores

%d blogueiros gostam disto: