【问题标题】:ConvexHull orders differently in matlab and pythonConvexHull 在 matlab 和 python 中的顺序不同
【发布时间】: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


【解决方案1】:

在 3D Convexhull 中遇到类似问题。 我的走动是根据指数排序的 此外,Matlab 凸包是方向一致的,但是,python 不是。所以还要检查每个面的法线是否和凸包一致顺序。

对于 2d,我认为差异是起点。我相信 Matlab 总是从最小索引开始。

【讨论】:

    猜你喜欢
    • 2017-05-21
    • 2018-12-30
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2019-01-04
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多