gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:39 26 4
gpt4 key购买 nike

我正在尝试将 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

最佳答案

出了什么问题?

你有两组数字 xy两个集合中的元素数量相同。
你假设:
A。有一个函数 f这样 f( x_i ) = y_i 对于所有对 x_i,y_i在你的集合中。
b.集合中的点是有序的:也就是说,如果你遵循 f(x) 的曲线然后 x_i “先于”x_{i+1} .

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

你能做什么?

在大多数情况下,当您尝试拟合 2D 曲线时,您会搜索 parametric curve : 也就是你引入一个辅助参数t这样曲线上的每个点都可以表示为 [x(t), y(t)]对于一些 0<=t<=1 .
现在,如果假设 b 成立(通过查看您的示例,我不确定是否成立),您可以做的是

 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

关于matlab - B 样条拟合到 2D 离散数据点(轮廓图像的像素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16399431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com