使用 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指的是圆拟合,我想你是想指向一个球体拟合提交?
问候,
我想拟合一个非完美球体的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指的是圆拟合,我想你是想指向一个球体拟合提交?
问候,