我正在尝试计算以下一组点的平均像元大小,如图所示: 。图片是使用gnuplot生成的:
gnuplot> plot "debug.dat" using 1:2
这些点几乎在矩形网格上对齐,但不完全对齐。沿着 X 或 Y 似乎存在 10-15% 的偏差(抖动?)。如何有效地计算瓦片中的适当分区,以便每个瓦片实际上只有一个点,大小将表示为 (瓷砖,瓷砖)。我实际上使用这个词是因为 10-15% 的偏差可能已经移动了另一个相邻图块中的一个点。
仅供引用,我已经手动排序(希望正确)并提取了前 10 个点:
-133920,33480
-132480,33476
-131044,33472
-129602,33467
-128162,33463
-139679,34576
-138239,34572
-136799,34568
-135359,34564
-133925,34562
只是为了澄清,根据上述描述的有效磁贴是 (1435,1060),但我真的在寻找一种快速的自动化方式。
最佳答案
让我们仅对 X 坐标执行此操作:
1)对X坐标进行排序
2) 查看两个后续 X 坐标之间的增量。这些增量将分为两类 - 它们对应于两列之间的空间,或者对应于同一列内交叉之间的空间。您的目标是找到一个阈值,将长空间与短空间分开。这可以通过找到一个阈值来完成,该阈值将增量分为两组,其均值相距最远(我认为)
3)一旦你有了阈值,把点分成几列。一列以与您之前测量的阈值相对应的增量开始和结束
4) 计算每个检测列的平均位置
5) 在后续列之间取增量。现在,问题是您可能会得到一个会破坏您的列的杂散点。使用中位数来消除杂散。
6) 你应该对你的 gridX 有一个可靠的估计
例如,使用您的数据,查看 X 轴:
-133920 -132480 -131044 -129602 -128162 -139679 -138239 -136799 -135359 -133925
排序 + 增量:
5 1434 1436 1440 1440 1440 1440 1440 1442
在这里你可以看到小 (5) 和大 (1434 及以上) delta 之间有一个非常明显的阈值。 1434将在这里定义您的空间
将点拆分为列:
-139679|-138239|-136799|-135359|-133925 -133920|-132480|-131044|-129602|-128162
1440 1440 1440 1434 5 1440 1436 1442 1440
几乎所有的点都是单独的,除了两个-133925 -133920。
平均网格线位置为:
-139679 -138239 -136799 -135359 -133922.5 -132480 -131044 -129602 -128162
排序的增量:
1436.0 1436.5 1440.0 1440.0 1440.0 1440.0 1442.0 1442.5
中位数:
1440
这是您的小数据集的正确答案,恕我直言。
关于graphics - 计算平均网格大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27228180/