Effacer les filtres
Effacer les filtres

Summing groups of ones

2 vues (au cours des 30 derniers jours)
Sonia Wiemann
Sonia Wiemann le 24 Avr 2012
If I have a list of ones and zeros....the ones are clustered together in groups....how can I ask the program to sum the ones within their groups?
  2 commentaires
Oleg Komarov
Oleg Komarov le 24 Avr 2012
Can you provide an example of input and output?
William
William le 24 Avr 2012
This might be helpful: http://www.mathworks.com/matlabcentral/newsreader/view_thread/160813

Connectez-vous pour commenter.

Réponse acceptée

Image Analyst
Image Analyst le 24 Avr 2012
Just call regionprops (if you have the image Processing Toolbox):
numberOfOnesPerGroup = regionprops(yourArray, 'area');
One line and you're done. This will get you the area (number of touching elements) for each group (elements that all touch each other).
  3 commentaires
Andrei Bobrov
Andrei Bobrov le 25 Avr 2012
numberOfOnesPerGroup = regionprops(~~yourArray(:), 'Area','PixelIdxList' )
numberOfZerosPerGroup = regionprops(~yourArray(:), 'Area','PixelIdxList' );
ons = [ones(numel(numberOfOnesPerGroup),1), cat(1,numberOfOnesPerGroup.('Area'))]
out = zeros(numel(numberOfOnesPerGroup)+numel(numberOfZerosPerGroup),2);
if numberOfOnesPerGroup(1).PixelIdxList(1) < numberOfZerosPerGroup(1).PixelIdxList(1)
out(1:2:end,:) = ons;
out(2:2:end,2) = cat(1,numberOfZerosPerGroup.('Area'));
else
out(2:2:end,:) = ons;
out(1:2:end,2) = cat(1,numberOfZerosPerGroup.('Area'));
end
Image Analyst
Image Analyst le 25 Avr 2012
Sonia: See that answer in your post about that question.

Connectez-vous pour commenter.

Plus de réponses (2)

Rick Rosson
Rick Rosson le 24 Avr 2012
y = cumsum(x);
d = x(2:end) - x(1:end-1);
k = ( d == -1 );
z = y(k);

Andrei Bobrov
Andrei Bobrov le 24 Avr 2012
x1 = [~x(1) x(:)' ~x(end)]
groupones = diff([strfind(x1,[0 1]);strfind(x1,[1 0])]);
variant
x1 = x(:);
k = find([true;diff(x1)~=0]);
out = [x1(k) diff([k,[k(2:end);numel(x1)+1]],1,2)]

Catégories

En savoir plus sur Mathematics dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by