4

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

  • 采取这样的方式 - 预处理的二值化图像 在此处输入图像描述

  • 并产生这样的东西 在此处输入图像描述

4

5 回答 5

4

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

于 2012-01-14T06:25:59.770 回答
1

我可以建议一个天真的方法作为开始:

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

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

  • 如果它填满了整个图像,那么你什么也没打,所以把图像分成四个 cuadrants 并递归地做同样的事情。(您无需检查落入先前找到的边界框图形内的点,从而在此过程中减少您的搜索空间)。

于 2012-01-14T04:38:49.153 回答
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.

请注意,最高是指最接近屏幕顶部的值,而不是最大值。

于 2012-01-14T04:41:07.707 回答
0

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

于 2012-01-14T04:49:07.237 回答
-1

您可以计算最小生成树并删除最长的边。然后你可以计算k-means。移除另一个长边并计算 k-means。冲洗并重复,直到 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.

请注意,最高是指最接近屏幕顶部的值,而不是最大值。

于 2012-01-14T07:45:46.310 回答