我有一个图像,我想分成三个部分,分别找到部分的质心,并在原始图像上显示,我使用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);
但我无法展示质心,也无法获得它们的价值。任何帮助将不胜感激。
答案 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命令,然后使线型样式不可见。我提供的答案应该可行。
这是一个带有质心的示例图像。
答案 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中。