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
Convidamos a todos os usuários do ExpImage que venha conhecer nossos materiais didáticos sobre este e outros pacotes nos seguintes links:
Após a instalação dos pacotes é necessário fazer sua ativação
# library(EBImage)
library(ExpImage)
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
=example_image(3)
end1=read_image(end1,plot=TRUE) im
#Abrir paleta de cores do fundo
=example_image(4)
end2=read_image(end2,plot=TRUE) fundo
#Abrir paleta de cores das folhas
=example_image(5)
end3=read_image(end3,plot=TRUE) folhas
#Abrir paleta de cores referência
=example_image(6)
end4=read_image(end4,plot=TRUE) ref
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
=segmentation_logit(im,foreground=folhas,background=list(fundo,ref),sample=2000,fillHull=TRUE,plot=TRUE) folhas.seg
#Segmentacao para separar o objeto de referencia do restante
=segmentation_logit(im,foreground=ref,background=list(fundo,folhas),sample=2000,fillHull=TRUE,plot=TRUE) ref.seg
Agora que temos os pixels referentes apenas às folhas podemos estimar várias medidas com a função measure_image
=measure_image(folhas.seg,noise = 1000)
medidas#numero de objetos e medias
medidas#> $ObjectNumber
#> [1] 29
#>
#> $measures
#> m.cx m.cy s.area s.perimeter s.radius.mean s.radius.sd
#> 1 251.77372 88.66368 4680 258 40.30646 10.878969
#> 2 64.99642 80.13837 3628 215 34.95464 7.467362
#> 3 407.99222 90.22504 4497 233 38.40077 8.133362
#> 4 179.68075 86.50877 3762 219 35.32372 7.862043
#> 5 332.47775 92.13024 4630 241 39.29406 7.734490
#> 6 498.35918 102.82616 5649 266 43.30259 8.379189
#> 7 120.79672 85.54817 2076 187 27.87588 8.994773
#> 8 430.18009 222.06652 4570 255 40.08153 10.633196
#> 9 122.32543 219.44009 3881 218 35.51034 6.240998
#> 10 207.25739 228.11796 4332 243 38.61210 9.036382
#> 11 508.61534 223.59178 3481 205 33.71838 6.403792
#> 12 352.94047 213.38116 2251 161 26.74891 4.118389
#> 13 283.56922 223.12896 2528 183 29.13498 7.064123
#> 14 511.95685 331.00369 3523 208 33.96940 6.581959
#> 15 364.27909 339.85898 4744 252 40.28450 9.948712
#> 16 129.15520 341.41614 4710 237 39.11324 6.647654
#> 17 434.41430 340.53088 3174 215 33.39776 8.935207
#> 18 292.60725 338.95943 3007 201 31.81674 7.500350
#> 19 223.33458 354.69429 4537 235 38.67454 7.478564
#> 20 498.35083 470.70280 5259 256 41.51773 8.251721
#> 21 308.76464 487.23536 4576 229 38.41558 6.578140
#> 22 84.09018 480.70586 2373 195 29.51627 8.930119
#> 23 226.39690 486.99398 3157 193 31.85713 5.622143
#> 24 371.41361 483.90916 2807 203 31.77120 8.885141
#> 25 148.19720 483.56096 3002 197 31.63035 6.590240
#> 26 433.86221 481.36469 2424 168 27.95244 5.297969
#> 27 509.56070 597.64132 4143 227 37.38750 8.548141
#> 28 436.56853 609.02480 4436 246 39.40389 9.655209
#> 29 351.54697 607.48545 4503 241 38.68635 8.094880
#> s.radius.min s.radius.max m.majoraxis m.eccentricity m.theta
#> 1 24.93461 61.96047 111.13309 0.8728996 -1.475677
#> 2 25.53489 50.73238 89.40943 0.8113852 1.425947
#> 3 26.29386 55.49115 100.70392 0.8220289 -1.493911
#> 4 24.74718 51.78100 93.01824 0.8298147 -1.545705
#> 5 29.63731 57.53629 99.08539 0.7942071 1.394135
#> 6 33.21045 61.55517 109.02552 0.7918883 1.486409
#> 7 14.70085 45.91910 78.81307 0.8979370 -1.438720
#> 8 26.97214 62.58624 108.46744 0.8655147 1.563350
#> 9 25.64143 48.23220 88.29446 0.7672720 1.401159
#> 10 27.37879 58.27144 101.04008 0.8383099 -1.371715
#> 11 24.99491 47.74648 85.64426 0.7931361 1.523009
#> 12 21.12534 36.55125 65.74573 0.7465741 1.362382
#> 13 19.37168 43.08195 78.76510 0.8523794 1.430376
#> 14 25.38204 49.19953 86.90649 0.7999709 -1.422090
#> 15 28.02988 60.68517 107.65993 0.8508042 1.456363
#> 16 29.59054 54.00599 97.56696 0.7731340 1.317950
#> 17 21.46633 51.76300 91.40210 0.8724311 1.514860
#> 18 21.00846 46.88853 84.12164 0.8359710 1.404550
#> 19 29.68311 55.19060 97.56922 0.7904816 -1.545611
#> 20 30.58907 60.67997 107.48981 0.8116052 1.562345
#> 21 30.11532 54.48895 95.68566 0.7643603 1.522677
#> 22 17.39236 47.74754 80.69859 0.8787039 1.505353
#> 23 24.39468 44.98401 80.35003 0.7790580 1.385843
#> 24 19.97634 50.17369 83.86356 0.8506943 -1.565709
#> 25 22.60111 45.19870 81.02673 0.8095031 1.299945
#> 26 20.97782 39.15351 71.16054 0.7889107 -1.553455
#> 27 25.54288 55.55723 98.33544 0.8342201 1.320669
#> 28 27.82714 60.19474 103.27848 0.8427778 1.501747
#> 29 27.35696 56.67525 99.89833 0.8143267 1.347638
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 area segmentada esta no objeto ref.seg
=measure_image(img = folhas.seg,noise =1000,id=ref.seg,length =8.5,width =5.5 )
medidasref#numero de objetos e medias
medidasref#> $ObjectNumber
#> [1] 29
#>
#> $measures
#> m.cx m.cy s.area s.perimeter s.radius.mean s.radius.sd
#> 1 251.77372 88.66368 6.392695 9.722746 1.518951 0.4099746
#> 2 64.99642 80.13837 4.955705 8.102288 1.317268 0.2814080
#> 3 407.99222 90.22504 6.142725 8.780619 1.447135 0.3065062
#> 4 179.68075 86.50877 5.138744 8.253028 1.331177 0.2962816
#> 5 332.47775 92.13024 6.324397 9.082100 1.480799 0.2914747
#> 6 498.35918 102.82616 7.716311 10.024226 1.631861 0.3157703
#> 7 120.79672 85.54817 2.835734 7.047106 1.050504 0.3389686
#> 8 430.18009 222.06652 6.242440 9.609690 1.510475 0.4007126
#> 9 122.32543 219.44009 5.301293 8.215343 1.338209 0.2351924
#> 10 207.25739 228.11796 5.917341 9.157470 1.455099 0.3405366
#> 11 508.61534 223.59178 4.754909 7.725437 1.270679 0.2413273
#> 12 352.94047 213.38116 3.074777 6.067295 1.008034 0.1552018
#> 13 283.56922 223.12896 3.453148 6.896366 1.097954 0.2662119
#> 14 511.95685 331.00369 4.812279 7.838493 1.280139 0.2480415
#> 15 364.27909 339.85898 6.480117 9.496635 1.518124 0.3749178
#> 16 129.15520 341.41614 6.433674 8.931359 1.473985 0.2505172
#> 17 434.41430 340.53088 4.335559 8.102288 1.258596 0.3367238
#> 18 292.60725 338.95943 4.107443 7.574697 1.199016 0.2826511
#> 19 223.33458 354.69429 6.197363 8.855989 1.457453 0.2818301
#> 20 498.35083 470.70280 7.183587 9.647376 1.564598 0.3109666
#> 21 308.76464 487.23536 6.250636 8.629879 1.447693 0.2478976
#> 22 84.09018 480.70586 3.241424 7.348587 1.112322 0.3365321
#> 23 226.39690 486.99398 4.312337 7.273217 1.200538 0.2118708
#> 24 371.41361 483.90916 3.834251 7.650067 1.197300 0.3348371
#> 25 148.19720 483.56096 4.100614 7.423957 1.191992 0.2483536
#> 26 433.86221 481.36469 3.311088 6.331090 1.053389 0.1996543
#> 27 509.56070 597.64132 5.659175 8.554509 1.408950 0.3221372
#> 28 436.56853 609.02480 6.059401 9.270525 1.484938 0.3638571
#> 29 351.54697 607.48545 6.150920 9.082100 1.457898 0.3050560
#> s.radius.min s.radius.max m.majoraxis m.eccentricity m.theta
#> 1 0.9396625 2.334984 4.188057 0.8728996 -1.475677
#> 2 0.9622837 1.911853 3.369400 0.8113852 1.425947
#> 3 0.9908856 2.091188 3.795033 0.8220289 -1.493911
#> 4 0.9325990 1.951370 3.505398 0.8298147 -1.545705
#> 5 1.1168840 2.168258 3.734039 0.7942071 1.394135
#> 6 1.2515378 2.319710 4.108633 0.7918883 1.486409
#> 7 0.5540022 1.730464 2.970075 0.8979370 -1.438720
#> 8 1.0164468 2.358566 4.087602 0.8655147 1.563350
#> 9 0.9662989 1.817634 3.327382 0.7672720 1.401159
#> 10 1.0317712 2.195963 3.807702 0.8383099 -1.371715
#> 11 0.9419347 1.799329 3.227509 0.7931361 1.523009
#> 12 0.7961096 1.377436 2.477632 0.7465741 1.362382
#> 13 0.7300229 1.623546 2.968268 0.8523794 1.430376
#> 14 0.9565237 1.854087 3.275076 0.7999709 -1.422090
#> 15 1.0563078 2.286924 4.057171 0.8508042 1.456363
#> 16 1.1151213 2.035219 3.676817 0.7731340 1.317950
#> 17 0.8089598 1.950692 3.444494 0.8724311 1.514860
#> 18 0.7917051 1.766997 3.170129 0.8359710 1.404550
#> 19 1.1186097 2.079861 3.676902 0.7904816 -1.545611
#> 20 1.1527509 2.286728 4.050760 0.8116052 1.562345
#> 21 1.1348975 2.053419 3.605920 0.7643603 1.522677
#> 22 0.6554321 1.799369 3.041131 0.8787039 1.505353
#> 23 0.9193148 1.695225 3.027996 0.7790580 1.385843
#> 24 0.7528095 1.890798 3.160403 0.8506943 -1.565709
#> 25 0.8517244 1.703316 3.053497 0.8095031 1.299945
#> 26 0.7905502 1.475502 2.681689 0.7889107 -1.553455
#> 27 0.9625850 2.093678 3.705777 0.8342201 1.320669
#> 28 1.0486676 2.268442 3.892056 0.8427778 1.501747
#> 29 1.0309487 2.135810 3.764675 0.8143267 1.347638
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)