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)

Previous
Next