【发布时间】:2016-07-16 08:21:29
【问题描述】:
我正在尝试提出一种算法来优化多边形(或多个多边形)的形状,以最大化该形状中包含的值。
我有 3 列的数据:
- X:x 轴上的位置
- Y:y 轴上的位置
- 值:块的值,可以有正值和负值。
此数据来自规则网格,因此每个 x 和 y 值之间的间距是一致的。
我想创建一个边界多边形,通过添加的条件最大化包含的值。
- 多边形的所有点都需要保持最小半径。这意味着我们要么失去一些正值块,要么获得一些负值块。
我正在使用的当前算法执行以下操作
- 查找最大块值作为起点(或用户定义)
- 找到最小半径内的所有方块,并通过检查整体值为正来确定它是否是可行的点
- 从进一步的值计算中删除最小搜索半径内的所有块,并将它们标记为最终形状的一部分
- 移动到由围绕原始点的螺旋确定的下一个点。 (中心始终是一个网格点,因此移动 deltaX 或 deltaY)
这似乎正在拾取一些不需要的单元格。我确定那里有形状算法,但我不知道要查找什么来寻求帮助。
下面是一张图片,希望有助于概述问题。阳性细胞以红色显示(阴性细胞未显示)。黑色轮廓显示了我当前例程返回的形状。我认为应该更多地引入左侧。最小半径100m左下黑圈大概是这个。
现在代码在 R 中运行,但如果我能得到正确的算法,我可能会转向别的东西。
针对不清楚的投票,我试图在没有背景或尝试解决方案的情况下解决的问题是:
“围绕一系列点创建一个边界多边形(或多个多边形)以最大化包含的值,同时保持沿多边形的最小曲率半径”
编辑:
数据
我应该包含一些可以在here 找到的数据。
文件是 csv。 4 列(X、Y、Z [未使用]、值),长度约为 25k,大小为 800kb。
【问题讨论】:
-
你如何定义多边形的“曲率半径”?
-
基本上在多边形的任何点,您都应该能够拟合一个半径为 R 的(粗)圆。在图像中,左下方的黑色圆圈是可以选择的最小尺寸(这就是为什么它占用了这么多的负值空白)。我的多边形跟随网格,这就是为什么它是一个粗糙的圆圈,这很好。
-
我想我明白了。这与通常所说的“曲率”略有不同(例如:在更传统的定义下,不允许在 X=421500 和 Y=6259100 附近的锐利凹入区域)。说多边形 P 内的每个点都可以被完全位于 P 内的半径为 R 的圆所覆盖就足够了吗?特别是,即使中间部分有点窄,你会接受看起来像经典Venn diagram 的多边形吗?
-
@gtwebb 有趣的问题是为了取证目的吗? (例如,比较不同材料中的足迹样本,尽可能减少误差?)
-
@mhum,是的,我会接受维恩图。为缺乏明确性表示歉意,不确定定义它的最佳方式。
标签: algorithm image-processing 2d polygon