Filter löschen
Filter löschen

Summing groups of ones

2 Ansichten (letzte 30 Tage)
Sonia Wiemann
Sonia Wiemann am 24 Apr. 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 Kommentare
Oleg Komarov
Oleg Komarov am 24 Apr. 2012
Can you provide an example of input and output?
William
William am 24 Apr. 2012
This might be helpful: http://www.mathworks.com/matlabcentral/newsreader/view_thread/160813

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Image Analyst
Image Analyst am 24 Apr. 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 Kommentare
Andrei Bobrov
Andrei Bobrov am 25 Apr. 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 am 25 Apr. 2012
Sonia: See that answer in your post about that question.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Rick Rosson
Rick Rosson am 24 Apr. 2012
y = cumsum(x);
d = x(2:end) - x(1:end-1);
k = ( d == -1 );
z = y(k);

Andrei Bobrov
Andrei Bobrov am 24 Apr. 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)]

Kategorien

Mehr zu Mathematics finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by