计算平均网格大小

mal*_*lat 6 statistics graphics computational-geometry

我试图计算以下一组点的平均单元大小,如图所示: 格.图片是使用gnuplot生成的:

gnuplot> plot "debug.dat" using 1:2
Run Code Online (Sandbox Code Playgroud)

这些点几乎在矩形网格上对齐,但不完全对齐.沿着X或Y似乎存在10-15%的偏差(抖动?).如何有效地计算瓦片中的适当分区,使得每个瓦片实际上只有一个点,大小将表示为(tilex) ,tiley).我使用虚拟这个词,因为10-15%的偏差可能已经在另一个相邻的瓷砖中移动了一个点.

仅供参考,我手动排序(希望正确)并提取前10个点:

 -133920,33480
 -132480,33476
 -131044,33472
 -129602,33467
 -128162,33463
 -139679,34576
 -138239,34572
 -136799,34568
 -135359,34564
 -133925,34562
Run Code Online (Sandbox Code Playgroud)

只是为了澄清,按照上面描述的有效瓷砖将是(1435,1060),但我真的在寻找一种快速自动化的方式.

Rom*_*nka 1

我们只对 X 坐标执行此操作:

1)对X坐标进行排序

2) 查看两个后续 X 坐标之间的增量。这些增量将分为两类 - 它们要么对应于两列之间的空间,要么对应于同一列内交叉之间的空间。您的目标是找到一个将长空间与短空间分开的阈值。这可以通过找到一个阈值来完成,该阈值将增量分为两组,两组的均值相距最远(我认为)

3)一旦有了阈值,将点分成几列。列以与您之前测量的阈值相对应的增量开始和结束

4)计算每个检测到的列的平均位置

5) 获取后续列之间的增量。现在的问题是,您可能会遇到一个会破坏色谱柱的杂散点。使用中位数来排除杂散。

6) 你应该对你的 gridX 有一个可靠的估计

例如,使用您的数据,查看 X 轴:

-133920 -132480 -131044 -129602 -128162 -139679 -138239 -136799 -135359 -133925
Run Code Online (Sandbox Code Playgroud)

排序+增量:

5 1434 1436 1440 1440 1440 1440 1440 1442
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到,小增量 (5) 和大增量 (1434 及以上) 之间有一个非常明显的阈值。第1434章 在这里定义你的空间

将点分成几列:

-139679|-138239|-136799|-135359|-133925 -133920|-132480|-131044|-129602|-128162
       1440   1440    1440    1434      5    1440    1436    1442    1440
Run Code Online (Sandbox Code Playgroud)

几乎所有的点都是单独的,除了两个-133925 -133920。

平均网格线位置为:

-139679 -138239 -136799 -135359 -133922.5 -132480 -131044 -129602 -128162
Run Code Online (Sandbox Code Playgroud)

已排序的增量:

1436.0 1436.5 1440.0 1440.0 1440.0 1440.0 1442.0 1442.5
Run Code Online (Sandbox Code Playgroud)

中位数:

1440
Run Code Online (Sandbox Code Playgroud)

恕我直言,这是您的小数据集的正确答案。