在我的项目中,我使用的是来自望远镜的二维图像。众所周知,由于望远镜故障,每幅图像的外边界都有过饱和的点。因此,我想提取构成二维图像外边界的点。
所以我想做的是,以某种方式提取组成外壳的点,根据我的喜好,用所需的外壳宽度。
到目前为止我所做的:
在python中,我试图通过使用scipy.converxhull找到组成边的点,然后删除这些点。在循环中执行此操作时,应移除外缘,其宽度取决于迭代次数但是,此方法取决于点密度,对于密度较大的边上的位置,删除的点较少。我想要的是去除整个图像的外缘宽度,大约相等,见下图:
为了说明我的意思,我添加了converxhull结果,在经过15x次迭代后,用红色表示它作为外缘点给出的点:
为了澄清,这是我希望我的算法给我的期望结果,一个在整个图像上宽度相等的外边,这与点密度无关。
最佳答案
既然你只展示了没有代码的想法和图形,我也会这么做。
我看到了几种在凸面外壳内获得较小多边形的方法,它们之间的宽度几乎恒定。每一种都有变化。我用凸面外壳来演示,它是图形中凸面外壳的简化版本。我的每个解都忽略了问题中的大多数点,只使用凸壳的顶点,因此忽略了“点密度”。
在选择多边形之前,可以找到凸面外壳的“中心点”。有多种方法可以定义这一点。可以使用外壳顶点的质心,其中x和y坐标是顶点坐标的平均值,但这会偏向具有许多小段的外壳部分。可以使用边界矩形的中心,其中x和y坐标是船体顶点的最大坐标和最小坐标的平均值。这是我在图形中使用的方法。还有其他可能的“中心点”。
我的第一个内多边形将每个顶点向中心点移动成比例的距离。在我的示例中,我将每个点向中心点移动距离的四分之一。
我的第二个内多边形将顶点向中心点移动固定距离我选择了顶点距中心点平均距离的四分之一注意,对于这个特殊的例子,这个多边形和我之前的多边形之间几乎没有区别。这种差异对于船体来说更为明显,因为来点比其他一些点更接近中心点。
我的第三个多边形放弃了中心点。它将船体的每一侧向船体内部移动固定距离这些新线段的交点用于定义新多边形。换言之,我做了“向内多边形偏移”或“多边形缓冲”。这是计算几何中的一个非常重要的任务,但是关于这个任务和类似任务的一些讨论可以在this SO question中找到。这看起来确实与其他多边形不同,因为外壳的较小边会收缩或从结果中完全消失。
选择适合你需要的多边形——前两个比第三个更容易计算,但第三个最接近你的理想“外缘宽度相等”