The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
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[@]metanet.ch.

Exemplo: Comprimento da plântula

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)
#> Loading required package: raster
#> Loading required package: sp

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.


end1=example_image(10)
im=read_image(end1,plot=TRUE)

Segmentação

Para resolver este problema nós vamos fazer duas segmentações. A primeira para obter os pixeis referente apenas à parte aérea. A segunda segmentação será feita para obter os pixeis correspondente apenas à parte radicular.

Para isso, vamos primeiramente escolher a melhor banda para trabalharmos:

#Selecionando o melhor indice para a segmentacao
r=gray_scale(im,method = "r",plot=T)

g=gray_scale(im,method = "g",plot=T)

b=gray_scale(im,method = "b",plot=T)

Como foi possível observar, a banda de azul possibilita um bom contraste da plântula do fundo. Logo, vamos escolher um valor de limiar pela tentativa e erro.

Outra opção de explorar outros possíveis índices é por meio do seguinte comando:

plot_indexes(im,NumberCores=2)

Segmentação da parte radicular

plot_image(b,col = 3)

Seg=segmentation(b,treshold = 0.65,selectHigher = TRUE,fillHull = TRUE,plot = TRUE)

Quando se utiliza um limiar de 0.65 torna-se possivel separar apenas os pixels correspondentes às raízes.

A partir dessa imagem segmentada pode-se obter o comprimento da radícula a partir da contagem de pixels após o thinning:

radicula=thinning_image(Seg,plot = TRUE)
#> [1] "a"
#> Warning in class(x) <- "matrix": Setting class(x) to "matrix" sets attribute to
#> NULL; result will no longer be an S4 object
#> [1] "b"


#Obtenção do comprimento da raiz em pixels
sum(radicula)
#> [1] 847

Para a melhor visualização do eixo obtido pelo thinning podemos apresenta-lo sobre a imagem:

im2=mask_pixels(im,TargetPixels=radicula==1,col.TargetPixels = "red",plot=F)
im3=join_image(im,im2,plot=T)

Segmentação da parte aérea

Vamos escolher um novo limiar para conseguir separar o que é parte aérea.

plot_image(b,col = 3)

Seg2=segmentation(b,treshold = 0.5,selectHigher = FALSE,fillHull = TRUE,plot=TRUE)

É possível observar muito ruído. Este problema pode ser amenizado utilizando a função erode do EBImage:

Seg2b=EBImage::erode(Seg2)
EBImage::display(Seg2b)    

Agora é possível fazer o thinning considerando os pixels correspondentes à parte aérea:

PA=thinning_image(Seg2b,plot = TRUE)
#> [1] "a"
#> Warning in class(x) <- "matrix": Setting class(x) to "matrix" sets attribute to
#> NULL; result will no longer be an S4 object
#> [1] "b"


#Obtenção do comprimento da raiz em pixels
sum(PA)
#> [1] 683

Para a melhor visualização podemos destacar em azul o eixo correspondente ao thinning:

im4=mask_pixels(im,TargetPixels=PA==1,plot=F,)
im4=join_image(im,im4,plot=T)

A unidade de medidas dos comprimentos está em pixels, mas podem ser convertido para cm quando se tem um objeto de referencia na imagem ou se sabe a área da imagem escaneada.

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.