3

我有一张图片,我只剪掉了一列。之后我使它合乎逻辑,因此该列中只有 0 和 1。

假设我在此列中的值是

1111000110000000000000011111111

我想计算每个 1 块或每个 0 块的长度。

结果将是

1 - 4 (first 1)
0 - 3 (first 0)
1 - 2 
and so on...

我知道只计算整个列,但我不能为每个不同的块做。任何人请帮助我。

4

1 回答 1

6

让我们vec成为一个零和一的向量(1-by- n),那么您可以使用以下代码

rl = ( find( vec ~= [vec(2:end), vec(end)+1] ) );
data =  vec( rl );
rl(2:end) = rl(2:end) - rl(1:end-1);

rl会给你连续的零和一的数量,同时data会告诉你每个块是零还是一。

这个问题与运行长度编码密切相关。

演示:

vec = [1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1];
rl = ( find( vec ~= [vec(2:end), vec(end)+1] ) );
data =  vec( rl ),
rl(2:end) = rl(2:end) - rl(1:end-1),

data =
     1     0     1     0     1

rl =
     4     3     2    14     8
于 2013-06-02T08:53:55.677 回答