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.958  88.272 4570       252      39.791    10.685     25.111     61.805
#> 2   64.945  79.743 3566       214      34.801     7.546     25.441     50.273
#> 3  408.187  89.935 4439       232      38.153     8.092     26.367     55.248
#> 4  179.883  86.070 3692       214      34.856     7.561     25.490     51.385
#> 5  332.636  91.760 4571       240      39.074     7.683     29.686     56.801
#> 6  498.514 102.643 5626       261      43.247     8.295     33.455     60.988
#> 7  120.887  85.098 1980       184      27.578     9.039     14.695     44.913
#> 8  430.293 221.425 4515       250      39.599    10.359     26.742     61.081
#> 9  122.486 219.500 3814       214      35.081     6.013     25.418     47.765
#> 10 207.395 227.881 4293       241      38.459     9.065     26.963     57.836
#> 11 508.731 223.660 3444       201      33.461     6.338     25.039     47.638
#> 12 353.113 213.193 2248       160      26.728     4.080     21.134     36.384
#> 13 283.715 222.830 2475       180      28.758     6.909     19.125     42.410
#> 14 511.958 330.873 3493       205      33.835     6.580     25.308     50.367
#> 15 364.454 339.513 4710       252      40.145     9.787     27.825     60.233
#> 16 129.376 341.427 4687       232      38.806     6.498     29.444     54.093
#> 17 434.535 340.131 3105       210      32.884     8.818     21.522     51.898
#> 18 292.710 338.440 2986       202      31.903     7.534     20.912     47.038
#> 19 223.457 354.138 4525       234      38.577     7.346     29.909     55.385
#> 20 498.596 470.443 5191       256      41.327     8.314     29.733     60.784
#> 21 309.043 486.995 4577       229      38.400     6.580     30.207     54.553
#> 22  84.078 480.203 2301       192      29.245     8.945     17.347     47.873
#> 23 226.525 486.900 3145       195      31.879     5.638     24.269     45.265
#> 24 371.589 483.506 2724       203      31.528     9.005     19.060     50.146
#> 25 148.362 483.259 2944       197      31.348     6.536     22.112     45.624
#> 26 434.001 481.173 2392       168      27.790     5.212     21.007     39.957
#> 27 509.491 597.285 4123       227      37.311     8.405     25.703     55.118
#> 28 436.662 608.762 4397       247      39.319     9.528     27.797     60.807
#> 29 351.816 607.093 4494       238      38.592     8.005     27.102     56.377
#>    majoraxis eccentricity  theta
#> 1    109.440        0.871 -1.476
#> 2     88.341        0.809  1.431
#> 3    100.103        0.822 -1.495
#> 4     91.910        0.828 -1.542
#> 5     98.261        0.793  1.399
#> 6    108.318        0.788  1.488
#> 7     76.268        0.895 -1.434
#> 8    107.286        0.863  1.568
#> 9     87.292        0.765  1.409
#> 10   100.410        0.837 -1.373
#> 11    85.211        0.793  1.526
#> 12    65.557        0.744  1.374
#> 13    77.753        0.852  1.428
#> 14    86.426        0.799 -1.421
#> 15   106.743        0.848  1.459
#> 16    97.092        0.771  1.324
#> 17    90.481        0.874  1.525
#> 18    83.222        0.832  1.416
#> 19    97.078        0.788 -1.538
#> 20   106.915        0.813  1.559
#> 21    95.730        0.765  1.531
#> 22    79.126        0.877  1.509
#> 23    80.342        0.781  1.389
#> 24    82.415        0.850 -1.566
#> 25    80.057        0.808  1.308
#> 26    70.581        0.788 -1.550
#> 27    97.527        0.831  1.323
#> 28   102.316        0.840  1.503
#> 29    99.039        0.808  1.352
#> 
#> 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.958  88.272 6.245542  354.5874    55.98964 15.034789   35.33351
#> 2   64.945  79.743 4.873436  301.1179    48.96824 10.617924   35.79785
#> 3  408.187  89.935 6.066512  326.4456    53.68482 11.386196   37.10082
#> 4  179.883  86.070 5.045633  301.1179    49.04563 10.639030   35.86680
#> 5  332.636  91.760 6.246909  337.7023    54.98075 10.810695   41.77096
#> 6  498.514 102.643 7.688713  367.2513    60.85255 11.671836   47.07430
#> 7  120.887  85.098 2.705946  258.9051    38.80481 12.718714   20.67723
#> 8  430.293 221.425 6.170377  351.7732    55.71948 14.576076   37.62848
#> 9  122.486 219.500 5.212363  301.1179    49.36223  8.460850   35.76549
#> 10 207.395 227.881 5.866983  339.1094    54.11539 12.755298   37.93945
#> 11 508.731 223.660 4.706706  282.8257    47.08274  8.918155   35.23220
#> 12 353.113 213.193 3.072205  225.1349    37.60878  5.740939   29.73750
#> 13 283.715 222.830 3.382432  253.2767    40.46518  9.721605   26.91065
#> 14 511.958 330.873 4.773671  288.4541    47.60899  9.258672   35.61071
#> 15 364.454 339.513 6.436871  354.5874    56.48775 13.771219   39.15236
#> 16 129.376 341.427 6.405439  326.4456    54.60365  9.143290   41.43045
#> 17 434.535 340.131 4.243415  295.4895    46.27085 12.407746   30.28346
#> 18 292.710 338.440 4.080785  284.2328    44.89049 10.601039   29.42513
#> 19 223.457 354.138 6.184043  329.2598    54.28143 10.336505   42.08474
#> 20 498.596 470.443 7.094225  360.2158    58.15093 11.698571   41.83710
#> 21 309.043 486.995 6.255108  322.2243    54.03237  9.258672   42.50406
#> 22  84.078 480.203 3.144637  270.1619    41.15043 12.586447   24.40884
#> 23 226.525 486.900 4.298081  274.3831    44.85672  7.933190   34.14874
#> 24 371.589 483.506 3.722726  285.6399    44.36283 12.670872   26.81919
#> 25 148.362 483.259 4.023386  277.1973    44.10955  9.196760   31.11364
#> 26 434.001 481.173 3.269001  236.3916    39.10311  7.333769   29.55880
#> 27 509.491 597.285 5.634654  319.4101    52.50005 11.826617   36.16651
#> 28 436.662 608.762 6.009113  347.5520    55.32549 13.406782   39.11296
#> 29 351.816 607.093 6.141677  334.8881    54.30253 11.263779   38.13503
#>    radius.max majoraxis eccentricity  theta
#> 1    86.96538 153.99226        0.871 -1.476
#> 2    70.73879 124.30400        0.809  1.431
#> 3    77.73907 140.85423        0.822 -1.495
#> 4    72.30347 129.32592        0.828 -1.542
#> 5    79.92429 138.26236        0.793  1.399
#> 6    85.81579 152.41350        0.788  1.488
#> 7    63.19677 107.31617        0.895 -1.434
#> 8    85.94665 150.96138        0.863  1.568
#> 9    67.20980 122.82796        0.765  1.409
#> 10   81.38063 141.28621        0.837 -1.373
#> 11   67.03110 119.89980        0.793  1.526
#> 12   51.19567  92.24480        0.744  1.374
#> 13   59.67481 109.40570        0.852  1.428
#> 14   70.87105 121.60942        0.799 -1.421
#> 15   84.75343 150.19733        0.848  1.459
#> 16   76.11388 136.61747        0.771  1.324
#> 17   73.02531 127.31518        0.874  1.525
#> 18   66.18684 117.10109        0.832  1.416
#> 19   77.93185 136.59777        0.788 -1.538
#> 20   85.52874 150.43935        0.813  1.559
#> 21   76.76114 134.70101        0.765  1.531
#> 22   67.36176 111.33764        0.877  1.509
#> 23   63.69206 113.04867        0.781  1.389
#> 24   70.56009 115.96557        0.850 -1.566
#> 25   64.19721 112.64764        0.808  1.308
#> 26   56.22321  99.31403        0.788 -1.550
#> 27   77.55615 137.22956        0.831  1.323
#> 28   85.56110 143.96813        0.840  1.503
#> 29   79.32768 139.35708        0.808  1.352
#> 
#> 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)