从表面上的点估计球体的中心和半径

机器算法验证 回归 估计 非线性回归 几何学
2022-03-10 22:59:38

如果我们假设我们的数据点是从球体表面采样的(带有一些扰动),我们如何恢复该球体的中心?

在我的搜索中,我发现了一些标有“球形回归”的论文,但它看起来不像是在做同样的事情。也许我只是不明白。

是否有一个简单的公式,类似于线性回归,可以找到一个球体中心点和半径,以最小化一组数据点与球体表面的平方和距离?


编辑1:

我们可以假设噪声将比球体的半径小 2 或 3 个数量级,并且呈均匀的球面高斯分布。然而,样本本身肯定不会从球体表面均匀地抽取出来,而是可能会聚集在表面上的几个小块中,很可能都在一个半球内。适用于数据的解决方案R3很好,但是任意维度的通用解决方案也很棒。


编辑2:

如果我使用线性回归,我得到合理答案的机会有多大,y=Xβ+ϵ,在 7 维空间中,假设平方分量独立于其他参数:

X=[2x2y2z1111]β=[x0y0z0x02y02z02r2]y=x2+y2+z2

充其量,我想我的错误度量会有点古怪。在最坏的情况下,解决方案甚至不会接近一致。
...或者这很愚蠢,因为有四个相同的列,当我们尝试进行回归时,我们会得到一个奇异矩阵。


编辑3:

所以,看起来这些是我的选择:

  1. 使用一些成本函数的非线性数值优化:f(x0,y0,z0,r|X)=12i=1n(r(xix0)2+(yiy0)2+(ziz0)2)2
  2. 霍夫变换:离散化可能的空间或数据点周围的可能中心和半径。在每个特定半径离散化中,每个点都会对可能成为其一部分的潜在中心进行投票。大多数选票获胜。如果可能存在未知数量的球体,这可能没问题,但只有一个球体是一个混乱的解决方案。
  3. 随机(或系统地)选择 4 个点的组并分析计算 center如果条件不佳(点几乎共面),则拒绝采样。拒绝异常值并找到平均中心。从中我们可以找到平均半径。

有没有人有更好的方法?

2个回答

下面是一些R代码,显示了使用最小二乘法的一种方法:

# set parameters

mu.x <- 8
mu.y <- 13
mu.z <- 20
mu.r <- 5
sigma <- 0.5

# create data
tmp <- matrix(rnorm(300), ncol=3)
tmp <- tmp/apply(tmp,1,function(x) sqrt(sum(x^2)))

r <- rnorm(100, mu.r, sigma)

tmp2 <- tmp*r

x <- tmp2[,1] + mu.x
y <- tmp2[,2] + mu.y
z <- tmp2[,3] + mu.z


# function to minimize
tmpfun <- function(pars) {
    x.center <- pars[1]
    y.center <- pars[2]
    z.center <- pars[3]
    rhat <- pars[4]

    r <- sqrt( (x-x.center)^2 + (y-y.center)^2 + (z-z.center)^2 )
    sum( (r-rhat)^2 )
}

# run optim
out <- optim( c(mean(x),mean(y),mean(z),diff(range(x))/2), tmpfun )
out


# now try a hemisphere (harder problem)

tmp <- matrix(rnorm(300), ncol=3)
tmp[,1] <- abs(tmp[,1])
tmp <- tmp/apply(tmp,1,function(x) sqrt(sum(x^2)))

r <- rnorm(100, mu.r, sigma)

tmp2 <- tmp*r

x <- tmp2[,1] + mu.x
y <- tmp2[,2] + mu.y
z <- tmp2[,3] + mu.z

out <- optim( c(mean(x),mean(y),mean(z),diff(range(y))/2), tmpfun )
out

如果您不使用R,那么您仍然应该能够遵循逻辑并将其翻译成另一种语言。

从技术上讲,半径参数应该以 0 为界,但是如果相对于真实半径的可变性很小,那么无界方法应该可以正常工作,或者 optim 可以选择进行有界优化,(或者你可以只做函数中的半径以最小化)。

您可能对最适合的 d 维球体感兴趣,即最小化到中心的平方距离的总体方差;它有一个简单的解析解(矩阵微积分):参见 Cerisier 等人的开放获取论文的附录。在 J. 计算机。生物学。24(11), 1134-1137 (2017), https://doi.org/10.1089/cmb.2017.0061 它在数据点被加权时起作用(它甚至适用于连续分布;作为副产品,当 d= 1,检索一个众所周知的不等式:峰度总是大于平方偏度加 1)。