【问题标题】:create a concave polygon from image using N points使用 N 个点从图像创建一个凹多边形
【发布时间】:2013-09-28 22:19:10
【问题描述】:

我正在寻找一种算法,该算法将从图像中生成凹多边形(具有 N 个点,其中 N > 3 - 用户输入此值)。

我对算法的想法:

 // Every pixel in image is checked and a minimal orientated bounding box  is generated  (transparent pixels are ignored)
 boundingBox = createImageBoundingBox(image);
 curpoints = 4, A = 0, B = 1, tmppoints = curpoints;
 while(curpoints < maxNumberOfPoints)
 { 
    add a new point between point A and point B (A and B are points from the boundingBox)
    reposition points so that it will contain the minimal surface
    A++; B++;
    curpoints++;

    if(A == tmppoints) 
    { A = 0; B = 1; tmppoints=curpoints; }
 }  

我面临的问题是我不知道如何以最佳方式重新定位点。这可以通过任何其他方式完成(更好/更快的方式)。如有任何想法,将不胜感激。

谢谢

编辑:

图片必须至少为 10x10。我需要 N 点参数,以便用户可以调节要使用的点数(用于优化)。另一种方法是使用一个因子 (0-1),它告诉您希望多边形具有多少细节(多少点)(0 是 4 个点,> 0 5 个或更多点)。但不确定如何实施。

【问题讨论】:

  • 这总是可能的吗?如果我的图像是一个像素高和 200 像素宽怎么办?这种情况似乎会产生一条线。我正在查找“多边形”和“凹多边形”的不同定义,但没有看到这种病态病例的任何定义。
  • 图像必须大于 100x100。 mathworld.wolfram.com/ConcavePolygon.html。不确定是否有任何区别,但我发现了一些仅适用于凸多边形的算法。

标签: algorithm polygon


【解决方案1】:

您可以使用 delaunay 三角剖分并获得平均边长。然后尝试删除比平均值更长的边缘。这个概念来自 alpha 形状。

【讨论】:

    【解决方案2】:

    可以使用alpha shapes 构建凹形外壳。 CGAL link.

    【讨论】:

      【解决方案3】:

      1.) 选择正方形图像中间的一个点。

      2.) 将该点从中心随机抖动N次,生成N个新点。

      3.) 根据与中心点的最大角度对这些点进行排序

      4.) 使用边界框中的四个点和按升序角度排序的中点来创建凹多边形的有序点列表。

      我不确定我是否理解您上面的“最小表面”步骤,但我相信该算法适用于截取图像以生成凹多边形。我认为这比你上面的要快,但我不确定,因为我不完全理解那一步。

      这将始终生成与原始图像具有相同边界的凹多边形。如果您不想要这个,您可以添加一个步骤 0.),它会抖动您的边界框,然后根据此更改您的中点抖动。我认为这两个想法都会产生一个带有 n 大小点块的边界四边形。

      • 这需要 n > 4(如您所说,如果您希望这需要 n > 3,请将两个边界框点合并为一个。)

      【讨论】:

      • 不了解您的解决方案。该算法必须从图像轮廓(另一个多边形)中生成一个只有 N 个点的多边形,以便它仍然可以覆盖所有图像形状。为了简化它:你有一些 2d 形状(假设形状像字母 A)并且你有 N 个点。如何将这些点放置在形状周围(或之上),以便它们仍然覆盖所有字母 A 表面,并将封闭的表面保持在最低限度。
      • Ohhhh... 您希望得到的凹多边形完全覆盖图像,但表面积最小?我的解决方案很糟糕。我认为这是一个计算机视觉问题 - 你需要先识别你的形状。
      • 更多的数学问题,您必须从初始多边形中删除点,直到达到极限。
      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 2018-06-26
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2016-07-28
      • 1970-01-01
      相关资源
      最近更新 更多