Трехмерное сопоставление/кластеризация точек в R

Я хотел бы сопоставить точки в трехмерном пространстве.

Поэтому я использую венгерский метод, описанный в этом вопросе: лучшие совпадающие попарные точки из 2 векторов

Вот мой пример с использованием R:

# packages
library(rgl)
library(clue)
library(plyr)
library(fields)

set.seed(1)
a <- c(rep(2,7), 3,4,5,6,3,4,5,6,7,7,7,7,7,7) # x values
b <- c(rep(3,7),3,3,3,3, 3,3,3,3,3,3,3,3,3,3) # y values
c <- c(seq(1,7),1,1,1,1,7,7,7,7,1,2,3,4,5,6) # z values

# transform the points
set.seed(2)
a1 <- a + seq(1,length(a)) 
b1 <- b + 8 
c1 <- c + 9 


# plot the data
plot3d(a,b,c,  col="red", pch=16,size=10)
plot3d(a1,b1,c1, lwd=10, col="blue", pch=16,size=10, add=TRUE)

# run the Hungarian Method
A <- cbind(a,b,c)
B <- cbind(a1,b1,c1)

distances <- rdist(A,B) # calculate Euclidean Distance between points
min.dist <- solve_LSAP(distances) # minimizing the sum of distance 

min.dist.num <- as.numeric(min.dist)

# plot the minimized lines between point sets
for (ii in 1:dim(B)[1]){

  D <- c(A[ii,1], B[min.dist.num[ii],1])
  R <- c(A[ii,2], B[min.dist.num[ii],2])
  W <- c(A[ii,3], B[min.dist.num[ii],3])
  segments3d(D,R,W,col=2,lwd=1)

}
# calculate the share of points that is matched correctly
sum(1:dim(B)[1]==min.dist.num)/dim(B)[1]* 100

красный: исходные точки, синий: измененные точки

Проблема здесь в том, что только 5% точек совпадают правильно (см. последнюю строку кода). На мой взгляд, главная беда в том, что алгоритм не учитывает структуру объекта (квадрата).

Вопрос: есть ли какой-либо метод, который лучше работает с этими примерами данных?

В моих исходных данных размерная структура точек намного сложнее. У меня есть облако данных, и в этом облаке есть несколько субфигур.

Я ищу в первую очередь решение в R, но другие реализации (например, MATLAB, Excel, Java) также приветствуются.


person Daniel Ryback    schedule 18.11.2016    source источник
comment
Я не уверен, что SO - лучший сайт для этого вопроса. Тем не менее, вы можете взглянуть на пакет optmatch и связанные с ним документы Пола Розенбаума и соавторов. Этот метод пытается минимизировать общую функцию сетевого расстояния.   -  person lmo    schedule 18.11.2016
comment
Спасибо за ваш ответ. Что может быть лучше сайта? Перекрестная проверка?   -  person Daniel Ryback    schedule 18.11.2016
comment
Это хороший вопрос. CV, вероятно, подходит лучше, но кажется, что вопрос чем-то вроде вычислительной математики. Нахождение алгоритма, удовлетворяющего некоторой целевой функции.   -  person lmo    schedule 18.11.2016
comment
Попробуйте лучше предварительно обработать данные. т.е. центрируйте свои данные и стандартизируйте их.   -  person Has QUIT--Anony-Mousse    schedule 15.12.2016