【问题标题】:Higher order interpolation for contour plots in pythonpython中等高线图的高阶插值
【发布时间】:2013-12-01 13:45:49
【问题描述】:

你们中有人知道 Python 中二维轮廓的高阶插值方法(Catmull-Rom 样条、三次插值等)吗?

Skimage、Matplotlib 和 OpenCV 分别提供函数 measure.find_contours()、contours() 和 findContours(),但都是基于线性插值(也称为行进正方形),我正在研究更高最好是 Python 中的准确性。任何指针将不胜感激。

https://www.dropbox.com/s/orgr2yqhbbk2xnr/test.PNG

在上图中,我试图从 f(x,y)=x^3+y^3 的标量场中提取等值 25。我正在寻找比线性插值给出的 6 个红点精度更高的 6 个点。

【问题讨论】:

  • 我认为您希望在将数据传递给轮廓之前对其进行平滑处理。你看过这个帖子吗? stackoverflow.com/questions/12274529/… Scipy 的 griddata 函数如果您不是从规则间隔的数据开始,也可能会感兴趣:docs.scipy.org/doc/scipy/reference/generated/…
  • 嗯,我认为这个问题可能与这个问题重复:stackoverflow.com/questions/18402355/…(如果不是,请在问题中添加更多细节以澄清。)
  • 平滑是一个不错的选择,但是它会创建比需要更多的点,即顶点不位于标量场的边缘。我正在寻找边缘更准确的插值(线性插值没有给出)。刚刚编辑了原始帖子并添加了一张图片
  • 另外,高阶并不总是意味着更准确en.wikipedia.org/wiki/Runge%27s_phenomenon 高阶也会让你对噪音非常敏感。
  • 同意,但为一系列三次隐式函数选择三阶插值以获得最佳近似值不是一个合理的选择吗?

标签: python matplotlib interpolation spline spatial-interpolation


【解决方案1】:

对于非结构化二维数据(或三角数据),您可能对以下类感兴趣:

http://matplotlib.org/api/tri_api.html?highlight=cubictriinterpolator#matplotlib.tri.CubicTriInterpolator

它从用户定义的Triangulation 和三角剖分节点处定义的字段提供 Clough-Tocher(三次)插值器。也可以通过辅助类UniformTriRefiner使用:

http://matplotlib.org/api/tri_api.html?highlight=refine_field#matplotlib.tri.UniformTriRefiner.refine_field http://matplotlib.org/mpl_examples/pylab_examples/tricontour_smooth_user.png

不过,适应插值的选择当然取决于您的数据集。

【讨论】:

  • 您好,感谢您的回复。我知道那个例程,但这并不是我想要的。为了更好地解释自己,我在当前链接中对 Latex 进行了正式的问题描述:dropbox.com/s/f1hgzfgf0pyyqx1/Cubic%20Marching%20Squares.pdf
  • CubicTriInterpolator 对一条边的限制是 3 次多项式;你可以很容易地从函数的值+两端的导数得到解析表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2017-04-10
  • 2020-09-25
  • 1970-01-01
  • 2018-08-10
  • 2019-08-09
相关资源
最近更新 更多