Find groups of 1's in array
21 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Sorry but ı have asked question wrong.
thanks all for great attention.
For example the data 11101111001110001111110100000000011111111 is like that and there only two groups of 1 could be because number of 0 maybe to few then we should accept them as a 1 how can we do that we have to find 1's group as a 2 there.
Examples: 1111111111100111111111111111011111111111111111= Result:1
1111111111100000000000000000111111111111111111= Result:2
11111111111000000000001111111111110000000001111111111100000000111111111 =Result :4
111111011111111010111111111101111111010011111111101001111111= Result :1
111010101111101000000011100011111 =RESULT :3 LIKE THAT
3 Commenti
Image Analyst
il 15 Ott 2015
So ignore 3 or less. I've given you an answer that works. But you have not answered Thorsten or my questions on why you say it doesn't.
Risposta accettata
Thorsten
il 2 Ott 2015
Nsplit = 5; % number of consecutive zeros that split a group
Z = find(diff(x) == 1) - find(diff(x) == -1);
Ngroups = sum(Z > Nsplit) + 1;
7 Commenti
Thorsten
il 8 Ott 2015
This file has 2337 groups of zeros. The largest group are 25 zeros, which occurs 11 times. You need a different algorithm to come up with 4 groups of 1's. How do you know that the answer is 4?
Più risposte (3)
Image Analyst
il 6 Ott 2015
Ali, if you have the Image Processing Toolbox, this will give you exactly the results you want:
b = [1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] % Result:1
filtered_b = ~bwareaopen(~b, 3) % Remove short stretches of 0's.
[~, numRegions] = bwlabel(filtered_b) % Count # regions of 1's
b = [1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] % Result:2
filtered_b = ~bwareaopen(~b, 3) % Remove short stretches of 0's.
[~, numRegions] = bwlabel(filtered_b) % Count # regions of 1's
b = [1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1] % Result :4
filtered_b = ~bwareaopen(~b, 3) % Remove short stretches of 0's.
[~, numRegions] = bwlabel(filtered_b) % Count # regions of 1's
b = [1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1] % Result :1
filtered_b = ~bwareaopen(~b, 3) % Remove short stretches of 0's.
[~, numRegions] = bwlabel(filtered_b) % Count # regions of 1's
b = [1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1] % RESULT :3 LIKE THAT
filtered_b = ~bwareaopen(~b, 3) % Remove short stretches of 0's.
[~, numRegions] = bwlabel(filtered_b) % Count # regions of 1's
If you like my answer, please click on the "0 votes" under my avatar to vote for it.
9 Commenti
Image Analyst
il 6 Ott 2015
Looks like you've accepted an answer that works for you. Al alternate way though is to use the Image Processing Toolbox if you have it. Then you can use bwareaopen() to get rid of small groups of zeros, then use bwlabel() to count the groups of 1's.
Vedere anche
Categorie
Scopri di più su Historical Contests in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!