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)