如何在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
函数,但它似乎从左到右工作。
答案 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));