首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于bwlabel的对象分割

基于bwlabel的对象分割
EN

Stack Overflow用户
提问于 2020-01-21 12:32:38
回答 1查看 218关注 0票数 0

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

如果我将bwlabel应用到中间的subimg行,我会得到9个对象,其中我必须丢弃左边的第一个字符,剩下的9-1,我必须选择N (f.e N=6) --那些面积最大的对象(排序和选择)。

我做了这样的事:

代码语言:javascript
复制
% 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上的水平中心线(仅构成字符的像素的一部分)检测到。

感谢那些能帮助我的人

EN

回答 1

Stack Overflow用户

发布于 2020-01-22 21:23:24

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

它应该是这样的:

代码语言:javascript
复制
[areas_matlab, ii] = sort (areas_matlab, 'descend')
N=6;
max_n_stats=stats(ii(1:N));

编辑:来可视化结果--将'PixelIdxList‘特性添加到regionprops函数调用中,并绘制选定字符:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59841257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档