Image 基于bwlabel的目标分割

Image 基于bwlabel的目标分割,image,matlab,Image,Matlab,我有一个二值图像,我只对出现在水平中心线上的字符感兴趣,因为对整个图像应用bwlabel会返回80个对象给我,但我只对出现在中心线上像素的字符感兴趣。 如果我将BWLABLE应用于中心子img行,我将得到9个对象,其中我必须丢弃剩余9-1中左侧的第一个字符,我必须选择N个(f.e N=6)面积最大的对象(排序和选择) 我做了这样的事情: % Ib1 = binaryImage; off = height / 2; Ib2 = Ib1 (off-2: off + 2, :); [Ietiq, N

我有一个二值图像,我只对出现在水平中心线上的字符感兴趣,因为对整个图像应用bwlabel会返回80个对象给我,但我只对出现在中心线上像素的字符感兴趣。

如果我将BWLABLE应用于中心子img行,我将得到9个对象,其中我必须丢弃剩余9-1中左侧的第一个字符,我必须选择N个(f.e N=6)面积最大的对象(排序和选择)

我做了这样的事情:

% Ib1 = binaryImage;

off = height / 2;
Ib2 = Ib1 (off-2: off + 2, :);
[Ietiq, NumObj] = bwlabel (Ib2);

stats = regionprops (Ietiq, 'Area', 'Centroid');
areas_matlab = cat (1, stats.Area);
centroid_matlab = cat (1, stats.Centroid);
areas_matlab = sort (areas_matlab, 'descend');
我不知道如何仅选择最大的N个对象并分割这些对象,这些对象由初始图像Ib1上的水平中心线(仅构成角色的一部分像素)检测


感谢那些能够帮助我的人

Matlab的“sort”函数还有第二个参数,它提供了元素索引数组,描述了排序元素的排列。您可以将其按N进行切片,以从regionprops中获得所需的N个最大连接组件

应该是这样的:

[areas_matlab, ii] = sort (areas_matlab, 'descend')
N=6;
max_n_stats=stats(ii(1:N));
编辑: 要可视化结果,请将“PixelIdxList”功能添加到regionprops函数调用并绘制所选字符:

Ib22 = zeros(size(Ib2));
for ii=1:N
    Ib22(max_n_stats(ii).PixelIdxList) = ii;
end

Ib11 = zeros(size(Ib1));
Ib11(off-2: off + 2) = Ib22;

您能提供一个示例图像吗?顺便说一句,您可以替换-areas_matlab=cat(1,stats.Area)-->areas_matlab=[stats.Area];谢谢,但是如何在起始图像Ib1上可视化/标记这N个对象(面积较大)?