Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 二维离散数据点(轮廓图像像素)的B样条拟合_Matlab_Image Processing_Curve Fitting_Bspline - Fatal编程技术网

Matlab 二维离散数据点(轮廓图像像素)的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'

我试图将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-');

出了什么问题? 您有两组编号
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