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.897  88.328 4554       253      39.809    10.702     25.103     62.006
#> 2   64.939  79.757 3558       213      34.701     7.461     25.470     50.499
#> 3  408.121  89.991 4420       235      38.141     8.071     26.487     55.336
#> 4  179.866  86.112 3680       213      34.811     7.648     25.228     51.134
#> 5  332.540  91.828 4548       239      39.016     7.716     29.544     56.913
#> 6  498.495 102.667 5615       260      43.206     8.323     33.561     61.158
#> 7  120.858  85.121 1977       183      27.482     8.946     14.812     45.157
#> 8  430.212 221.526 4488       250      39.552    10.411     26.689     61.989
#> 9  122.433 219.584 3791       210      34.980     6.074     25.697     47.326
#> 10 207.351 227.957 4277       239      38.355     9.113     26.842     57.478
#> 11 508.683 223.667 3434       202      33.436     6.316     25.021     47.420
#> 12 353.072 213.224 2236       159      26.649     4.076     21.005     35.291
#> 13 283.652 222.847 2462       180      28.699     6.900     19.088     42.387
#> 14 511.942 330.898 3480       204      33.766     6.580     25.281     50.178
#> 15 364.384 339.525 4689       251      40.065     9.807     27.762     60.432
#> 16 129.312 341.470 4661       231      38.697     6.540     29.550     54.266
#> 17 434.429 340.292 3082       211      32.816     8.828     21.351     52.041
#> 18 292.575 338.454 2954       201      31.705     7.651     20.545     46.860
#> 19 223.282 354.376 4476       233      38.429     7.357     29.662     55.347
#> 20 498.564 470.479 5176       254      41.263     8.363     29.668     60.729
#> 21 308.845 487.052 4526       232      38.302     6.659     29.929     54.330
#> 22  84.068 480.243 2293       192      29.216     8.941     17.324     47.863
#> 23 226.475 486.956 3126       194      31.793     5.686     24.353     45.078
#> 24 371.551 483.578 2716       203      31.503     8.999     19.100     50.140
#> 25 148.229 483.329 2921       194      31.250     6.662     22.220     45.265
#> 26 433.951 481.200 2378       166      27.675     5.237     20.738     39.585
#> 27 509.489 597.335 4116       226      37.229     8.391     25.696     54.889
#> 28 436.609 608.874 4376       245      39.180     9.565     27.824     60.417
#> 29 351.688 607.200 4460       239      38.511     8.002     27.221     56.576
#>    majoraxis eccentricity  theta
#> 1    109.344        0.872 -1.477
#> 2     88.174        0.809  1.431
#> 3     99.968        0.823 -1.496
#> 4     91.923        0.830 -1.543
#> 5     98.276        0.795  1.397
#> 6    108.236        0.788  1.487
#> 7     76.209        0.895 -1.435
#> 8    107.134        0.864  1.565
#> 9     87.204        0.767  1.407
#> 10   100.345        0.838 -1.374
#> 11    85.095        0.793  1.525
#> 12    65.356        0.744  1.369
#> 13    77.560        0.852  1.427
#> 14    86.258        0.799 -1.424
#> 15   106.686        0.849  1.459
#> 16    97.033        0.773  1.320
#> 17    90.414        0.875  1.522
#> 18    83.390        0.837  1.417
#> 19    96.847        0.790 -1.544
#> 20   106.902        0.814  1.560
#> 21    95.529        0.769  1.528
#> 22    79.031        0.877  1.508
#> 23    80.309        0.783  1.390
#> 24    82.394        0.851 -1.569
#> 25    79.999        0.811  1.304
#> 26    70.378        0.788 -1.553
#> 27    97.426        0.831  1.323
#> 28   102.280        0.841  1.500
#> 29    98.934        0.811  1.351
#> 
#> 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.897  88.328 6.212235  355.8003    55.98441 15.050495   35.30299
#> 2   64.939  79.757 4.853564  299.5473    48.80090 10.492594   35.81911
#> 3  408.121  89.991 6.029442  330.4865    53.63866 11.350453   37.24934
#> 4  179.866  86.112 5.019988  299.5473    48.95559 10.755577   35.47878
#> 5  332.540  91.828 6.204050  336.1118    54.86919 10.851207   41.54848
#> 6  498.495 102.667 7.659574  365.6446    60.76170 11.704847   47.19769
#> 7  120.858  85.121 2.696879  257.3576    38.64864 12.580987   20.83049
#> 8  430.212 221.526 6.122202  351.5814    55.62298 14.641254   37.53342
#> 9  122.433 219.584 5.171406  295.3283    49.19326  8.542021   36.13834
#> 10 207.351 227.957 5.834372  336.1118    53.93961 12.815844   37.74859
#> 11 508.683 223.667 4.684412  284.0777    47.02190  8.882351   35.18767
#> 12 353.072 213.224 3.050188  223.6057    37.47717  5.732182   29.53987
#> 13 283.652 222.847 3.358481  253.1386    40.36013  9.703645   26.84394
#> 14 511.942 330.898 4.747162  286.8904    47.48598  9.253621   35.55331
#> 15 364.384 339.525 6.396392  352.9877    56.34443 13.791833   39.04241
#> 16 129.312 341.470 6.358196  324.8612    54.42057  9.197368   41.55692
#> 17 434.429 340.292 4.204240  296.7347    46.14998 12.415041   30.02645
#> 18 292.575 338.454 4.029631  282.6714    44.58755 10.759796   28.89296
#> 19 223.282 354.376 6.105833  327.6738    54.04368 10.346336   41.71442
#> 20 498.564 470.479 7.060722  357.2067    58.02921 11.761100   41.72286
#> 21 308.845 487.052 6.174039  326.2675    53.86508  9.364721   42.08991
#> 22  84.068 480.243 3.127943  270.0145    41.08720 12.573956   24.36318
#> 23 226.475 486.956 4.264261  272.8271    44.71130  7.996366   34.24824
#> 24 371.551 483.578 3.704969  285.4841    44.30347 12.655523   26.86082
#> 25 148.229 483.329 3.984615  272.8271    43.94767  9.368940   31.24855
#> 26 433.951 481.200 3.243894  233.4500    38.92006  7.364926   29.16438
#> 27 509.489 597.335 5.614747  317.8295    52.35609 11.800477   36.13694
#> 28 436.609 608.874 5.969420  344.5497    55.09983 13.451503   39.12960
#> 29 351.688 607.200 6.084007  336.1118    54.15900 11.253416   38.28158
#>    radius.max majoraxis eccentricity  theta
#> 1    87.20061 153.77325        0.872 -1.477
#> 2    71.01803 124.00134        0.809  1.431
#> 3    77.82042 140.58754        0.823 -1.496
#> 4    71.91104 129.27365        0.830 -1.543
#> 5    80.03820 138.20804        0.795  1.397
#> 6    86.00805 152.21504        0.788  1.487
#> 7    63.50544 107.17465        0.895 -1.435
#> 8    87.17671 150.66527        0.864  1.565
#> 9    66.55576 122.63720        0.767  1.407
#> 10   80.83277 141.11772        0.838 -1.374
#> 11   66.68795 119.67126        0.793  1.525
#> 12   49.63063  91.91180        0.744  1.369
#> 13   59.60992 109.07460        0.852  1.427
#> 14   70.56660 121.30682        0.799 -1.424
#> 15   84.98706 150.03523        0.849  1.459
#> 16   76.31566 136.45997        0.773  1.320
#> 17   73.18658 127.15151        0.875  1.522
#> 18   65.90041 117.27348        0.837  1.417
#> 19   77.83589 136.19840        0.790 -1.544
#> 20   85.40474 150.33900        0.814  1.560
#> 21   76.40566 134.34486        0.769  1.528
#> 22   67.31095 111.14330        0.877  1.508
#> 23   63.39434 112.94059        0.783  1.390
#> 24   70.51316 115.87278        0.851 -1.569
#> 25   63.65732 112.50463        0.811  1.304
#> 26   55.66939  98.97437        0.788 -1.553
#> 27   77.19180 137.01266        0.831  1.323
#> 28   84.96596 143.83896        0.841  1.500
#> 29   79.56427 139.13340        0.811  1.351
#> 
#> 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)