使用 SVD/LMS 拟合球体

Fitting of a sphere using SVD/LMS

我想拟合一个非完美球体的281*398*104矩阵的MR二进制数据,并求出球体的中心和半径以及误差。我知道 LMS 或 SVD 是适合球体的不错选择。

我尝试了 matlab file exchange 的 sphereFit 但出现错误,

 >> sphereFit(data)  
    Warning: Matrix is singular to working precision. 
    > In sphereFit at 33 
    ans =
         NaN   NaN   NaN  

你能告诉我问题出在哪里,或者其他解决方案吗?

如果你想使用球体拟合算法,你应该首先提取你假设为球体的对象的边界点。结果应由包含点坐标的 N×3 数组表示。然后你可以应用sphereFit函数。

为了获得二进制对象的边界点,有几种方法。一种方法是应用小结构元素的形态学腐蚀(需要图像处理工具箱中的 "imerode" 函数),然后计算两幅图像之间的集差,最后使用 "find" 函数转换二值图像转换成坐标数组。

思路如下:

dataIn = imerode(data, ones([3 3 3]));
bnd = data & ~data2;
inds = find(bnd);
[y, x, z] = ind2sub(size(data), inds); % be careful about x y order
points = [x y z];
sphere = sphereFitting(points);

对了,你给的link指的是圆拟合,我想你是想指向一个球体拟合提交?

问候,