MATLAB: How to delete ones in a binary vector that correspond to more than k consecutive repetitions

binary vectorremove elements

Given a number k and a binary vector v. How to saturate the number of consecutive repetitions of ones in v to the value k? For example, if k=3 and v=[1,0,0,1,1,0,1,1,1,1,0,0] then the output should be w=[1,0,0,1,1,0,1,1,1,0,0]. Speed of the code is highly important and no toolboxes available.
Thanks in advance

Best Answer

  • Try this. It uses function from image processing toolbox. You can check if the speed is acceptable
    v = [1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1];
    rgs = bwconncomp(v);
    pxlList = cellfun(@(x) {(x(4:end).')}, rgs.PixelIdxList);
    v([pxlList{:}]) = [];
    Result:
    v =
    Columns 1 through 13
    1 0 0 1 1 0 1 1 1 0 0 1 1
    Columns 14 through 16
    1 0 1