The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Exemplo: Estimação da área foliar

Alcinei Mistico Azevedo (ICA-UFMG)

2024-05-07

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.935  88.356 4585       254      39.796    10.674     25.199     62.363
#> 2   64.936  79.766 3570       216      34.812     7.488     25.347     50.583
#> 3  408.175  89.955 4439       234      38.232     8.114     26.535     55.161
#> 4  179.859  86.146 3704       216      34.973     7.633     25.321     50.960
#> 5  332.603  91.847 4574       240      39.031     7.624     29.693     57.364
#> 6  498.520 102.619 5621       262      43.209     8.304     33.336     60.914
#> 7  120.907  85.163 1993       184      27.623     9.029     14.703     45.862
#> 8  430.247 221.532 4518       256      39.989    10.653     26.737     62.426
#> 9  122.456 219.494 3815       217      35.202     6.107     25.352     48.175
#> 10 207.372 227.941 4291       243      38.532     9.147     27.003     57.659
#> 11 508.695 223.640 3448       203      33.485     6.314     24.936     47.652
#> 12 353.056 213.249 2245       160      26.689     4.052     21.120     36.315
#> 13 283.712 222.959 2490       182      28.878     6.959     19.050     43.273
#> 14 511.968 330.877 3493       205      33.836     6.583     25.490     50.371
#> 15 364.445 339.596 4716       254      40.212     9.848     27.814     60.063
#> 16 129.296 341.431 4686       235      38.907     6.599     29.599     55.056
#> 17 434.539 340.207 3117       214      33.028     8.865     21.319     51.383
#> 18 292.677 338.505 2985       202      31.855     7.539     20.896     47.007
#> 19 223.372 354.283 4518       237      38.679     7.370     29.927     55.505
#> 20 498.564 470.491 5197       255      41.329     8.335     29.596     60.887
#> 21 308.946 487.006 4568       236      38.493     6.592     30.469     54.063
#> 22  84.144 480.331 2306       192      29.231     8.959     17.372     47.872
#> 23 226.510 486.956 3146       194      31.882     5.647     24.378     45.427
#> 24 371.566 483.601 2735       206      31.615     9.005     19.381     50.534
#> 25 148.370 483.270 2954       199      31.447     6.572     22.041     45.454
#> 26 434.005 481.215 2398       171      27.862     5.286     20.898     39.483
#> 27 509.508 597.362 4130       227      37.324     8.402     25.701     55.824
#> 28 436.677 608.850 4405       249      39.355     9.578     27.451     60.991
#> 29 351.735 607.202 4485       237      38.558     8.020     27.254     56.272
#>    majoraxis eccentricity  theta
#> 1    109.803        0.872 -1.476
#> 2     88.458        0.810  1.433
#> 3    100.155        0.823 -1.495
#> 4     92.161        0.829 -1.544
#> 5     98.421        0.794  1.396
#> 6    108.316        0.789  1.488
#> 7     76.482        0.894 -1.434
#> 8    107.543        0.864  1.568
#> 9     87.435        0.767  1.408
#> 10   100.482        0.838 -1.373
#> 11    85.255        0.793  1.526
#> 12    65.442        0.743  1.366
#> 13    78.009        0.851  1.430
#> 14    86.469        0.799 -1.423
#> 15   106.888        0.848  1.460
#> 16    97.029        0.770  1.324
#> 17    90.800        0.874  1.525
#> 18    83.451        0.833  1.415
#> 19    97.138        0.789 -1.540
#> 20   107.033        0.813  1.560
#> 21    95.610        0.765  1.529
#> 22    79.761        0.880  1.511
#> 23    80.331        0.781  1.387
#> 24    82.860        0.852 -1.566
#> 25    79.967        0.805  1.305
#> 26    70.706        0.788 -1.550
#> 27    97.685        0.831  1.323
#> 28   102.599        0.841  1.502
#> 29    99.173        0.810  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.935  88.356 6.265126  357.6456    56.03490 15.029565   35.48155
#> 2   64.936  79.766 4.878190  304.1396    49.01717 10.543506   35.68994
#> 3  408.175  89.955 6.065626  329.4846    53.83271 11.424948   37.36270
#> 4  179.859  86.146 5.061292  304.1396    49.24386 10.747674   35.65333
#> 5  332.603  91.847 6.250095  337.9329    54.95774 10.735001   41.80934
#> 6  498.520 102.619 7.680757  368.9101    60.84059 11.692478   46.93888
#> 7  120.907  85.163 2.723314  259.0819    38.89467 12.713317   20.70261
#> 8  430.247 221.532 6.173574  360.4617    56.30666 14.999996   37.64713
#> 9  122.456 219.494 5.212967  305.5477    49.56631  8.598984   35.69698
#> 10 207.372 227.941 5.863393  342.1570    54.25512 12.879467   38.02167
#> 11 508.695 223.640 4.711484  285.8349    47.14868  8.890451   35.11123
#> 12 353.056 213.249 3.067657  225.2886    37.57955  5.705434   29.73809
#> 13 283.712 222.959 3.402435  256.2658    40.66177  9.798646   26.82342
#> 14 511.968 330.877 4.772974  288.6510    47.64290  9.269217   35.89129
#> 15 364.445 339.596 6.444129  357.6456    56.62066 13.866513   39.16361
#> 16 129.296 341.431 6.403136  330.8926    54.78315  9.291746   41.67698
#> 17 434.539 340.207 4.259192  301.3235    46.50520 12.482396   30.01830
#> 18 292.677 338.505 4.078822  284.4268    44.85355 10.615317   29.42269
#> 19 223.372 354.283 6.173574  333.7087    54.46211 10.377356   42.13882
#> 20 498.564 470.491 7.101387  359.0537    58.19345 11.736128   41.67276
#> 21 308.946 487.006 6.241896  332.3007    54.20021  9.281890   42.90199
#> 22  84.144 480.331 3.151010  270.3463    41.15882 12.614753   24.46071
#> 23 226.510 486.956 4.298819  273.1624    44.89157  7.951279   34.32553
#> 24 371.566 483.601 3.737212  290.0591    44.51562 12.679524   27.28949
#> 25 148.370 483.270 4.036463  280.2027    44.27906  9.253729   31.03491
#> 26 434.005 481.215 3.276722  240.7772    39.23119  7.442972   29.42551
#> 27 509.508 597.362 5.643396  319.6282    52.55420 11.830467   36.18839
#> 28 436.677 608.850 6.019167  350.6054    55.41395 13.486338   38.65248
#> 29 351.735 607.202 6.128482  333.7087    54.29173 11.292591   38.37510
#>    radius.max majoraxis eccentricity  theta
#> 1    87.81045 154.60852        0.872 -1.476
#> 2    71.22358 124.55361        0.810  1.433
#> 3    77.66965 141.02362        0.823 -1.495
#> 4    71.75442 129.76764        0.829 -1.544
#> 5    80.77159 138.58205        0.794  1.396
#> 6    85.77018 152.51474        0.789  1.488
#> 7    64.57616 107.69076        0.894 -1.434
#> 8    87.89916 151.42632        0.864  1.568
#> 9    67.83299 123.11317        0.767  1.408
#> 10   81.18697 141.48405        0.838 -1.373
#> 11   67.09657 120.04362        0.793  1.526
#> 12   51.13347  92.14585        0.743  1.366
#> 13   60.93071 109.84086        0.851  1.430
#> 14   70.92507 121.75299        0.799 -1.423
#> 15   84.57193 150.50404        0.848  1.460
#> 16   77.52180 136.62204        0.770  1.324
#> 17   72.35002 127.85128        0.874  1.525
#> 18   66.18838 117.50349        0.833  1.415
#> 19   78.15402 136.77552        0.789 -1.540
#> 20   85.73217 150.70821        0.813  1.560
#> 21   76.12361 134.62401        0.765  1.529
#> 22   67.40635 112.30777        0.880  1.511
#> 23   63.96366 113.11036        0.781  1.387
#> 24   71.15459 116.67133        0.852 -1.566
#> 25   64.00167 112.59783        0.805  1.305
#> 26   55.59418  99.55784        0.788 -1.550
#> 27   78.60319 137.54573        0.831  1.323
#> 28   85.87860 144.46490        0.841  1.502
#> 29   79.23400 139.64091        0.810  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)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.