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](https://i.stack.imgur.com/uLqap.png)
И комплексная реконструкция
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](https://i.stack.imgur.com/2ixMY.png)
Как видите, альфа-комплекс плохо захватывает две дырки , Я хотел бы откорректировать радиус (аналогично рипам Vietoris o Cech), чтобы создать лучшую фигуру.
У вас есть идеи или указатели для этой проблемы?