B样条拟合到2D离散数据点(轮廓图像的像素)

时间:2013-05-06 13:06:03

标签: matlab image-processing curve-fitting bspline

我试图将B样条拟合到一组有序的离散数据点,这些数据点代表从图像中提取的轮廓的像素。

虽然以下代码适用于某些简单的形状,但不适用于其他形状(请参阅附图中的示例)。为什么会发生这种情况,以及解决这个问题的更好方法是什么?

我对微分几何是一个新手,欣赏任何见解或输入。感谢。

% data contains two columns representing x,y coordinates of pixels
x = data(:, 1); 
y = data(:, 2); 
plot(x, y, 'bo');
fittedmodel = fit(x, y, 'cubicinterp');
plot(fittedmodel, 'r-');

example

1 个答案:

答案 0 :(得分:5)

出了什么问题?

您有两组数字xy,两组中的元素数量相同。
你假设:
   一个。有一个函数ff( x_i ) = y_i为您的集合中的所有对x_i,y_i
   湾该集合中的点是有序的:也就是说,如果您遵循f(x)的曲线,那么x_i“会出现在”x_{i+1}之前。

虽然这些假设适用于你所拥有的“正确适合”的例子。对于“不合适”的例子,它们不再有效 正如您自己可以看到的那样,顶部上的输入轮廓不能表示为y = f(x),因为有x的值 2 可能的y对应值(参见definition of mathematical function)。你得到的拟合与数学函数y = f(x)最接近,可以给出你给出的对x,y(红色曲线的每个x的属性只有一个y价值)。

你能做什么?

在大多数情况下,当您尝试拟合2D曲线时,您会搜索parametric curve:也就是说,您会引入辅助参数t,以便曲线上的每个点都可以表示为{{ 1}}对于某些[x(t), y(t)] 现在,如果假设b成立(并且通过查看您的示例,我不确定它是什么),您可以做的是

0<=t<=1