二进制向量中的数字0和1的块

kur*_*ama 2 arrays matlab

在MATLAB中,有一个bwlabel函数,给定一个二进制向量,例如x=[1 1 0 0 0 1 1 0 0 1 1 1 0]give(bwlabel(x)):

[1 1 0 0 0 2 2 0 0 3 3 3 0]
Run Code Online (Sandbox Code Playgroud)

但我想要获得的是

[1 1 2 2 2 3 3 4 4 5 5 5 6]
Run Code Online (Sandbox Code Playgroud)

我知道我可以否定x获得(bwlabel(~x))

[0 0 1 1 1 0 0 2 2 0 0 0 3]
Run Code Online (Sandbox Code Playgroud)

但我怎样才能将它们结合起来?

Ben*_*y13 6

全部在一行:

y = cumsum([1,abs(diff(x))])
Run Code Online (Sandbox Code Playgroud)

也就是说,abs(diff(x))二进制矢量中的斑点会发生变化,您将获得累积和的输出.