我在使用Python将2D不规则点转换为网格时遇到了一些麻烦。
作为一些背景知识,我计算了眼动追踪数据的平均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]
根据我的理解,我需要应用某种多项式函数来将平均数据映射到已知网格。但是,我不知道该怎么做。
当平均点(蓝色)靠近目标网格点(红色)时,舍入工作。但是,当平均点比实际目标网格点更接近任意网格点时,这不起作用。例如,如果整个平均网格向下移动。
在此示例中,1。红点是目标位置2.黑点是平均位置3.蓝点是舍入时的变换4.橙色箭头是平均点如何随着舍入而移动5.绿色箭头是我是如何尝试转移数据的。
最终我想放入一些随机点(原始数据)并将一些函数应用到该点,以便在给定校准点的情况下将其重新定位到它的“实际”位置。我猜我需要在点的每一行和每一列上应用一些样条或更高阶的多项式函数来产生一些轮廓来插入我给这个函数的原始数据输入。
答案 0 :(得分:1)
由于您的网格由两个数字表示 - 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)
给出了:
答案 1 :(得分:0)
如果您的网格是常规的,为什么不四舍五入到最近的100或间距是什么?