python - 不规则点到网格python

标签 python grid 2d transform interpolation

我在尝试将 2D 不规则点转换为 Python 中的网格时遇到了一些麻烦。

作为一点背景知识,我计算了眼睛跟踪数据的平均 x,y 位置,并尝试设计一些(高阶/多项式)函数将这些点转换为空间中具有“真实”位置的网格。在下图中,我尝试获取眼动追踪数据的平均 x,y 位置(以黑色显示),并尝试将它们投影到网格的“已知”x,y 位置(以红色显示)

Averaged Data (Black), Desired Grid Points (Red)

原始数据值如下:

AvgX = [5.9249217363378444, 29.400090125634197, 189.88137522082039, 10.635691487603076, -156.27020696966224, 125.03659193723372, -168.39555447902086, 186.62552891024129, 111.90418423429169, 100.57725103088637, -76.716438908489465, 6.5688214489253474, 146.18743315136786, -77.676030038490595, 175.21590859125735, -55.931989461463523, -175.71204466459488, 97.750258696640429, 4.4562688886630015, -71.385022755147517, 191.47832859030729, -83.713605575394325, 100.81203864776603]
AvgY = [168.67521806680125, 19.421198111140864, -221.60630388937381, 79.730784050599141, 195.43389670921019, 98.926386207770904, -85.356440304228784, -39.574253598391287, 175.70610514354374, -113.76915782872061, -187.40510724928777, -86.989048811265221, -118.46908736453032, 8.054366530368533, 51.680353870737072, -81.628307614654986, 18.393403891381649, -23.678128041659768, -193.94235177110983, 100.69985383522851, 145.38153797528696, 190.0494081938453, -202.22859560880681]
GridX = [0.0, 0.0, 185.635467529, 0.0, -185.635467529, 92.8177337646, -185.635467529, 185.635467529, 92.8177337646, 92.8177337646, -92.8177337646, 0.0, 185.635467529, -92.8177337646, 185.635467529, -92.8177337646, -185.635467529, 92.8177337646, 0.0, -92.8177337646, 185.635467529, -92.8177337646, 92.8177337646]
GridY = [188.696807861, 0.0, -188.696807861, 94.3484039307, 188.696807861, 94.3484039307, -94.3484039307, 0.0, 188.696807861, -94.3484039307, -188.696807861, -94.3484039307, -94.3484039307, 0.0, 94.3484039307, -94.3484039307, 0.0, 0.0, -188.696807861, 94.3484039307, 188.696807861, 188.696807861, -188.696807861]

根据我的理解,我需要应用某种多项式函数将平均数据映射到已知网格。但是,我不知道该怎么做。

当平均点(蓝色)接近目标网格点(红色)时,舍入起作用。然而,当平均点比实际目标网格点更接近任意网格点时,这不起作用。以整个平均网格向下移动为例。

Example Image

在此示例中,1. 红点是目标位置 2. 黑点是平均位置 3. 蓝点是舍入时的变换 4. 橙色箭头是平均点在舍入时的移动方式 5. 绿色箭头是我如何尝试转移数据。

最终,我想放入一些随机点(原始数据),并对该点应用一些函数,以将其重新定位到给定校准点的“实际”位置。我猜测我需要在点的每一行和每一列上应用一些样条函数或高阶多项式函数来生成一些轮廓来插值我给这个函数的原始数据输入。

最佳答案

由于您的网格由两个数字(x 中的步长和 y 中的步长)来表征,因此我们可以应用一个简单的转换来对数据进行四舍五入:

import numpy as np

DELTA_X = 92.8177337646
DELTA_Y = 94.3484039307

def gridify(coords, spacing):
    coords = np.array(coords)
    return np.round(coords / spacing) * spacing

x = gridify(AvgX, DELTA_X)
y = gridify(AvgY, DELTA_Y)

这给出:

enter image description here

关于python - 不规则点到网格python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958344/

相关文章:

python - Scrapy Splash 截图?

javascript - 如何在网格的列中添加 extjs 按钮以显示另一个窗口?

css - 我如何使用新的 CSS GRID 布局创建一个类似 12 列(仅网格)网格系统的 Bootstrap

python - 基本 Pygame 程序未执行

ios - SpriteKit 移动到 X :duration from Current Stat

python - 在数组的一个特定维度上执行操作

python - 类型错误 : super() takes at least 1 argument [Python 3]

python - Django 设置帮助在venv : Attribute error: 'module' object has no attribute 'get_version'

html - 有没有办法显示html网格

javascript - 2.5/3D世界/街道