Python 查找二维数组中表示的多边形的角点

Python 查找二维数组中表示的多边形的角点,python,Python,我有一个由0和1组成的二维数组,其中1代表四边形的边和内部,0代表外部的一切。找到四个角点坐标的最佳方法是什么 我正在使用Python,所以任何可以提供帮助的库都很好,但是任何语言的算法也会很有帮助。我有一个想法,你可以自己为它创建一个函数。据我所知,只有for corners旁边才能有多个“0” 如果将数组[x,y]作为点数组[x-1,y]、数组[x+1,y]、数组[x,y+1]、数组[x,y-1]是靠近它的4点。如果值为“1”,则可以循环检查数组中的四个邻居,并计算值为“0”的邻居数。具有多

我有一个由0和1组成的二维数组,其中1代表四边形的边和内部,0代表外部的一切。找到四个角点坐标的最佳方法是什么


我正在使用Python,所以任何可以提供帮助的库都很好,但是任何语言的算法也会很有帮助。

我有一个想法,你可以自己为它创建一个函数。据我所知,只有for corners旁边才能有多个“0”


如果将
数组[x,y]
作为点<代码>数组[x-1,y]、数组[x+1,y]、数组[x,y+1]、数组[x,y-1]是靠近它的4点。如果值为“1”,则可以循环检查数组中的四个邻居,并计算值为“0”的邻居数。具有多个(有两个)值为“0”的邻居的点是四个角

我有一个想法,你可以自己做一个函数。据我所知,只有for corners旁边才能有多个“0”


如果将
数组[x,y]
作为点<代码>数组[x-1,y]、数组[x+1,y]、数组[x,y+1]、数组[x,y-1]是靠近它的4点。如果值为“1”,则可以循环检查数组中的四个邻居,并计算值为“0”的邻居数。具有多个(有两个)值为“0”的邻居的点是四个角

在绝对一般的情况下(例如,允许凹面外壳或近似三角形的修补),这将涉及一些不确定性。但由于您处理的是受限子类,因此更容易

您可以从内核卷积开始。考虑(例如)3x3像素的重叠方块:你可以设计一个函数,它告诉中心是在点内(所有的),在外(全零),在边缘,或者在一个角落,基于点的模式。
另一方面,您可以采用“凸包”方法:最左边和最右边的1像素可能是角点;如果同一列中出现多个,则分别取最上面/最下面的。使用它们之间的线,您可以判断1像素的大部分是在线的上方、下方还是两侧;这将告诉您在何处查找其他角。

在绝对一般的情况下(例如,允许凹面外壳或近似三角形的补边),这将涉及一些不确定性。但由于您处理的是受限子类,因此更容易

您可以从内核卷积开始。考虑(例如)3x3像素的重叠方块:你可以设计一个函数,它告诉中心是在点内(所有的),在外(全零),在边缘,或者在一个角落,基于点的模式。

另一方面,您可以采用“凸包”方法:最左边和最右边的1像素可能是角点;如果同一列中出现多个,则分别取最上面/最下面的。使用它们之间的线,您可以判断1像素的大部分是在线的上方、下方还是两侧;这将告诉您在何处查找其他角。

您可以打印数组并编辑问题吗?在什么情况下会出现此问题?它将永远是一个四边形吗?它将永远是一个四边形。它本质上代表了一张从不同角度拍摄的正方形照片@Eshaka,因为它代表照片的像素,数组的大小是数百或数千,所以它不适合此页面。»要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题因堆栈溢出而与主题无关,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述这个问题以及迄今为止为解决它所做的工作。«@ThomasJunk你有没有把这个问题通读一遍?我没有做这些事。但是谢谢你的否决票…你能打印数组并编辑问题吗?这个问题是在什么情况下产生的?它将永远是一个四边形吗?它将永远是一个四边形。它本质上代表了一张从不同角度拍摄的正方形照片@Eshaka,因为它代表照片的像素,数组的大小是数百或数千,所以它不适合此页面。»要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题因堆栈溢出而与主题无关,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述这个问题以及迄今为止为解决它所做的工作。«@ThomasJunk你有没有把这个问题通读一遍?我没有做这些事。但是谢谢你的投票,这听起来是个很好的起点,但是记住,它是一个四边形,不一定是正方形,所以这不一定是盒子。在那种情况下,你必须考虑所有8个邻居。如果八个像素中有三个以上的“0”,那么它就不必是平方,这是一个角我不确定3的硬限制在这样的像素化情况下是否有效,但可能是4个像素中零最多?我试试看你可以试试。。听起来是个好主意。对于一个完美的形状,3个以上就可以了。但你比我更了解你的处境。好运气这听起来是个好的起点,但是记住,它是一个四边形,不一定是一个正方形,所以这不一定是箱子。在那种情况下,你必须考虑所有的8个邻居。如果八个像素中有三个以上的“0”,那么它就不必是平方,这是一个角我不确定3的硬限制在这样的像素化情况下是否有效,但可能是4个像素中零最多?我试试看你可以试试。。听起来是个好主意。对于一个完美的形状,3个以上就可以了。但你比我更了解你的处境。祝你好运