重新标记一个标签矩阵
这是我听到的三个最常见的问题bwlabel,用于标记二值图像中连接的分量
- 搜索顺序
- 重新标记(重新编号标签矩阵)
- 两个不同图像中标签之间的对应关系
今天我将处理重新贴标签的问题。
在我关于搜索顺序的前一篇文章,我展示了如何对标记的对象进行后处理,以根据各种标准修改它们的顺序。现在我将更进一步,使用regionprops中的排序输出对标签矩阵中的标签重新编号。
博客阅读器Trung想知道我们是否可以通过重心按字典顺序排序,所以我就在这里做。
url =“https://blogs.mathworks.com/images/steve/186/scanned_page.png”;bw = imread (url);Bw = ~ Bw (1107:1194, 17:135);imshow (bw,“InitialMagnification”,“健康”)
这是一个标签矩阵的伪彩色视图label2rgb:
L = bwlabel (bw);rgb = label2rgb (L,“喷气机”,(。95 .95 .95),“洗牌”);imshow (rgb,“InitialMagnification”,“健康”)
现在,让我们使用regionprops获取每个物体的质心。为了方便重新贴标签,我将得到“PixelIdxList”为每个对象。
s = regionprops(L, {“重心”,“PixelIdxList”});
接下来,根据质心按字典顺序排序,首先根据垂直坐标排序。
centroids = cat(1, s. centroids);[sorted_centroids, sort_order] = sortrows(fliplr(centroids));s2 = s (sort_order);
为了可视化已排序的对象的顺序,我们可以在对象的顶部显示对象编号,如下所示:
首先,用浅灰色的背景来代替%的黑色背景,使数字可见在它上面。I = im2uint8 (bw);我(~ bw) = 200;我(bw) = 240;imshow(我“InitialMagnification”,“健康”)%现在绘制每个排序对象在对应位置的数量%重心:持有在为k = 1:numel(s2)质心= s2(k).质心;文本(质心(1),重心(2),sprintf (' % d '、k));结束持有从
我们对的输出排序regionprops,但我们还没有触及标签矩阵本身。我们可以根据排序顺序使用线性索引和PixelIdxList每个对象。一个对象的PixelIdxList是属于该对象的像素的线性索引向量。以下是重标记循环:
为k = 1:numel(s2) kth_object_idx_list = s2(k).PixelIdxList;L (kth_object_idx_list) = k;结束
在MATLAB 7.6 (R2008a)中发布特性允许您从一个循环中捕获多个图形。我将使用这个新功能来显示最初几个重新标记的对象的位置l.
为k = 1:5
imshow (L = = k)
结束
很快我将写另一篇文章,展示如何在两个图像重叠的对象中匹配标签。
- 类别:
- 连接组件
评论
请点击留言在这里登录到您的MathWorks帐户或创建一个新帐户。