0

我有一个图像,我想分成三部分并分别找到这些部分的质心并将它们显示在原始图像上,我使用 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);

但我无法显示质心,也无法获取它们的值。任何帮助都感激不尽。

4

2 回答 2

0

强烈推荐 - 使用 blockproc 而不是 blkproc。它设计得更好,更容易使用。

现在,首先,blockproc 的第二个输入是块大小而不是网格大小。因此,如果您想将图像划分为 [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 中。

于 2013-11-06T17:19:06.853 回答
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 命令,然后使线型类型不可见。我提供的答案应该可以。

这是一个具有组成质心的示例图像。

在此处输入图像描述

于 2013-11-05T13:05:24.227 回答