我需要一种方法来定义轮廓是代表直线还是闭合形状。在 Java 中,我有一个对象 Shape,它包含再次将其定义为单独对象的所有点。对象 Point 表示点的坐标。我尝试用递归解析形状,但对于更大的形状,超过 150 个点,性能非常差。我附上了一张我想要解析的形状的图片,以帮助更好地理解这个问题。
我正在放一张图片以便更好地可视化问题。
这只是展示了我得到的所有形状。我只想显示两个关闭的。
提前致谢。 瓦西尔·科塞夫
最佳答案
第一个想法:使用合适的 contour tracing algorithm得到一个有序的轮廓。如果你的轮廓是闭合的,你最终会回到第一点。
第二个想法:使用 flood filling algorithm : 如果你离开对象的边界框,它是打开的,否则它是关闭的。
第三个想法:使用形态学。删除孤立的像素。查找所有端点和分支点。删除所有分支点。没有端点的连通分量是闭合轮廓(“圆”),具有两个端点的连通分量是开放轮廓(“线”)。将没有端点的连通分量重新投影到原始图像,并只保留与它们有共同部分的连通分量。我认为这可以实时实现,而且最容易实现。
关于java - 定义轮廓是否闭合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491096/