我想实现一种算法,该算法将找到轮廓的边界矩形(已经由另一种算法确定)。我唯一拥有的是二值化图像(如下所示)。基本思想是:
采取这样的方式 - 预处理的二值化图像
并产生这样的东西
我想实现一种算法,该算法将找到轮廓的边界矩形(已经由另一种算法确定)。我唯一拥有的是二值化图像(如下所示)。基本思想是:
采取这样的方式 - 预处理的二值化图像
并产生这样的东西
查看连接组件标签:http ://en.wikipedia.org/wiki/Connected-component_labeling 。在这种情况下,您可以找到白色像素或黑色像素的连通分量(白色在计算上更容易,因为图像中的白点较少)。
我可以建议一个天真的方法作为开始:
在图像中,对图像中的中间点 (x,y) 进行 2D 二进制搜索。从那时起,执行洪水填充。
如果填充图形的边界不是图像的边界,那么您找到了一个封闭的图形,因此找到了它的边界框。
如果它填满了整个图像,那么你什么也没打,所以把图像分成四个 cuadrants 并递归地做同样的事情。(您无需检查落入先前找到的边界框图形内的点,从而在此过程中减少您的搜索空间)。
对于每个元素:
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.
请注意,最高是指最接近屏幕顶部的值,而不是最大值。
看起来 OpenCV 有一些算法可以找到已经实现的轮廓的边界框。因此,研究它们的功能如何工作可能是一个很好的开始。 http://opencv.itseez.com/doc/tutorials/imgproc/shapeescriptors/bounding_rects_circles/bounding_rects_circles.html
您可以计算最小生成树并删除最长的边。然后你可以计算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.
请注意,最高是指最接近屏幕顶部的值,而不是最大值。