The*_*ach 5 opencv polygons contour regions
输入图片:

预期产出:

我打算适合三个(或一些数量)多边形(对于这种情况,矩形)来表示此图像中的"大"白色斑点.在输出图像中绘制的矩形是根据我对白色区域的感知.我不认为算法会提出这些相同的bouding区域.我希望的是在白色像素簇周围安装一些紧密的多边形.
我的初始解决方案包括找到该图像的轮廓,并通过找到每个轮廓中的点的凸包来在每个轮廓周围拟合闭合的凸多边形.
然而,由于白色区域高度碎裂,边缘内部和边缘有黑色区域,cv2.findContours返回的轮廓数量非常高(约500左右).因此,装配凸包不会改善白色区域的形状.白色区域大多保留其原始的抽象形状.我的目标是将白色区域的许多小轮廓合并为一个包含轮廓的整体,然后我可以在其上安装凸壳.
我该如何解决这个问题?我应该首先在轮廓点上使用聚类算法来找到彼此靠近的轮廓吗?
您首先需要对该图像执行形态学闭合(先膨胀后腐蚀)。这会关闭图像的所有微小“孔洞”,同时保留各个组件的形状和大小。与它相反,当腐蚀后膨胀时,它会去除图像中的噪声点。我正在处理一个类似的图像,我不得不执行多达 10 次的膨胀 + 侵蚀以平衡我的组件。完成后,使用连接的组件或查找轮廓。这肯定会使轮廓计数从 400 减少到 20-30。
其次,您提到您需要 3 个集群。虽然这两个小簇(被红线覆盖)可以合并为一个。我从中得出的结论是,您希望每个集群都尽可能紧密地拟合到其边界矩形中。因此,我建议您设置一个阈值效率(比如 80%)并使用层次聚类将每个连接的组件合并到一个集群中。当您的白色像素施加的空间小于其边界矩形(集群)的 80% 时,您将停止集群并获取集群。
您可以使用 kmeans 聚类,使用 xy 坐标作为每个白点和三个聚类的特征。然后取所得三个簇的凸包。您可能必须尝试不同的起点并选择最佳结果。看http://docs.opencv.org/modules/core/doc/clustering.html#kmeans
| 归档时间: |
|
| 查看次数: |
8037 次 |
| 最近记录: |