如何确定多个元素的边界矩形?

时间:2012-01-14 04:05:24

标签: algorithm graphics geometry bounding-box

我想实现一种算法,该算法将找到轮廓的边界矩形(已由另一算法确定)。我唯一拥有的是二值化图像(如下图所示)。基本想法是:

  • 采取类似的方式 - 预处理的二值化图像 enter image description here

  • 并制作这样的东西 enter image description here

5 个答案:

答案 0 :(得分:3)

查看已连接的组件标签:http://en.wikipedia.org/wiki/Connected-component_labeling。在这种情况下,您可以找到白色像素或黑色像素的连接组件(由于图像中的白点较少,白色在计算上更容易)。

答案 1 :(得分:1)

我建议一个天真的方法来开始:

在图像中,对图像中的中间点(x,y)进行二维二分法搜索。 从那时起,执行洪水填充。

  • 如果填充图形的边界不是图像的边界,那么您找到了一个封闭的图形,因此找到了它的边界框。

  • 如果它填满整个图像,那么你什么都没有,所以将图像分成四个cuadrants并递归地执行相同的操作。 (您无需检查落在先前找到的边界框图内的点,在此过程中切断搜索空间。)

答案 2 :(得分:0)

对于每个元素:

They highest y - 1 is the top of the rectangle. 
The leftmost x - 1 is the left of the rectangle. 
The lowest y + 1 is the bottom of the rectangle. 
The rightmost x + 1 is the right of the rectangle.

注意最高我的意思是最靠近屏幕顶部而不是最大值。

答案 3 :(得分:0)

看起来OpenCV有一些算法可以找到已经实现的轮廓的边界框。因此,研究他们的功能如何运作可能是一个很好的开始。 http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

答案 4 :(得分:-1)

您可以计算最小生成树并删除最长边。然后你可以计算k均值。删除另一条长边并计算k均值。冲洗并重复,直到N = 10。我相信这个算法被称为单链路k-means,集群类似于voronoi图:

“单链路k聚类算法......正是Kruskal的算法...等同于找到MST并删除k-1最昂贵的边缘。”

例如,请参见:https://stats.stackexchange.com/questions/1475/visualization-software-for-clustering

然后,对于每个群集,您应用此规则:

They highest y - 1 is the top of the rectangle. 
The leftmost x - 1 is the left of the rectangle. 
The lowest y + 1 is the bottom of the rectangle. 
The rightmost x + 1 is the right of the rectangle.

注意最高我的意思是最靠近屏幕顶部而不是最大值。