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),但我真的在寻找一种快速自动化的方式.
我们只对 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)
恕我直言,这是您的小数据集的正确答案。