2016-07-14 263 views
1

我需要基于连通分量算法的原理在MATLAB中实现图像分割函数,但需要进行一些修改。这适用于非常简单的2D图像,背景颜色和一些不同颜色的物体。MATLAB中的图像分割算法

这个想法是,以图像作为矩阵,我提供了一个工具来选择背景颜色(它会根据每个图像而有所不同)。然后,当选择图像背景的颜色值时,我必须分割图像中的所有对象,并且结果应该是具有相同图像大小的标记矩阵,0为背景,并且每个对象的编号不同。

这是我的意思图形例如:

enter image description here

我明白如何做到这一点的想法,但我不知道如何实现它的MATLAB。对于每个像素(矩阵位置),我应将其标记为已访问,然后如果该值对应于背景中的一个,则分配0,否则分配另一个值。物体可以由不同的颜色组成,所以最后我需要分割相邻像素的组,不管它们的颜色是什么。此外,我必须使用8连通性,以便将示例图像的绿色对象仅计为一个对象,而不是4个不同的对象。而且,对象应该从上到下,从左到右计数。

在MATLAB中有这样一个简单的方法吗?我知道bwlabel函数,但它仅适用于二元图像,所以我想将其适用于我的情况。

+0

你见过关于图像分割的Matlab教程,http://www.mathworks.com/discovery/image-segmentation.html,具体来说我认为Otsu方法会帮助你,更具体的看看'bwconncomp'函数 –

回答

1

,一旦你知道的背景颜色,你可以轻松地将您的图像转换成相同大小的二进制掩码:

bw=img!=bg_color; 

一旦你有一个二进制掩码可以调用bwlavel与8连接参数为你建议你自己。

注意:在处理之前,您可能需要使用rgb2ind将您的彩色图像从RGB表示转换为索引图像。

+0

是否可以发布整个MATLAB实现?谢谢! – xwang