从右到左对连接组件进行排序

时间:2017-09-09 18:05:55

标签: matlab sorting connected-components

如何在MATLAB中从右到左,从下到上对连接的组件进行排序?例如,我在生成的标签矩阵L中有这个:

L = [0 0 0 1 1 1 0 0 0 0 0 3 3 0 4 4 0 0 0; ...
     0 0 1 1 1 0 0 0 0 0 0 3 3 0 4 4 4 0 0; ...
     0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 5 5; ...
     0 0 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 5 5];

我希望图像中的连接组件从右向左读取,并在L中取而代之:

L = [0 0 0 5 5 5 0 0 0 0 0 3 3 0 2 2 0 0 0; ...
     0 0 5 5 5 0 0 0 0 0 0 3 3 0 2 2 2 0 0; ...
     0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 1; ...
     0 0 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 1 1];

我在MATLAB中使用了regionprops函数,但它似乎从左到右工作。

2 个答案:

答案 0 :(得分:2)

标签(例如由bwlabel完成的标签)似乎遵循线性排序,这意味着它从左到右按向下每个列,按照它首先找到它们的顺序标记区域

如果您想要从右到左标记每个区域,但仍然向下每列,您可以先从左到右flip矩阵,进行标注,然后翻转结果又回来了。例如:

L = flip(bwlabel(flip(bw, 2), 4), 2);

如果您想要从右到左标记每个区域,而是每个列向上,您可以使用矩阵的180度rotations而不是翻转它:

L = rot90(bwlabel(rot90(bw, 2), 4), 2);

另一个只会反转L中标签的选项如下:

L(L > 0) = max(L(:))+1-L(L > 0);

答案 1 :(得分:1)

您是否尝试过旋转二进制图像?

%bin_img is the binary image
bin_img = rot90(rot90(bin_img));

%use regionprops like you want
%after this, you can retunr the image to the original

bin_img = rot90(rot90(bin_img));