我有一个二值图像,我感兴趣的是只对出现在水平中心线上的字符进行分割,因为对整个图像应用bwlabel会向我返回80个对象,但是我感兴趣的只是那些像素出现在中线上的字符。。
如果我将bwlabel应用到中间的subimg行,我会得到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上的水平中心线(仅构成字符的像素的一部分)检测到。
感谢那些能帮助我的人
发布于 2020-01-22 21:23:24
Matlab的“排序”函数有第二个参数,它提供了描述排序元素排列的元素索引数组。您可以用N对其进行切片,以从区域道具中获得所需的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;https://stackoverflow.com/questions/59841257
复制相似问题