【发布时间】:2016-02-10 11:02:58
【问题描述】:
我有这个问题:我需要在我的 Python 代码中使用 ConvexHull 函数,并且我需要它以与 MATLAB 中的 ConvHulln 完全相同的方式工作,但它们会给出不同的结果。这是一个示例(我使用的是scipy.spatial.ConvexHull,但我也尝试过使用cv2.convexHull 和Python ConvexHull,但它们没有给出正确的结果。
使用的 MATLAB 命令是:k = convhulln([r, c]); 使用的 Python 命令是 k = ConvexHull(rc,qhull_options='Qt').simplices
得到的结果不同:
MATLAB:
k=
[[104 1] [1 8] [8 17] [17 103] [103 125] [125 136] [136 162] [162 166] [166 167] [167 163] [163 104]]
Python:
k=[[ 16 102][103 0][ 7 0][ 7 16][162 166][162 103][124 102][124 135][161 135][165 166][165 161]]
结果是正确的(在 Python 中索引是 MATLAB-1),但顺序不同。有没有人有解决方案?我需要 Python 的顺序与 MATLAB 的顺序相同。
【问题讨论】:
-
您是否考虑过使用不依赖于点顺序的算法,因为凸包中不存在自然/内在顺序?
-
你知道 Python 中任何不依赖点顺序的绘制多边形算法吗?因为当我在 Matlab (poly2mask) 和 Python 中使用 convexHull 给出的不同点顺序绘制多边形时,它会返回不同的图像。
-
我不确定我是否理解问题所在。你的问题是二维的吗? docs of
scipy.spatial.ConvexHull证明“我们也可以直接使用船体的顶点,保证二维的顶点是逆时针顺序的:”(参见第一个示例)。如果您添加两个数字可能会有所帮助:一个来自 matlab,一个来自 python。
标签: python matlab convex-hull