如何找到图像不同部分的质心?

时间:2013-11-05 11:03:43

标签: image matlab centroid

我有一个图像,我想分成三个部分,分别找到部分的质心,并在原始图像上显示,我使用blkproc分割[1 3]网格中的图像,但不能显示质心。这是我写的代码,

i=imread('F:\line3.jpg');

i2=rgb2gray(i);

bw=im2bw(i2);

imshow(bw)

fun=@(x) regionprops(x,'centroid');

b=blkproc(bw,[1 3],fun);

但我无法展示质心,也无法获得它们的价值。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用plot命令绘制图像顶部。 无论你[X,Y]质心坐标是什么,比如说cx(1:3)和cy(1:3) numCentroids是您正在绘制的质心数。


hold on;
for ii = 1:length(numCentroids)
    plot(cx(ii),cy(ii),'Marker','s','MarkerSize',10,'MarkerFaceColor','r','MarkerEdgeColor','k')
end

如果您想编写更优雅的代码,可以在所有质心上运行一次plot命令,然后使线型样式不可见。我提供的答案应该可行。

这是一个带有质心的示例图像。

enter image description here

答案 1 :(得分:0)

强烈建议 - 使用blockproc而不是blkproc。它设计得更好,更易于使用。

现在,首先,blockproc的第二个输入是blocksize而不是grid size。因此,如果您想将图像划分为[1 3]网格,我将其理解为三个块的单行,那么您应该将块大小设置为:

 blocksize = [size(i,1) ceil(size(i,2)/3)];

第二件事是在blockproc中关闭'TrimBorder'参数。代码看起来像:

 fun=@(x) regionprops(x,'centroid');
 blocksize = [size(i,1) ceil(size(i,2)/3)];
 b=blockproc(bw,blocksize,fun,'TrimBorder',false);

一件小事 - 我建议不要使用变量名'i'。默认情况下,它代表虚数i = sqrt(-1);在Matlab中。