Exemplo: Estimação da área foliar

Introdução

Obrigado por utilizar o pacote ExpImage. Este pacote foi desenvolvido a fim de facilitar o uso da análise de imagens na obtenção de várias informações sobre os objetos que elas contém. Para a utilização do pacote é indispensável a instalação do pacote EBImage. Geralmente, este pacote pode ser instalado ao executar os seguintes comandos:

if (!requireNamespace("BiocManager", quietly = TRUE))

install.packages("BiocManager")

BiocManager::install("EBImage")

Porém se houver problemas na instalação sugerimos que consulte mais opções de instalação no site: https://bioconductor.org/packages/release/bioc/html/EBImage.html

Para instalar o pacote ´ExpImage´ basta utilizar o seguinte comando:

install.packages("ExpImage")

Convidamos a todos os usuários do ExpImage que venha conhecer nossos materiais didáticos sobre este e outros pacotes nos seguintes links:

https://www.youtube.com/channel/UCDGyvLCJnv9RtTY1YMBMVNQ

https://www.expstat.com/

Abrindo as imagens no R

Ativação dos pacotes

Após a instalação dos pacotes é necessário fazer sua ativação

library(EBImage)
library(ExpImage)

Abrindo as imagens.

Para abrir as imagens pode-se inicialmente indicar a pasta de trabalho onde a imagem se encontra com a função setwd. E, posteriormente, abrir a imagem com a função read_image.

Neste caso, poderiam ser utilizados comandos como esses:

#Apagar memoria do R

remove(list=ls())

#Indicar a pasta de trabalho

setwd("D:/Backup Pendrive/")

im=read_image("Imagem.jpeg",plot=TRUE)

Neste exemplo utilizaremos imagens contidas no banco de dados do pacote. Vamos utilizar neste exemplo 4 imagens. Uma da imagem a ser avaliada e 3 de paletas de cores a serem utilizadas na segmentação.

#######################################################
#Abrir imagem das folhas
end1=example_image(3)
im=read_image(end1,plot=TRUE)


#Abrir paleta de cores do fundo
end2=example_image(4)
fundo=read_image(end2,plot=TRUE)



#Abrir paleta de cores das folhas
end3=example_image(5)
folhas=read_image(end3,plot=TRUE)


#Abrir paleta de cores referência
end4=example_image(6)
ref=read_image(end4,plot=TRUE)

Segmentação

Para resolver este problema nós vamos fazer duas segmentações. A primeira para obter os pixels referente apenas às folhas. A segunda segmentação será feita para obter os pixels correspondente apenas ao objeto de referência.

#################################################################
#Segmentacao para separar as folhas do restante
folhas.seg=segmentation_logit(im,foreground=folhas,background=list(fundo,ref),sample=2000,fillHull=TRUE,plot=TRUE)


#Segmentacao para separar o objeto de referencia do restante
ref.seg=segmentation_logit(im,foreground=ref,background=list(fundo,folhas),sample=2000,fillHull=TRUE,plot=TRUE)

Estimação da área foliar

Agora que temos os pixels referentes apenas às folhas podemos estimar várias medidas com a função measure_image

medidas=measure_image(folhas.seg,noise = 1000)

#numero de objetos e medias
medidas
#> $ObjectNumber
#> [1] 29
#> 
#> $measures
#>          x       y area perimeter radius.mean radius.sd radius.min radius.max
#> 1  251.928  88.408 4604       252      39.855    10.692     25.103     62.637
#> 2   64.978  79.864 3583       213      34.820     7.510     25.446     50.454
#> 3  408.168  90.021 4456       232      38.224     8.085     26.445     55.233
#> 4  179.817  86.223 3710       215      34.986     7.682     25.192     51.118
#> 5  332.598  91.818 4587       238      39.082     7.657     29.930     57.130
#> 6  498.490 102.707 5636       263      43.251     8.272     33.447     61.064
#> 7  120.864  85.240 2016       182      27.546     8.935     14.708     44.983
#> 8  430.262 221.739 4543       250      39.708    10.480     26.813     61.572
#> 9  122.470 219.454 3843       213      35.198     6.118     25.502     48.017
#> 10 207.395 227.945 4303       242      38.515     9.012     27.368     57.988
#> 11 508.691 223.636 3455       203      33.512     6.304     24.936     47.657
#> 12 353.021 213.246 2247       159      26.710     4.098     20.982     36.200
#> 13 283.709 222.956 2499       181      28.904     6.940     19.063     42.612
#> 14 511.972 330.916 3502       204      33.822     6.553     25.473     50.167
#> 15 364.413 339.655 4726       252      40.227     9.854     27.973     60.180
#> 16 129.308 341.448 4698       232      38.852     6.506     29.504     54.087
#> 17 434.516 340.293 3134       213      33.093     8.825     21.437     51.593
#> 18 292.674 338.624 2994       200      31.870     7.556     20.902     46.945
#> 19 223.410 354.340 4529       233      38.628     7.325     29.925     55.420
#> 20 498.530 470.528 5213       254      41.370     8.336     29.640     60.742
#> 21 308.912 487.110 4570       233      38.434     6.611     30.357     54.318
#> 22  84.109 480.387 2330       192      29.320     8.898     17.556     47.878
#> 23 226.487 486.943 3155       193      31.859     5.604     24.320     44.891
#> 24 371.598 483.665 2757       204      31.589     8.950     19.711     50.049
#> 25 148.362 483.370 2963       197      31.440     6.535     22.131     45.594
#> 26 434.017 481.236 2403       169      27.910     5.246     21.154     39.729
#> 27 509.515 597.367 4134       227      37.334     8.405     25.693     55.822
#> 28 436.670 608.910 4415       248      39.429     9.602     27.708     60.561
#> 29 351.727 607.202 4494       236      38.540     8.015     27.317     57.220
#>    majoraxis eccentricity  theta
#> 1    110.049        0.872 -1.477
#> 2     88.622        0.810  1.431
#> 3    100.206        0.822 -1.495
#> 4     92.398        0.830 -1.543
#> 5     98.538        0.794  1.397
#> 6    108.443        0.788  1.487
#> 7     76.991        0.895 -1.435
#> 8    107.921        0.865  1.566
#> 9     87.810        0.767  1.407
#> 10   100.470        0.837 -1.373
#> 11    85.272        0.793  1.528
#> 12    65.595        0.745  1.366
#> 13    78.222        0.852  1.431
#> 14    86.552        0.799 -1.422
#> 15   107.106        0.849  1.459
#> 16    97.207        0.771  1.322
#> 17    90.915        0.873  1.520
#> 18    83.670        0.834  1.413
#> 19    97.139        0.788 -1.542
#> 20   107.144        0.813  1.561
#> 21    95.706        0.765  1.526
#> 22    79.829        0.878  1.508
#> 23    80.394        0.780  1.388
#> 24    82.968        0.850 -1.567
#> 25    80.269        0.807  1.305
#> 26    70.636        0.786 -1.553
#> 27    97.757        0.831  1.322
#> 28   102.775        0.841  1.503
#> 29    99.359        0.811  1.350
#> 
#> attr(,"class")
#> [1] "measurements"

Com o comando acima temos várias medidas de áreas em pixels. Logo, é legal converter essa medida para cm² a partir do objeto de referência. Sabendo a área do objeto de referência podemos fazer a conversão com da seguinte forma:

#Convertendo a area dos objetos para cm2

#Identificando a area do objeto de referência (maior area)
# A area conhecida do objeto de referência tem 8.5 x 5.5 cm 
#e sua areasegmentada esta no objeto ref.seg

medidasref=measure_image(img = folhas.seg,noise =1000,id=ref.seg,length =8.5,width =5.5,plot = FALSE )
#numero de objetos e medias
medidasref
#> $ObjectNumber
#> [1] 29
#> 
#> $measures
#>          x       y     area perimeter radius.mean radius.sd radius.min
#> 1  251.928  88.408 6.279525  354.4371    56.05592 15.038260   35.30728
#> 2   64.978  79.864 4.886954  299.5837    48.97421 10.562789   35.78971
#> 3  408.168  90.021 6.077664  326.3072    53.76192 11.371524   37.19480
#> 4  179.817  86.223 5.060173  302.3967    49.20769 10.804706   35.43246
#> 5  332.598  91.818 6.256338  334.7462    54.96870 10.769544   42.09644
#> 6  498.490 102.707 7.687099  369.9086    60.83238 11.634539   47.04309
#> 7  120.864  85.240 2.749679  255.9824    38.74335 12.567046   20.68675
#> 8  430.262 221.739 6.196325  351.6241    55.84916 14.740083   37.71239
#> 9  122.470 219.454 5.241576  299.5837    49.50586  8.604945   35.86847
#> 10 207.395 227.945 5.868983  340.3721    54.17121 12.675346   38.49300
#> 11 508.691 223.636 4.712372  285.5188    47.13451  8.866554   35.07240
#> 12 353.021 213.246 3.064746  223.6329    37.56752  5.763823   29.51111
#> 13 283.709 222.956 3.408456  254.5759    40.65337  9.761086   26.81204
#> 14 511.972 330.916 4.776476  286.9253    47.57052  9.216771   35.82768
#> 15 364.413 339.655 6.445924  354.4371    56.57913 13.859616   39.34393
#> 16 129.308 341.448 6.407734  326.3072    54.64520  9.150666   41.49727
#> 17 434.516 340.293 4.274551  299.5837    46.54519 12.412331   30.15106
#> 18 292.674 338.624 4.083601  281.2993    44.82504 10.627487   29.39859
#> 19 223.410 354.340 6.177230  327.7137    54.33015 10.302587   42.08941
#> 20 498.530 470.528 7.110157  357.2501    58.18676 11.724555   41.68856
#> 21 308.912 487.110 6.233151  327.7137    54.05729  9.298348   42.69701
#> 22  84.109 480.387 3.177953  270.0473    41.23848 12.515006   24.69245
#> 23 226.487 486.943 4.303193  271.4538    44.80957  7.882006   34.20599
#> 24 371.598 483.665 3.760350  286.9253    44.42982 12.588143   27.72345
#> 25 148.362 483.370 4.041319  277.0798    44.22025  9.191454   31.12717
#> 26 434.017 481.236 3.277519  237.6979    39.25532  7.378481   29.75303
#> 27 509.515 597.367 5.638479  319.2747    52.51014 11.821603   36.13711
#> 28 436.670 608.910 6.021743  348.8111    55.45675 13.505179   38.97120
#> 29 351.727 607.202 6.129493  331.9332    54.20637 11.273069   38.42126
#>    radius.max majoraxis eccentricity  theta
#> 1    88.09872 154.78353        0.872 -1.477
#> 2    70.96337 124.64653        0.810  1.431
#> 3    77.68502 140.93939        0.822 -1.495
#> 4    71.89729 129.95746        0.830 -1.543
#> 5    80.35314 138.59335        0.794  1.397
#> 6    85.88630 152.52470        0.788  1.487
#> 7    63.26843 108.28757        0.895 -1.435
#> 8    86.60080 151.79051        0.865  1.566
#> 9    67.53574 123.50446        0.767  1.407
#> 10   81.55992 141.31070        0.837 -1.373
#> 11   67.02940 119.93477        0.793  1.528
#> 12   50.91517  92.25914        0.745  1.366
#> 13   59.93363 110.01897        0.852  1.431
#> 14   70.55971 121.73508        0.799 -1.422
#> 15   84.64296 150.64421        0.849  1.459
#> 16   76.07317 136.72130        0.771  1.322
#> 17   72.56537 127.87163        0.873  1.520
#> 18   66.02798 117.68156        0.834  1.413
#> 19   77.94803 136.62566        0.788 -1.542
#> 20   85.43341 150.69766        0.813  1.561
#> 21   76.39808 134.61015        0.765  1.526
#> 22   67.34024 112.27921        0.878  1.508
#> 23   63.13903 113.07388        0.780  1.388
#> 24   70.39374 116.69420        0.850 -1.567
#> 25   64.12780 112.89807        0.807  1.305
#> 26   55.87870  99.34929        0.786 -1.553
#> 27   78.51345 137.49488        0.831  1.322
#> 28   85.17883 144.55268        0.841  1.503
#> 29   80.47973 139.74808        0.811  1.350
#> 
#> attr(,"class")
#> [1] "measurements"

Para a melhor visualização dos resultados, podemos sobrepor a área das folhas sobre a imagem com o seguinte comando:

#Plotar resultados das areas em pixel e salvar em imagem jpg
plot_meansures(im,medidasref$measures[,1],coordy=medidasref$measures[,2],text=round(medidasref$measures[,3],1),col="red",
               cex = 0.9 ,plot=TRUE)