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.827  88.586 4620       254      40.020    10.790     25.028     62.588
#> 2   64.960  79.962 3583       215      34.777     7.389     25.330     50.484
#> 3  408.070  90.175 4441       235      38.277     8.146     26.328     55.796
#> 4  179.724  86.368 3717       216      35.095     7.739     25.164     51.806
#> 5  332.504  91.975 4582       239      39.105     7.642     29.802     56.912
#> 6  498.407 102.802 5621       261      43.161     8.314     33.140     61.367
#> 7  120.801  85.475 2031       184      27.696     8.977     14.752     44.981
#> 8  430.150 221.936 4532       253      39.870    10.617     26.500     62.610
#> 9  122.323 219.556 3828       212      35.174     6.113     25.696     47.907
#> 10 207.319 228.060 4299       240      38.409     9.005     27.286     57.977
#> 11 508.632 223.664 3453       203      33.508     6.310     24.995     47.652
#> 12 352.955 213.333 2229       159      26.589     4.062     21.058     35.634
#> 13 283.566 223.032 2494       181      28.885     6.975     18.876     43.223
#> 14 511.944 330.935 3501       206      33.897     6.576     25.645     48.595
#> 15 364.288 339.807 4705       252      40.185     9.944     27.843     60.686
#> 16 129.145 341.521 4669       234      38.855     6.691     29.609     54.141
#> 17 434.330 340.501 3116       212      33.065     8.979     21.542     52.009
#> 18 292.515 338.760 2965       199      31.712     7.643     20.571     46.781
#> 19 223.222 354.599 4488       232      38.505     7.570     29.338     55.286
#> 20 498.411 470.621 5210       252      41.281     8.345     29.623     60.357
#> 21 308.683 487.262 4533       229      38.319     6.631     29.971     54.713
#> 22  84.078 480.523 2332       193      29.368     8.879     17.488     48.069
#> 23 226.323 486.994 3135       191      31.717     5.640     24.535     44.892
#> 24 371.514 483.768 2760       204      31.569     8.953     19.394     50.121
#> 25 148.140 483.486 2951       194      31.403     6.644     22.607     44.706
#> 26 433.917 481.329 2398       167      27.794     5.255     21.054     39.377
#> 27 509.522 597.543 4126       227      37.323     8.504     25.566     55.340
#> 28 436.577 609.107 4402       244      39.098     9.515     27.745     60.022
#> 29 351.518 607.377 4467       239      38.535     8.099     27.426     57.037
#>    majoraxis eccentricity  theta
#> 1    110.487        0.873 -1.477
#> 2     88.615        0.810  1.429
#> 3    100.166        0.823 -1.497
#> 4     92.402        0.829 -1.544
#> 5     98.512        0.794  1.394
#> 6    108.542        0.790  1.486
#> 7     77.736        0.897 -1.438
#> 8    108.140        0.866  1.563
#> 9     87.737        0.768  1.401
#> 10   100.612        0.838 -1.375
#> 11    85.282        0.793  1.524
#> 12    65.385        0.746  1.362
#> 13    78.334        0.853  1.426
#> 14    86.541        0.799 -1.422
#> 15   107.329        0.851  1.457
#> 16    97.227        0.774  1.318
#> 17    91.071        0.876  1.516
#> 18    83.748        0.838  1.410
#> 19    97.278        0.793 -1.547
#> 20   107.314        0.814  1.562
#> 21    95.541        0.768  1.524
#> 22    80.031        0.879  1.505
#> 23    80.279        0.782  1.385
#> 24    83.050        0.850 -1.568
#> 25    80.337        0.810  1.300
#> 26    70.742        0.788 -1.556
#> 27    97.954        0.833  1.321
#> 28   102.819        0.842  1.499
#> 29    99.433        0.814  1.348
#> 
#> 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.827  88.586 6.314982  357.4114    56.31340 15.182949   35.21769
#> 2   64.960  79.962 4.897528  302.5333    48.93581 10.397295   35.64264
#> 3  408.070  90.175 6.070310  330.6759    53.86077 11.462494   37.04696
#> 4  179.724  86.368 5.080690  303.9404    49.38328 10.889791   35.40906
#> 5  332.504  91.975 6.263040  336.3044    55.02588 10.753299   41.93533
#> 6  498.407 102.802 7.683228  367.2613    60.73320 11.698892   46.63234
#> 7  120.801  85.475 2.776132  258.9122    38.97192 12.631820   20.75800
#> 8  430.150 221.936 6.194696  356.0043    56.10233 14.939516   37.28899
#> 9  122.323 219.556 5.232413  298.3119    49.49444  8.601795   36.15765
#> 10 207.319 228.060 5.876213  337.7116    54.04652 12.671220   38.39499
#> 11 508.632 223.664 4.719834  285.6477    47.15016  8.879000   35.17125
#> 12 352.955 213.333 3.046774  223.7339    37.41422  5.715768   29.63138
#> 13 283.566 223.032 3.408997  254.6908    40.64499  9.814743   26.56102
#> 14 511.944 330.935 4.785444  289.8691    47.69754  9.253297   36.08589
#> 15 364.288 339.807 6.431166  354.5971    56.54558 13.992516   39.17876
#> 16 129.145 341.521 6.381959  329.2688    54.67410  9.415117   41.66376
#> 17 434.330 340.501 4.259195  298.3119    46.52680 12.634634   30.31243
#> 18 292.515 338.760 4.052797  280.0192    44.62296 10.754706   28.94610
#> 19 223.222 354.599 6.134554  326.4545    54.18160 10.651986   41.28243
#> 20 498.411 470.621 7.121440  354.5971    58.08780 11.742513   41.68346
#> 21 308.683 487.262 6.196063  322.2331    53.91987  9.330689   42.17314
#> 22  84.078 480.523 3.187562  271.5764    41.32464 12.493921   24.60792
#> 23 226.323 486.994 4.285166  268.7621    44.62999  7.936222   34.52397
#> 24 371.514 483.768 3.772586  287.0548    44.42174 12.598049   27.28991
#> 25 148.140 483.486 4.033660  272.9835    44.18815  9.348982   31.81102
#> 26 433.917 481.329 3.277776  234.9910    39.10981  7.394476   29.62575
#> 27 509.522 597.543 5.639743  319.4189    52.51837 11.966247   35.97473
#> 28 436.577 609.107 6.017002  343.3401    55.01603 13.388857   39.04086
#> 29 351.518 607.377 6.105849  336.3044    54.22381 11.396358   38.59199
#>    radius.max majoraxis eccentricity  theta
#> 1    88.06955  155.4697        0.873 -1.477
#> 2    71.03763  124.6930        0.810  1.429
#> 3    78.51231  140.9467        0.823 -1.497
#> 4    72.89786  130.0218        0.829 -1.544
#> 5    80.08267  138.6193        0.794  1.394
#> 6    86.35144  152.7329        0.790  1.486
#> 7    63.29418  109.3848        0.897 -1.438
#> 8    88.10051  152.1672        0.866  1.563
#> 9    67.41145  123.4575        0.768  1.401
#> 10   81.58127  141.5743        0.838 -1.375
#> 11   67.05263  120.0030        0.793  1.524
#> 12   50.14173   92.0053        0.746  1.362
#> 13   60.82045  110.2262        0.853  1.426
#> 14   68.37956  121.7746        0.799 -1.422
#> 15   85.39318  151.0260        0.851  1.457
#> 16   76.18351  136.8112        0.774  1.318
#> 17   73.18350  128.1489        0.876  1.516
#> 18   65.82702  117.8445        0.838  1.410
#> 19   77.79467  136.8829        0.793 -1.547
#> 20   84.93024  151.0049        0.814  1.562
#> 21   76.98839  134.4388        0.768  1.524
#> 22   67.63941  112.6141        0.879  1.505
#> 23   63.16895  112.9631        0.782  1.385
#> 24   70.52684  116.8623        0.850 -1.568
#> 25   62.90722  113.0447        0.810  1.300
#> 26   55.40862   99.5433        0.788 -1.556
#> 27   77.87066  137.8342        0.833  1.321
#> 28   84.45885  144.6799        0.842  1.499
#> 29   80.25856  139.9153        0.814  1.348
#> 
#> 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)