【问题标题】:Sort Connected Components from Right to Left从右到左排序连接的组件
【发布时间】:2017-09-09 18:05:55
【问题描述】:

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

【问题讨论】:

    标签: matlab sorting connected-components


    【解决方案1】:

    标记(例如 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);
    

    【讨论】:

    • 非常感谢。它似乎与 L = rot90(bwlabel(rot90(bw, 2), 4), 2);命令。并且正在从右到左和自下而上读取标签。
    【解决方案2】:

    你试过旋转二值图像吗?

    %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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2015-06-20
      • 2021-08-08
      相关资源
      最近更新 更多