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

Detecting the geometry of irregular regions in an image in MATLAB

我有一个 2D 图像,它是通过对原始图像应用 k 均值聚类而生成的。应用聚类来检测原始图像中的不同颜色区域。这是生成的集群的一个示例,

彩色区域(紫色)是原始二维图像中簇的形状。我希望能够检测(并存储)这个簇的形状并将其应用于另一张图片。更详细地说,捕捉到这个形状后,我想在另一个图像中绘制(或构建)一个具有相似形状的区域,并对其应用相同的颜色。

我在 MATLAB 中搜索过这种检测功能,但我发现的大多数算法都检测到规则形状,如正方形和圆形。我尝试按照此处答案的建议使用 active activecontour,Random object detection matlab. Based on the first code provided at MATLAB website here, 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]}

谁能告诉我是否有办法知道每个组件与另一个组件之间的距离?

谢谢。

函数 bwconncomp 可能会有所帮助。它在二值图像中寻找连通分量。

CC = bwconncomp(I,connectivity);

CC你可以得到区域的数量和它们的索引,查看帮助文档。

二维图像的连通性参数基本上是一个由 0 和 1 组成的 3x3 矩阵。它表示相对于中心像素的邻域位置。如果使用标量值 4,生成的矩阵将为:

0  1  0
1  1  1
0  1  0

8 是:

1  1  1
1  1  1
1  1  1

由于您的区域没有特定的形状,我相信默认值 (8) 适合您。