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: Contagem de bovinos

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 analise 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 uma imagem contida no banco de dados do pacote.

# Obtendo o endereço da imagem de exemplo
end=example_image(11)
im=read_image(end,plot=TRUE)

Vamos verificar qual é o melhor índice para fazer a segmentação.

plot_indexes(im,NumberCores=2)

O Índice ExG é uma ótima opção para a segmentação, pois os bovinos se destacaram bastante em relação ao solo.

#Criando o objeto com o índice
im2=gray_scale(im,method = "ExG",plot=T)

Agora podemos fazer a segmentação. Para isso utilizaremos o algorítimo de otsu a fim de selecionar os pixels de menores valores (foregrounds)

max(c(im2@.Data))
#> [1] 1
im3=segmentation(im2,treshold = "otsu",selectHigher = FALSE,plot=TRUE)
#> [1] "The threshold by Otsu method is (O valor do limiar pelo metodo otsu e): 0.5605"

A partir dessa imagem segmentada podemos contar o número de objetos.

im4=measure_image(im3)

#Numero de objetos
im4$ObjectNumber
#> [1] 149

#Tamanho em pixels de cada objeto
im4$measures[,3]
#>   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
#> 111   6  48 113   4   3  45 194   1 206   1   1   1 193 178 123 152 186 205 148 
#>  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
#> 117 373   1  66   1   1  84   1   1 171   2   1 206 187 172 161   2 166 196 152 
#>  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
#>   1 140 209 137 171 137   2 208   3   2 198 174 232 139 209   2   1   1   4   4 
#>  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
#> 213 157   3 231   2   8   2   3   1   1 234 102   5 196   1 128   1   2 212 184 
#>  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
#>   1   6 232   1   1 193   1 211   1 175 186   1 177   1   5 160   1   1   1   4 
#> 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 
#>   1 191   8 139 181 203 214   1 177 135 180 167 192 167 166 163   1   1 166 187 
#> 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 
#> 138   3   1 173 206  30 146 193 198   5   8   2 174 162 164 163   2   4   1 152 
#> 141 142 143 144 145 146 147 148 149 
#>   5 176 144 163 163 170  87   2   1

Como pode-se observar, o número de objetos é muito superior ao número de animais. Isso é uma consequência do ruido. Podemos ver na terceira coluna da tabela anterior o número de pixels de cada objeto. Os menores valores de área são os ruidos. Logo, podemos selecionar um valor a partir do qua não consideraremos ruídos. Ao olhar o conjunto de dados podemos ver que um ruído de 50 pode permitir selecionar apenas os animais.

im4=measure_image(im3,noise=50)

im4$measures[,1:3]
#>          x       y area
#> 1  131.081  11.820  111
#> 2  201.814   7.938  113
#> 3  273.619  17.974  194
#> 4  441.083  18.607  206
#> 5  565.819  24.155  193
#> 6  303.815  31.281  178
#> 7  467.073  32.065  123
#> 8  179.316  34.099  152
#> 9  373.016  32.253  186
#> 10 257.073  34.532  205
#> 11  57.426  37.966  148
#> 12 128.017  48.709  117
#> 13 233.799  55.477  373
#> 14  42.364  46.924   66
#> 15  46.131  55.726   84
#> 16 547.029  54.614  171
#> 17 484.117  84.888  206
#> 18 292.567  81.952  187
#> 19 359.209  84.483  172
#> 20 570.255  89.839  161
#> 21 100.084 101.699  166
#> 22 157.352  95.286  196
#> 23  87.987 107.250  152
#> 24 215.114 116.450  140
#> 25 413.684 110.086  209
#> 26  21.511 113.511  137
#> 27 334.649 119.211  171
#> 28  45.774 129.569  137
#> 29 563.317 133.062  208
#> 30 184.697 145.778  198
#> 31 107.661 147.391  174
#> 32 266.004 152.466  232
#> 33 383.302 156.935  139
#> 34 414.785 154.234  209
#> 35 500.432 164.329  213
#> 36  18.433 169.051  157
#> 37 478.589 167.610  231
#> 38 337.744 172.410  234
#> 39  84.814 179.637  102
#> 40 427.128 179.469  196
#> 41 293.125 194.797  128
#> 42 207.717 194.052  212
#> 43 551.386 193.783  184
#> 44 439.078 200.099  232
#> 45 494.482 201.788  193
#> 46 359.242 212.768  211
#> 47 107.086 214.594  175
#> 48 450.667 217.414  186
#> 49  47.791 218.633  177
#> 50 167.994 223.506  160
#> 51 457.105 231.785  191
#> 52 395.504 243.086  139
#> 53  40.436 243.177  181
#> 54 506.517 247.921  203
#> 55 416.607 252.121  214
#> 56 352.667 252.339  177
#> 57 470.874 260.644  135
#> 58 143.039 264.378  180
#> 59 197.527 265.275  167
#> 60 433.781 273.375  192
#> 61  76.653 271.401  167
#> 62 271.000 274.825  166
#> 63 130.730 279.037  163
#> 64 328.536 280.765  166
#> 65 411.647 285.786  187
#> 66  39.181 287.884  138
#> 67 271.029 292.231  173
#> 68 513.752 294.903  206
#> 69 160.589 295.384  146
#> 70 350.223 298.658  193
#> 71 457.722 307.803  198
#> 72 526.678 318.678  174
#> 73 600.290 317.981  162
#> 74 107.543 320.104  164
#> 75 143.117 321.896  163
#> 76 178.868 328.974  152
#> 77 504.807 331.841  176
#> 78  90.007 331.688  144
#> 79 407.025 334.644  163
#> 80 227.344 336.583  163
#> 81 468.800 339.529  170
#> 82  27.667 341.828   87

#Numero de objetos
im4$ObjectNumber
#> [1] 82

Para conferir se este número de animais está correto podemos marcar na imagem as coordenadas de cada animal, considerando só dados das duas primeiras colunas do conjunto de dados.

plot_meansures(im,measurements = im4,pch=1,
               cex =2 )

Como podemos ver, todos os animas foram marcados. Logo, a contagem dos animais está correta.

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.