Как разделить кластеры после сегментации Kmean - PullRequest
0 голосов
/ 14 октября 2019

Я сегментировал изображение RGB на 3 кластера. Я хочу воссоздать изображения, содержащие индексы из каждого кластера отдельно - используя R. Как я могу это сделать?

1 Ответ

3 голосов
/ 14 октября 2019

Вы не включаете минимальный воспроизводимый пример или образец набора данных, поэтому я буду считать, что вы сделали что-то вроде статьи: https://alstatr.blogspot.com/2014/09/r-k-means-clustering-on-image.html

Одно изменение вкод в вышеупомянутой статье, который может помочь вам связать номер кластера с каждым пикселем, будет следующим:

library(dplyr)

kClusters <- 3
# pick all distinct colors we will be using for clustering
unique_colors <- imgRGB %>% select(R, G, B) %>% distinct() 
kMeans <- kmeans(unique_colors, centers = kClusters)

df <- imgRGB %>% 
  left_join(
    # make the data frame to join with the original
    bind_cols(unique_colors,
              data.frame(
                cluster = kMeans$cluster
              )),
    by = c("R", "G", "B")
  )

str(df)

# 'data.frame': 420800 obs. of  6 variables:
# $ x      : int  1 1 1 1 1 1 1 1 1 1 ...
# $ y      : int  526 525 524 523 522 521 520 519 518 517 ...
# $ R      : num  0.00392 0.00392 0.00392 0.00392 0.00392 ...
# $ G      : num  0.00392 0.00392 0.00392 0.00392 0.00392 ...
# $ B      : num  0.00392 0.00392 0.00392 0.00392 0.00392 ...
# $ cluster: int  2 2 2 2 2 2 2 2 2 2 ...

Тогда вы можете использовать значения кластера для огранки ggplot:

ggplot(data = df, aes(x = x, y = y)) + 
  geom_point(colour = rgb(df[c("R", "G", "B")])) +
  labs(title = "Separated clusters") +
  xlab("x") +
  ylab("y") +
  coord_fixed() +
  facet_wrap(~cluster, nrow = 2)

, который выдает что-то вроде:

Separated clusters in image

Надеюсь, это поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...