Как построить комплекс альфа-формы для фиксированного радиуса с пакетом TDA? - PullRequest
0 голосов
/ 27 февраля 2020

TDA пакета R (https://cran.r-project.org/package=TDA) используется для анализа топологических данных.

Меня интересует реконструкция комплексов альфа-формы с фиксированным радиусом (по оценкам постоянный штрих-код)

Имея это в виду, я попробовал эту реконструкцию с этим набором игрушечных данных

library(TDA)

n <- 100
theta <- runif(n, 0, 2 * pi)
r1 <- sqrt(runif(4 * n)) + 1
r2 <- sqrt(runif(n)) * 0.5 + 0.5

X1c1 <- r1 * cos(theta)
Yc1 <- r1 * sin(theta)
X1c2 <- r2 * cos(theta) + 2
Yc2 <- r2 * sin(theta) + 2
X1 <- c(X1c1, X1c2)

X <- cbind(c(Yc1, Yc2), c(X1c1, X1c2))

plot(X)

Фигура состоит из двух кругов разных диаметров.

Тогда Я создаю альфа-комплексы с TDA

alphaDiag <-   alphaComplexDiag(
  X = X,
  library = c("GUDHI", "Dionysus"),
  location = TRUE,
  maxdimension = 1,
  printProgress = TRUE
)

alphaFiltration <- alphaComplexFiltration(
  X = X, 
  printProgress = TRUE)

Построение диаграммы персистентности, которую я получаю

plot(alphaDiag$diagram)

Персистенция:
Persistence

И комплексная реконструкция

lim <- rep(c(-2, 3), 2)
plot(
  NULL,
  type = "n",
  xlim = lim[1:2],
  ylim = lim[3:4],
  main = "Alpha Complex Filtration Plot", 
  asp=1
)
for (idx in seq(along = alphaFiltration[["cmplx"]])) {
  polygon(
    alphaFiltration[["coordinates"]][alphaFiltration[["cmplx"]][[idx]], , drop = FALSE],
    col = "pink",
    border = NA,
    xlim = lim[1:2],
    ylim = lim[3:4]
  )
}
for (idx in seq(along = alphaFiltration[["cmplx"]])) {
  polygon(alphaFiltration[["coordinates"]][alphaFiltration[["cmplx"]][[idx]], , drop = FALSE],
          col = NULL,
          xlim = lim[1:2],
          ylim = lim[3:4])
}
points(alphaFiltration[["coordinates"]], pch = 16)

Комплекс:
Complex

Как видите, альфа-комплекс плохо захватывает две дырки , Я хотел бы откорректировать радиус (аналогично рипам Vietoris o Cech), чтобы создать лучшую фигуру.

У вас есть идеи или указатели для этой проблемы?

...