约束 3D 表面的 RBF 插值以保持曲率

2024-05-13

我的任务是开发一种算法,给定一组表示现有表面测量值的稀疏点,我们就可以计算表面上任何点的 z 坐标。面临的挑战是找到一种合适的插值方法,该方法可以在仅给定几个点的情况下重新创建 3D 表面,并推断出超出包含初始测量值的范围的值(对于许多插值方法来说,这是一个臭名昭著的问题)。

在尝试将许多分析曲线拟合到我决定使用的点之后RBF插值 https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.Rbf.html因为我认为这会更好地再现表面,因为点应该全部位于表面上(我假设测量的误差可以忽略不计)。

考虑到我使用的几个点,第一个结果非常令人印象深刻。

插值结果 https://i.stack.imgur.com/W7Frc.png

在我展示的图片中,蓝色点是用于 RBF 插值的点,它产生以灰度表示的形状。相反,红点是我试图用插值算法重现的相同形状的附加测量值。

不幸的是,存在一些异常值,特别是当我尝试推断进行初始测量的区域之外的点时(您可以在图片的右上角和中下插图中看到这一点)。这是可以预料的,特别是在 RBF 方法中,因为我试图从最初没有任何信息的区域中提取信息。

显然,RBF 插值试图使表面变平,而我只需要continue随着形状的曲率。当然,考虑到它是如何定义的,该方法对此一无所知。然而,这会导致与我试图拟合的测量结果存在很大差异。

这就是为什么我问是否有任何方法可以限制插值方法以保持曲率或使用不同的径向基函数,该函数不会仅在插值范围的边界上如此快速地平滑。我尝试了 epsilon 参数和距离函数的不同组合,但没有成功。这就是我现在正在使用的:

from scipy import interpolate
import numpy as np

spline = interpolate.Rbf(df.X.values, df.Y.values, df.Z.values,
                            function='thin_plate')
X,Y = np.meshgrid(np.linspace(xmin.round(), xmax.round(), precision),
                      np.linspace(ymin.round(), ymax.round(), precision))
Z = spline(X, Y)

我也在考虑创建一些额外的dummy插值范围之外的点可以进一步约束模型,但这会非常复杂。

我还附加了一个动画,以便更好地了解表面。

动画片 https://i.stack.imgur.com/jgftB.gif


只是想发布我的解决方案,以防有人遇到同样的问题。问题确实在于scipyRBF插值的实现。我尝试采用更灵活的库,https://rbf.readthedocs.io/en/latest/index.html# https://rbf.readthedocs.io/en/latest/index.html#。 结果非常酷!使用以下选项

from rbf.interpolate import RBFInterpolant
spline = RBFInterpolant(X_obs, U_obs, phi='phs5', order=1, sigma=0.0, eps=1.)

即使在边缘,我也能得到正确的形状。

曲面插补 https://i.stack.imgur.com/s2G2f.png

我玩过不同的phi函数,这里是插值曲面和我正在测试插值的点(图中的红点)之间的分布的箱线图。

Boxplot https://i.stack.imgur.com/hVnQI.png

With phs5我得到了最好的结果,上表面的平均分布约为 0.5 毫米,下表面的平均分布约为 0.8 毫米。之前我得到了类似的平均值,但有许多> 15 毫米的异常值。绝对成功了:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

约束 3D 表面的 RBF 插值以保持曲率 的相关文章

  • 如何编写嵌套的 __init__.py 文件

    我正在努力解决嵌套问题 init py在我正在编写的Python包中 该包具有以下架构 module init py submodule1 init py source py submodule2 init py source py sub
  • 蟒蛇 | MySQL | AttributeError:模块“mysql.connector”没有属性“connect”

    我正在学习 python 中的一个新库 mysql 我尝试执行以下命令 import mysql connector mydb mysql connector connect host localhost user root passwd
  • 如何在多进程系统中实现锁定?

    我们正在并行运行许多詹金斯项目 我们使用 python 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 使用python查找txt文件中字母出现的次数

    我需要从 txt 文件中读取该字母并打印 txt 文件中出现的次数 到目前为止 我已经能够在一行中打印内容 但计数有问题 有人可以指导吗 infile open grades txt content infile read for char
  • 是否可以从 Julia 调用 Python 函数并返回其结果?

    我正在使用 Python 从网络上抓取数据 我想使用这些数据在 Julia 中运行计算 是否可以在 Julia 中调用该函数并返回其结果 或者我最好直接导出到 CSV 并以这种方式加载数据 绝对地 看PyCall jl https gith
  • 如何过滤 Pandas GroupBy 对象并获取 GroupBy 对象?

    当对 Pandas groupby 操作的结果执行过滤时 它返回一个数据帧 但假设我想执行进一步的分组计算 我必须再次调用 groupby 这似乎有点绕 有更惯用的方法吗 EDIT 为了说明我在说什么 我们无耻地从 Pandas 文档中窃取
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • Python HMAC:类型错误:字符映射必须返回整数、None 或 unicode

    我在使用 HMAC 时遇到了一个小问题 运行这段代码时 signature hmac new key secret key msg string to sign digestmod sha1 我收到一个奇怪的错误 File usr loca
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • pandas 相当于 np.where

    np where具有向量化 if else 的语义 类似于 Apache Spark 的when otherwise数据帧方法 我知道我可以使用np where on pandas Series but pandas通常定义自己的 API
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • 使用 Python 将连续日期分组在一起

    Given dates datetime 2014 10 11 datetime 2014 10 1 datetime 2014 10 2 datetime 2014 10 3 datetime 2014 10 5 datetime 201
  • 使用 PIL 在 Tkinter 中显示动画 GIF

    我正在尝试制作一个程序来使用 Tkinter 显示动画 GIF 这是我最初使用的代码 from future import division Just because division doesn t work right in 2 7 4
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • 如何将带有参数的Python装饰器实现为类?

    我正在尝试实现一个接受一些参数的装饰器 通常带有参数的装饰器被实现为双重嵌套闭包 如下所示 def mydecorator param1 param2 do something with params def wrapper fn def
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的

随机推荐