Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Spatstat:给定一个二维点列表,如何将它们连接成多边形,并进一步使其成为研究区域?_Python_R_Opencv_Computational Geometry_Spatstat - Fatal编程技术网

Python Spatstat:给定一个二维点列表,如何将它们连接成多边形,并进一步使其成为研究区域?

Python Spatstat:给定一个二维点列表,如何将它们连接成多边形,并进一步使其成为研究区域?,python,r,opencv,computational-geometry,spatstat,Python,R,Opencv,Computational Geometry,Spatstat,请允许我从一个最简单的任务开始提问:如果我有四个点,它们是矩形的顶点,存储在4x2矩阵中,我如何将其转换为矩形窗口?(请不要使用任何特定于绘制矩形的特殊命令,因为提升矩形只是为了表示一般类别的规则几何对象) 为了使事情更复杂,假设我有一个nx2矩阵,我如何连接所有的n个点,使它成为一个多边形?请注意,对象不一定是凸的。我认为主要的困难在于,R如何知道哪个点应该与哪个点连接 我问这个问题的原因是,我对一条鱼进行了一些图像处理,通过在python中使用opencv查找轮廓,并将其作为nx2 csv文

请允许我从一个最简单的任务开始提问:如果我有四个点,它们是矩形的顶点,存储在4x2矩阵中,我如何将其转换为矩形窗口?(请不要使用任何特定于绘制矩形的特殊命令,因为提升矩形只是为了表示一般类别的规则几何对象)

为了使事情更复杂,假设我有一个nx2矩阵,我如何连接所有的n个点,使它成为一个多边形?请注意,对象不一定是凸的。我认为主要的困难在于,R如何知道哪个点应该与哪个点连接

我问这个问题的原因是,我对一条鱼进行了一些图像处理,通过在python中使用opencv查找轮廓,并将其作为nx2 csv文件输出,我成功地获得了鱼的身体线条。当我将csv文件读入R并试图使用sp包中的SpatialPolygnos将其转换为多边形时,发生了一些非常意外的行为;中间似乎有一个折断,多边形被切成两半,即多边形的边界没有被连接。是否有任何方法可以解决此问题

多谢各位


编辑:有人善意地指出,这可能是另一个问题的重复:在R中绘制多边形。然而,该问题的解决方案取决于所绘制的形状是凸的,因此按天使排序是有意义的;但是,此处的形状不一定是凸面的,因此不起作用。

您是否希望它成为spatstat研究区域(属于
owin
类),因为您在那里有spatstat标记?在这种情况下,您可以只使用
owin(poly=x)
其中
x
是您的nx2矩阵(当然是在加载spatstat库之后)。该矩阵中的行应包含多边形顶点,其顺序与您希望它们连接的顺序相同(这就是R知道与哪个点连接的方式)。有关更多详细信息,请参阅帮助(owin)。

如果您添加了一些特定的详细信息,包括一些示例数据和代码,以再现您遇到的问题,这将是一个确定的问题,除非您这样做,否则这基本上只是“如何在R中绘制多边形”的重复。您好,谢谢您的评论。我已经看了这个问题,我认为这还不足以回答我的问题。正如问题中所指出的,我所关注的形状不一定是凸的,因此很难按角度排序。好吧,如果是这样的话,你真的需要拿出一些示例数据来证明你得到的奇怪行为,请参阅以获取提示。你可以试着取点的凸壳,查看
chull
函数,并将其作为窗口对象传递。这将消除多边形中的任何碎片或孔。谢谢您的回答。然而,正如我所说,所构造的多边形有一些非常奇怪的行为。。看起来像是被切成两半;在多边形的边缘,中间有一个非常小的断开的位。我真的需要把它连接起来,否则一些点会在polygonOK之外。那么python例程中的点的顺序多少有些随意?边界上的点有多密集?是否总是希望每个点都与其两个最近的邻居相连?在这种情况下,您可能可以在R中设计出一个相当好的解决方案。否则,最好从python方面找到一个解决方案,这样您就可以按正确的顺序导出点,或者保留一些关于点之间连接的信息。