给出一个矩阵:
0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0
0 0 1 1 0 1 0 1
0 0 1 1 0 1 0 0
0 0 0 0 1 0 0 0
注意1的主要是聚类,除了第3行中的1,最后一列
我想要做的是摆脱多余的0并且仅保留1的簇。这就是我要对图像进行的操作,因此裁剪后的结果应为矩形:
0 1 1 1
1 1 0 1
1 1 0 1
0 0 1 0
上面的作物是我可以做的最小的矩形作物,以覆盖最多的1个。
我现在遇到的问题是如何在matlab中做到这一点?我不能简单地删除所有0,我必须注意异常值1。解决这个问题的最有效方法是什么?
我只能想到逐行逐行手动查找群集。
答案 0 :(得分:3)
您要做的就是在二进制图像中标记2D连接组件。如果您有权访问图像处理工具箱,则该功能为bwlabel
:http://www.mathworks.com/help/toolbox/images/ref/bwlabel.html
如果你没有接受bwlabel
,那么有几种算法。我所知道的最快的是OpenCV使用的那个,它在图像中找到封闭的轮廓并基于
F。 Chang,C.-J。陈和C.-J. Lu,“线性时间成分标记 使用轮廓追踪技术的算法,“计算机视觉和图像 理解,卷。 93,不。 2,pp.206-220,2004