Object Sort bwlabel、bwconncomp和regionprops的顺序
最近有人问我函数找到的对象的顺序
bwlabel
,
bwconncomp
,
regionprops
。例如,在这张二值图像中,是什么决定了物体的顺序?
的函数
bwlabel
和
bwconncomp
两者都在同一方向上扫描物体。他们从最左边的列开始向下看每一列。这个动画演示了搜索顺序:
由于这个搜索过程,对象的顺序取决于每个对象中最左端的像素。具体来说,顺序是一种字典排序
(c, r)美元
坐标,
c
和
r
是最上面最左边像素的列坐标和行坐标。
如果你传递一个二值图像给
regionprops
,得到的对象顺序与for相同
bwconncomp
,那是因为
regionprops
调用
bwconncomp
在引擎盖下面。
有时,处理文本图像的人要求更改内容,以便搜索按行进行,而不是按列进行。其动机是使对象顺序与每行上的字符顺序相同。(假设这是一种从左到右的语言。)不过,这通常并不奏效。考虑以下文本片段:
如果按行搜索,首先会找到字母“b”,然后是“L”,然后是“t”。这个动画展示了为什么会这样:
如果您想要不同的排序顺序,我建议返回
regionprops
输出为表,然后就可以使用了
sortrows
。这里有几个例子。
url =“https://blogs.mathworks.com/steve/files/rice-bw-ul.png”;
A = imread(url);
imshow (A)
道具=区域道具(“表”,,“重心”“区域”])
您可以根据对象的质心对它们进行排序,主要排序在垂直方向上,次要排序在水平方向上。
道具。Centroid_x = props.Centroid(:,1);
道具。Centroid_y = props.Centroid(:,2);
Props_by_row = sortrows(道具,[“Centroid_y”“Centroid_x”])
imshow (A)
为K = 1:height(props_by_row)
x = props_by_row.Centroid_x(k);
y = props_by_row.Centroid_y(k);
文本(x, y,字符串(k),颜色=“黄色”, BackgroundColor =“蓝色”, FontSize = 16,…
FontWeight =“大胆”, horizontalalign =“中心”,…
VerticalAlignment =“中间”);
结束
再举个例子,你可以按面积排序。
Props_by_area = sortrows(道具,“区域”,“下”)
imshow (A)
为K = 1:height(props_by_area)
x = props_by_area.Centroid_x(k);
y = props_by_area.Centroid_y(k);
文本(x, y,字符串(k),颜色=“黄色”, BackgroundColor =“蓝色”, FontSize = 16,…
FontWeight =“大胆”, horizontalalign =“中心”,…
VerticalAlignment =“中间”);
结束
标题(对象按面积排序(从大到小))
댓글
댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。