【问题标题】:center of mass 3d matlab质心 3d matlab
【发布时间】:2013-03-27 17:42:09
【问题描述】:

我有一个稀疏的 3d 体积(立方体),在每个 x,y 位置我想创建一个半径为 r 的球体,中心位于 x,y,z。对于每个球体,我想计算质心。

我的问题:

  1. 每个球体内的点分布不均匀,所以我的质心不是质心,我如何计算质心?我发现了很多不同的方法...

  2. 我需要在每个size(x)*size(y) 次计算这个,这可能非常大, 我可以像这样创建一个 3d 球体:

    w = ceil(r)*2+1;
    [x,y,z] = meshgrid(1:w,1:w,1:w);
    xc = floor(w./2)+1;
    yc = floor(w./2)+1;
    zc = floor(w./2)+1;   
    mask = (x-xc).^2 + (y-yc).^2 + (z-zc).^2 <= r.^2;
    mask = double(mask);
    

但这会让我对每个点都使用循环,并且会很耗时。 谢谢 MATLAB

【问题讨论】:

  • 你事先有点坐标,还是随机确定?
  • 我有,其实是1:size(x), 1:size(y),1:size(z)
  • 那么质心将为 (1+size(x))/2, (1+size(y))/2, (1+size(z))/2
  • 我无法完全理解你的问题,你想计算所有球体的质心,还是立方体?
  • @fatih_k,每个球体中的每个点都有不同的质量,所以质心不是质心,球体取自立方体的位置,这并不重要,我提到过因为我想强调的是应该很快,因为立方体很大,我需要执行 x*y 次。

标签: matlab geometry computer-vision physics


【解决方案1】:

查看K-means clustering 的更新步骤,它将找到球体的质心。

要找到应该包含在该球体中的点,请计算球体质心和每个点之间的euclidean distance 并设置阈值。如果距离小于球体的半径,则将其包括在内。

在您的一组 x,y,z 球体质心上的三个深度嵌套 for 循环中执行此操作,您就完成了。

【讨论】:

  • 好的,在这种情况下,质心是否会是(对于每个 x,y,z):xc = sum (x_coord * point mass) / sum(all points mass) ?
  • 假设您将点限制在当前范围内的点,这听起来是正确的。
  • 知道如何避免 matlab 中的 3 个循环吗?
  • 为了简单起见,我建议使用 3 个循环,但如果您真的想避免它们,您可以在矢量 1:(max_X*max_Y*max_Z) 上使用单个循环,然后使用 ind2sub 将其转换回 3d 坐标.
猜你喜欢
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多