Matlab 二维离散数据点(轮廓图像像素)的B样条拟合
我试图将B样条拟合到一组有序离散数据点,这些数据点表示从图像中提取的轮廓像素 虽然下面的代码适用于一些简单的形状,但不适用于其他形状(请参阅附件中的图片以获取示例)。为什么会发生这种情况?解决这个问题的更好方法是什么 我是微分几何的新手,非常欣赏任何见解或意见。谢谢Matlab 二维离散数据点(轮廓图像像素)的B样条拟合,matlab,image-processing,curve-fitting,bspline,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'
% 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-');
出了什么问题?
您有两组编号x
和y
,两组中的元素数相同。您假设:
A.有一个函数
f
,使得f(x_i)=y_i
对于集合中的所有对x_i,y_i
。B集合中的点是有序的:也就是说,如果你沿着
f(x)
的曲线,那么x_i
“在”x_{i+1}
之前
虽然这些假设适用于您的“正确匹配”示例。它们对于“不正确配合”示例不再有效。正如您自己所看到的,顶部的输入轮廓不能用
y=f(x)
表示,因为存在x的值,其中有两个可能对应的y
(请参阅)。您得到的拟合最接近于数学函数y=f(x)
,该函数可以给定您给定的对x,y
(红色曲线具有每个x
只有一个y
值的特性)
你能做什么?
在大多数情况下,当您尝试拟合二维曲线时,您会搜索a:也就是说,您会引入一个辅助参数t
,这样曲线上的每个点都可以表示为[x(t),y(t)]
,对于某些0
t = linspace( 0, 1, numel(x) ); % define the parameter t
fitX = fit( t, x, 'cubicinterp'); % fit x as a function of parameter t
fitY = fit( t, y, 'cubicinterp'); % fit y as a function of parameter t
plot( fitX, fitY, 'r-' ); % plot the parametric curve