MATLAB: Eliminating element if a vector

below or above a thresholdelements in a vectorremoving

Suppose I have a vector of 6 elements i.e. [4 5 6 5 4 8].I want to write a code that should run across the column and when it encounters the value of 6, all the values should be made equal to zero regardless whether they are greater then 6 or smaller than it. The output should be like this [4 5 6 0 0 0]. I want to use this technique in image processing to make the values of the pixels below or above a certain threshold equal to zero when the threshold is detected.This process is repeated over all the columns in an image.

Best Answer

Here is a simple method that you can apply to the entire matrix, without any loops:
thr = 6;
mat = randi(9,5)
%

idx = 0<cumsum(mat==thr,1);
idx([2:end,1],:) = idx;
idx(1,:) = false;
%
mat(idx) = 0
which displays the original random matrix:
mat =
8 6 7 8 1
5 5 6 5 6
9 1 7 2 7
9 6 2 9 1
9 5 6 6 5
and the one with the values after the first thr values replaced with zeros:
mat =
8 6 7 8 1
5 0 6 5 6
9 0 0 2 0
9 0 0 9 0
9 0 0 6 0