使用SVD / LMS拟合球体

时间:2016-03-08 07:17:16

标签: image matlab curve-fitting least-squares svd

我想拟合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  

您能让我知道问题出在哪里或其他任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

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

为了获得二元对象的边界点,有几种方法。一种方法是使用小结构元素应用形态侵蚀(需要来自图像处理工具箱的“imerode”函数),然后计算两个图像之间的集合差异,最后使用“查找”函数将二进制图像转换为坐标阵列。

这个想法如下:

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);

顺便说一句,你提供的链接是指圈子拟合,我想你想指向一个球体拟合提交?

的问候,