Python - 如何对 2D 形状重新采样?

问题描述 投票:0回答:1

我正在编写一个Python脚本来进行一些几何数据操作(计算多驱动工业机器的运动轨迹)。一般来说,这个想法是有一个给定的形状(比如说 - 一个椭圆,但一般情况下它可以是任何凸形状,由一系列 2D 点定义),它是旋转的,并且必须遵循它的最上面的切点。我对后一部分没有问题,但我需要一些有关 2D 形状准备的提示。

假设椭圆的定义点太少,例如 - 25。(正如我所说,最终这可以是任何形状,例如圆角六边形)。为了保持必要的精度,我需要更多的点(假设 - 1000),最好均匀分布在整个形状上,或者在拐角、锐曲线等附近具有更高密度的点。

我脑海中浮现出一些事情,我想 DFT (FFT) 将是这次重采样的一个很好的起点,分析

scipy.signal.resample()
我发现
scipy.signal
包中有更多的函数,对我来说听起来很有希望...

我要求的是一个建议,我应该遵循哪种方式,我应该尝试什么工具来完成这项工作,这可能是最合适的。也许有一个工具正是适合我正在寻找的东西,或者也许我想得太多了,像 resample() 这样的 FFT 实现之一将工作得很好(当然,在开始和结束点进行一些调整之后)形状以确保其关闭时没有问题)?

Scipy.signal
听起来很有希望,但是,据我了解,它是用于处理时间序列数据,而不是几何数据 - 我想这可能会导致一些问题,因为我的数据不是函数(在数学理解中) .

谢谢并致以诚挚的问候!

python geometry 2d resampling
1个回答
1
投票

据我了解,您想要的是获得原始数据的插值版本。

DFT(或 FFT)将无法实现此目的,因为它将执行傅立叶变换(这不是您想要的)。

从理论上讲,您需要对数据进行插值,就是定义一个函数来计算新数据点中的结果。

因此,假设您的数据包含 5 个点,其中存储了一个一维(为了简化)数字,代表您的数据,并且您想要一个包含 10 个点的新数组,其中填充了原始数据的线性插值。

使用

numpy.interp

import numpy as np
original_data = [2, 0, 3, 5, 1] # define your data in 1D
new_data_resolution = 0.5 # define new sampling distance (i.e, your x-axis resolution)
interp_data = np.interp(
    x = np.arange(0, 5-1+new_data_resolution , new_data_resolution), # new sampling points (new axis)
    xp = range(original_data),
    fp = original_data
)
# now interp_data contains (5-1) / 0.5 + 1 = 9 points

此后,您将获得

(5-1) / new_resolution
(大于 5,因为
new_resolution < 1
)长度的数据,其值将(在本例中)为原始数据的线性插值。

完成/理解这个示例后,您可以深入了解

scipy.interpolate
模块以更好地理解插值函数(我的示例使用线性函数来获取缺失点中的数据)。

将此应用于 n 维数组非常简单,迭代数据的每个维度。

© www.soinside.com 2019 - 2024. All rights reserved.