--- title: "Exemplo: Comprimento da plântula" author: "Alcinei Mistico Azevedo (ICA-UFMG)" date: "`r Sys.Date()`" output: rmarkdown::html_vignette fig_caption: yes vignette: > %\VignetteIndexEntry{Exemplo: Comprimento da plântula} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} 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: ```{r} 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. ```{r} 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: ```{r} #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: ```{r} plot_indexes(im,NumberCores=2) ``` ## Segmentação da parte radicular ```{r} 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: ```{r} radicula=thinning_image(Seg,plot = TRUE) #Obtenção do comprimento da raiz em pixels sum(radicula) ``` Para a melhor visualização do eixo obtido pelo thinning podemos apresenta-lo sobre a imagem: ```{r} 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. ```{r} 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: ```{r} Seg2b=EBImage::erode(Seg2) EBImage::display(Seg2b) ``` Agora é possível fazer o thinning considerando os pixels correspondentes à parte aérea: ```{r} PA=thinning_image(Seg2b,plot = TRUE) #Obtenção do comprimento da raiz em pixels sum(PA) ``` Para a melhor visualização podemos destacar em azul o eixo correspondente ao thinning: ```{r} 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.