Segmentação de imagens
Diretório das imagens
# mudar de acordo com a pasta em seu computador
setwd("E:/Desktop/tiagoolivoto/static/tutorials/pliman_ufsc_fito/leaves")
Segmentação
No pliman
, as seguintes funções podem ser usadas para segmentar uma imagem.
image_binary()
para produzir uma imagem binária (preto e branco)image_segment()
para produzir uma imagem segmentada (objetos de imagem e um fundo branco).image_segment_iter()
para segmentar uma imagem iterativamente.
Ambas as funções segmentam a imagem com base no valor de algum índice de imagem, que pode ser uma das bandas RGB ou qualquer operação com essas bandas. Internamente, essas funções chamam image_index()
para calcular esses índices. Aqui, usamos o argumento index"
para testar a segmentação com base no RGB e seus valores normalizados. Os usuários também podem fornecer seu índice com o argumento my_index
.
library(pliman)
## |==========================================================|
## | Tools for Plant Image Analysis (pliman 1.1.0) |
## | Author: Tiago Olivoto |
## | Type 'citation('pliman')' to know how to cite pliman |
## | Type 'vignette('pliman_start')' for a short tutorial |
## | Visit 'http://bit.ly/pkg_pliman' for a complete tutorial |
## |==========================================================|
img <- image_import("folhas.jpg", plot = TRUE)
resized <- image_resize(img, 30) # reduz a resolução (plota mais rápido)
# Calcule os índices
indexes <- image_index(resized, index = c("R, G, B"))
# Crie um gráfico raster com os valores RGB
plot(indexes, ncol = 3)
# Cria um histograma com os valores RGB
plot(indexes,
type = "density",
ncol = 3)
Os dois picos representam as folhas (pico menor) e o fundo (pico maior). Quanto mais clara for a diferença entre esses picos, melhor será a segmentação da imagem.
A função image_segment()
é usada para segmentar imagens usando índices de imagem. Em nosso exemplo, usaremos os mesmos índices calculados abaixo para ver como a imagem é segmentada. A saída desta função pode ser usada como entrada na função analyze_objects()
.
segmented <- image_segment(img, index = "B")
Produzindo uma imagem binária
No pliman, podemos produzir uma imagem binária com image_binary()
. A título de curiosidade, usaremos os índices "B"
(azul). Por padrão, image_binary()
redimensiona a imagem para 30% do tamanho da imagem original para acelerar o tempo de computação. Use o argumento resize = FALSE
para produzir uma imagem binária com o tamanho original.
# tamanho de imagem original
image_binary(img, index = "B")
# inverte a binarização
image_binary(img, index = "B", invert = TRUE)