Exemplo: Contagem de bovinos

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

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))
im3=segmentation(im2,treshold = "otsu",selectHigher = FALSE,plot=TRUE)

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

im4=measure_image(im3)
#Numero de objetos
im4$ObjectNumber

#Tamanho em pixels de cada objeto
im4$measures[,3]

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]

#Numero de objetos
im4$ObjectNumber

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.



Try the ExpImage package in your browser

Any scripts or data that you put into this service are public.

ExpImage documentation built on Jan. 6, 2023, 1:24 a.m.