计算由离散轮廓限定的箱组的算法

时间:2014-06-16 22:05:45

标签: algorithm opencv computational-geometry discrete-mathematics cgal

在离散的基于网格的平面上(想想:图像的像素),我有一个闭合的轮廓,可以通过以下方式表达:

  • 一组2D点(x1,y1);(x2,y2);(x3,y3);...
  • 或4关联Freeman code,起点为:(x1,y1) + 00001112...

我知道如何从一个表示切换到另一个表示。这将是输入数据。

我希望通过轮廓获得有界的网格坐标集。 考虑这个例子,红色坐标是轮廓,灰色是起点:

Sample contour

如果灰色坐标是(0,0),那么我想要一个向量保持: (1,1),(2,1),(3,1),(3,2)

顺序并不重要,输出矢量也可以保持轮廓本身。

选择的语言是C ++,但我可以使用任何现有的代码,算法,库,指针等......

虽然我可能CGAL会有这样的事情,但我对它不熟悉并且无法通过手册找到我的方式,所以我甚至不确定。 我也看了Opencv,但我认为它没有提供这种算法(但我可能错了?)。

我正在考虑找到边界矩形,然后检查矩形中的每个点以查看它们是否为inside/outside,但这似乎不是最理想的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

解决这个问题的一种方法是drawContours,你可以跟踪轮廓点。

  1. 创建空白垫并绘制厚度= 1(边界)的轮廓。
  2. 创建另一个空白垫并绘制厚度= CV_FILLED的轮廓(整个区域包括边界)。
  3. 现在bitwise_and介于两者之间(你的填充区域不包括边界)。
  4. 最后检查非零像素。