Get the positions of the first logicals (multiple sets) in an array
Show older comments
Hi. I am trying to find where the value of an array increases to a particular threshold (thresh=5). For example, I started off with:
x = [0.5,1.6,1.5,5.2,8.5,9.3,6.3,2.2,1.9,1.8,7.4,6.4,6.5,2.3,2.4,8.5,7.6,5.3,2.0,2.4]
I converted this to a logical :
thresh = 5;
x_log = x>thresh;
which gives me:
x_log = [0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0]
What I actually need is a logical that just has the first 1 of each group. So the output should be [0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0] ... is there a function I don't know of that can do this? I can't find it. Or do you suggest another way to do this using the original array?
Thanks a lot in advance!
4 Comments
BobbyRoberts
on 16 Jun 2022
Edited: BobbyRoberts
on 16 Jun 2022
Image Analyst
on 16 Jun 2022
Edited: Image Analyst
on 16 Jun 2022
Why do you say it works?
x = [0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0];
x_idx = x>5;
x_idx = find(ischange(double(x_idx),'Threshold',0));
x_idx(2:2:end,:) = [];
x_new = zeros(length(x),1);
x_new(x_idx) = 1
No element of x_new is 1.
See my solution below in the official "Answers" section of this page.
BobbyRoberts
on 16 Jun 2022
BobbyRoberts
on 16 Jun 2022
Accepted Answer
More Answers (1)
Try this:
x = [0.5,1.6,1.5,5.2,8.5,9.3,6.3,2.2,1.9,1.8,7.4,6.4,6.5,2.3,2.4,8.5,7.6,5.3,2.0,2.4];
mask = x > 5
props = regionprops(mask, 'PixelIdxList');
for k = 1 : length(props)
startingIndexes(k) = props(k).PixelIdxList(1);
end
% Show in command window:
startingIndexes
1 Comment
BobbyRoberts
on 16 Jun 2022
Categories
Find more on Dates and Time in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!