Segmentação de imagens

Diretório das imagens

# mudar de acordo com a pasta em seu computador
setwd("E:/Desktop/tiagoolivoto/static/tutorials/pliman_lca/imgs")

Importar imagens

library(pliman) 
img <- image_import("grains.jpg")
img <- image_resize(img, rel_size = 50, plot = TRUE)

Segmentação de imagem

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.

# Calcule os índices
indexes <- image_index(img, index = c("R, G, B, NR, NG, NB"))

# Crie um gráfico raster com os valores RGB
plot(indexes)

# Crie um histograma com os valores RGB
plot(indexes, type = "density")

Os dois picos representam a folha (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 = c("R, G, B, NR, NG, NB"))

Parece que o índice "B" e "NB" proporcionaram melhor segmentação.

Produzindo uma imagem binária

Também 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.

binary <- image_binary(img)

# tamanho de imagem original
image_binary(img,
             index = "B",
             resize = FALSE)

# inverte a binarização
image_binary(img,
             index = "B",
             resize = FALSE,
             invert = TRUE)

Previous
Next