问题标签 [bspline]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1534 浏览

matlab - 通过matlab中的一组数据点从B样条曲线中找到控制点

我正在使用具有 200 个数据点的数据集来绘制 B 样条曲线,我想从该曲线中提取 100 个原始控制点,以便在一种算法中使用它来解决一个问题。控制点的结果与B样条曲线的数据点的值相比太小了所以我不知道我在下面的代码中是否出错了我需要帮助知道因为我必须使用这些控件用一种算法完成我的学习的要点

一组数据点的链接: https ://drive.google.com/open?id=0B_2BUqaJptbqUkRWLWdmbmpQakk

代码 :

我使用向心法从曲线中找到控制点,如下图所示 在此处输入图像描述

完成我的代码:

要计算控制点,我们必须遵循这个方程 P=Qx(R') --> R' 是 R 矩阵的逆,所以我们必须找到 R 矩阵,然后通过上述方程找到 P(控制点矩阵)。以下场景用于查找R矩阵

在此处输入图像描述 为了在 B-Spline 中计算 N,我们必须使用这些递归函数 在此处输入图像描述

完成我的代码:

我的递归函数找到前一个 R 矩阵:

真的我非常需要这个帮助,我从一周开始就尝试解决这个问题:(

更新: 图 1 为主要 B 样条曲线,图 2 为在该曲线上应用逆向工程后的结果控制点,因此与原始数据点值相比,该值到目前为止如此之小 在此处输入图像描述

更新(2): 我对我的代码进行了一些更新,但问题现在在 R 矩阵的逆矩阵中,它始终给我无限的价值

注意:我更新了我的 NCalculate 递归函数,如果结果是 NaN (不是数字)给我 0

结尾

0 投票
1 回答
827 浏览

r - 从R中的bs(b样条)函数输出中提取矩阵

设为x = c(1, 2, 3)向量。我使用包中的bs函数来生成在 处评估的 B 样条线矩阵。splinesRx

输出bs.x如下,

显然,除了基矩阵,bs.x还有其他属性。我的问题是如何摆脱这些属性。我需要这样做,因为最终我需要运行Matrix(bs.x),这会引发以下错误消息。

我想这是因为matrixbs.x属于的类之一。此刻,我做了以下愚蠢的事情。

有更好的选择吗?提前致谢。

0 投票
2 回答
10611 浏览

r - R函数bs()输出的解释(B样条基矩阵)

我经常使用 B 样条进行回归。到目前为止,我从来不需要bs详细了解输出:我只需选择我感兴趣的模型,并将其与lm. 但是,我现在需要在外部(非 R)代码中重现 b 样条模型。那么,由 生成的矩阵是什么意思bs呢?例子:

好的,degree正如我在输入中指定的那样,1 也是如此。knots告诉我两个内部结分别位于 x = 13.3000 和 x = 38.8333。看到结处于固定分位数有点惊讶,我希望 R 会为我的数据找到最佳分位数,但这当然会使模型非线性,并且在不知道响应数据的情况下也是不可能的。intercept = FALSE意味着基础中没有包含截距(这是一件好事吗?我一直被教导不要在没有截距的情况下拟合线性模型……好吧,我猜lm无论如何只是添加一个)。

但是,矩阵呢?我真的不明白如何解释它。有三列,我认为这意味着基函数是三个。这是有道理的:如果我有两个内部结K1K2,我将在左边界结B1和之间有一个样条线K1,另一个样条线在K1和之间K2,最后一个在K2和之间B2,所以...三个基函数,好的。但究竟哪些是基函数?例如,此列是什么意思?

编辑:这与此问题相似但不完全相同。该问题询问回归系数的解释,但我比这更早一步:我想了解模型矩阵系数的含义。如果我尝试制作与第一个答案中建议的相同的情节,我会得到一个混乱的情节:

在此处输入图像描述

这些不能是 B 样条基函数,因为它们有太多的结(每个函数应该只有一个)。

第二个答案实际上可以让我在 R 之外重建我的模型,所以我想我可以这样做。然而,这个答案也不能准确解释b矩阵的元素是什么:它处理线性回归的系数,我还没有在这里介绍。确实这是我的最终目标,但我也想了解这个中间步骤。

0 投票
2 回答
5195 浏览

c++ - C++ 中的 B 样条曲线

我正在尝试编写一个程序来在 C++ 中生成曲线来绘制 B 样条曲线。这就是我的代码的样子。

但是,正如您从我的输出中看到的那样,由于某种原因,曲线倾向于在原点开始和结束(y 轴反转)。对此原因的任何帮助将不胜感激。感谢:D

输出

0 投票
1 回答
474 浏览

curve - B样条曲线的度数是什么概念?

感谢您关注我的问题。

我的问题是,从标题中可以看出,B 样条曲线的度数概念是什么。

在我正在学习的书中,只有“度数”作为改变曲线形状的因素。

我在互联网上搜索,但结果并不好。

如果你知道 B 样条曲线的度数概念,请回答我这个概念。

谢谢阅读。

0 投票
0 回答
530 浏览

matlab - 如何在matlab中通过b样条曲线插值3d点

我正在寻找一种使用 matlab 用 b 样条曲线插入 3d 点的方法。所以或多或少带有 x,y,z 的 spapi。matlab有内置的吗?

0 投票
2 回答
2289 浏览

c++ - 任意数量控制点的 B 样条

我目前正在使用数字弹簧物理学研究一个软体系统,我终于得到了这个工作。我的问题是目前一切都在直线上。

我的目标是复制类似于游戏“地板是果冻”的东西,除了光滑的角落和目前是直的和有角度的变形之外,一切都可以正常工作。

我曾尝试使用三次贝塞尔方程,但这仅意味着每 3 个节点我就有一条新曲线。是否有一个贝塞尔样条方程,它包含 n 个控制点,这些控制点将与 vec2 的循环一起使用(因此节点 [0] 是第一个和最后一个控制点)。

抱歉,我没有为此显示任何代码,但我完全被难住了,谷歌搜索什么也没有。

0 投票
1 回答
812 浏览

c++ - 在 OpenGL / C++ 中加入 B 样条线段

我正在尝试在给定 11 个控制点的情况下绘制 B 样条曲线。我正在使用 freeglut 和 C++。我能够轻松地显示我的控制点。然后我将基函数编写如下:

这是我的算法,它计算每段 100 个点并将计算的点存储在要显示的数组中,注意 MAX_POINTS 是全局的,点是一个结构数组,每个结构都有浮点数 x、y 和 z:

我稍后调用此 DrawBSpline() 它将遍历数组并显示所有点:

这是我程序的输出: B-Spline output

我只是不确定如何连接这些段并产生一条平滑的曲线。任何帮助,将不胜感激。

0 投票
1 回答
901 浏览

python - 使用 scipy 的 RectBivariateSpline 和 SmoothBivariateSpline 对噪声数据进行样条曲面拟合

我正在尝试对一些成像数据进行 2D 表面拟合。我附上了此类数据的一个示例,它基本上是一个 1014 x 1014 阵列,具有大量噪声。Example_image。该数组的一些补丁是无效数据,我将其屏蔽并设置为 NaN 值,如示例图像中的黄色所示。正如您在图像中看到的,从左(更亮)到右(更暗)有一个背景渐变,我正在尝试将其移除。多项式不能很好地拟合梯度,因此我的目标是进行二维曲面双变量样条拟合,然后减去梯度。

我在 scipy 中尝试了许多任务,但大多数都没有返回理想的结果。

  1. 首先,我尝试了具有 NaN 值或 mask 的大型数组的 [RectBivariateSpline] Bivariate 结构化插值),但由于我的图像中有 NaN,运行 RectBivariateSpline 仅给出 NaN 的输出。

  2. 我也尝试过SmoothBivariateSpline,这是任务的不规则网格版本。我省略了那些具有 NaN 值的像素,并将其余的像素转换为一维数组作为输入。但由于数组大小太大而失败。然后我尝试切碎我的数组以尝试在较小的块上运行它,但它给出了以下错误并退出并出现分段错误,我不知道这意味着什么。

    fitpack2.py:1044:用户警告:输入错误,未返回近似值。必须满足以下条件: xb<=x[i]<=xe, yb<=y[i]<=ye, w[i]>0, i=0..m-1 如果 iopt==-1,然后xb

  3. 然后,我尝试首先使用带有线性插值的 griddata 填充图像中的 NaN 补丁。由于补丁很大,插值并不理想,但至少它给了我一个没有 NaN 的数组。然后我使用这个数组再次运行 RectBivariateSpline。但输出数组仍然是 NaN。

  4. 我怀疑我的图像中的噪声搞砸了这两个任务的行为,所以我还尝试首先在我的图像上运行一个高斯内核来平滑它,然后用 griddata 填充 NaN 补丁,然后运行 ​​RectBivariateSpline 或 SmoothBivariateSpline,但是他们仍然给我以 NaN 值作为输出的数组。

我不确定我是否正确理解了这两个任务的手册,所以我附上了以下脚本:

0 投票
0 回答
90 浏览

c++ - C++ 的动态样条库

我有很多显示道路车道的数据点(例如:1000)。我还为同一位置(同一点的更多测量值)和下一个数据点获得了新的数据点。所以我得到了数据点的流动。我想用 Cubiq Spline 近似这个数据点。为此,我需要一个样条库,它可以让我更新我的道路并给我我的 Cubiq Polinoms(也许我可以动态地说 20 个数据点 = 1 个多项式或更好的方式......就像道路没有任何曲线一样...... .它只有1个多项式,如果它有很多曲线......我有很多多项式)。

你知道任何对我有用的Lib吗?

谢谢

此致

尼古拉