【问题标题】:How to find the centroid of different sections of an image?如何找到图像不同部分的质心?
【发布时间】:2013-11-05 11:03:43
【问题描述】:

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

但我无法显示质心以及获取它们的值。任何帮助将不胜感激。

【问题讨论】:

    标签: image matlab centroid


    【解决方案1】:

    您可以只使用 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 命令,然后使线型类型不可见。我提供的答案应该可以工作。

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

    【讨论】:

      【解决方案2】:

      强烈推荐 - 使用 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 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 2020-03-12
        • 2018-04-01
        相关资源
        最近更新 更多