在MATLAB中检测图像中不规则区域的几何形状

时间:2015-08-11 11:12:07

标签: image matlab image-processing image-segmentation

我有一个2D图像,它是将k-means聚类应用于原始图像而产生的。应用聚类以检测原始图像中的不同颜色区域。以下是结果集群的一个示例

enter image description here

彩色区域(紫色)是原始2D图像中的簇的形状。我希望能够检测(并存储)此群集的形状并将其应用于另一张图片。为了详细说明,在捕获这个形状之后,我想在另一个图像中绘制(或构造)具有相似形状的区域并对其应用相同的颜色。

我在MATLAB中搜索过这种检测能力,但我发现的大多数算法都能检测出正方形和圆形等常规形状。我尝试使用主动activecontour,如答案所示,Random object detection matlab。根据MATLAB网站http://www.mathworks.com/help/images/ref/activecontour.html提供的第一个代码,我已经编写了这段代码,

I = imread('clusterimg.png');
imshow(I)
title('Original Image');

mask = zeros(size(I));
mask(25:end-25,25:end-25) = 1;

figure, imshow(mask);
title('Initial Contour Location');

bw = activecontour(I,mask,300);

figure, imshow(bw);
title('Segmented Image');

但是,当我运行它时,我得到了这个错误,

Undefined function 'activecontour' for input arguments of type 'uint8'.
Error in geometrydetection (line 11)
bw = activecontour(I,mask,300); 

我需要知道的是以下内容,

1-我在上面的代码中做了什么错误?

2- activecontour是否是实现上述几何检测的好方法?如果是,在检测到区域的几何形状后,如何在另一个图像中构建类似的几何图形?如果不是,您能否提供一种替代方法,可以检测区域的几何形状,并在另一个图像中构建类似的方法?

编辑: mvai 使用bwconncomp的建议可能会很好。我找到了这个例子(可在此处获取,http://www.mathworks.com/help/images/labeling-and-measuring-objects-in-a-binary-image.html),

cc = bwconncomp(BW)
cc = 

    Connectivity: 8
       ImageSize: [8 9]
      NumObjects: 3
    PixelIdxList: {[6x1 double]  [6x1 double]  [5x1 double]}

有人可以告诉我是否有办法知道将每个组件与另一个组件分开的距离?

谢谢。

1 个答案:

答案 0 :(得分:1)

函数bwconncomp可能有所帮助。它在二进制图像中查找连接的组件。

CC = bwconncomp(I,connectivity);

CC您可以获取区域及其索引的数量,请参阅文档以获取帮助。

对于2D图像,连接参数基本上是0和1的3x3矩阵。它表示相对于中心像素的邻域位置。如果使用标量值4,则生成的矩阵将为:

0  1  0
1  1  1
0  1  0

8是:

1  1  1
1  1  1
1  1  1

由于您的地区没有特定的形状,我相信默认(8)对您来说没问题。