Summing groups of ones
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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
William
am 24 Apr. 2012
This might be helpful: http://www.mathworks.com/matlabcentral/newsreader/view_thread/160813
Akzeptierte Antwort
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
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
Weitere Antworten (2)
Rick Rosson
am 24 Apr. 2012
y = cumsum(x);
d = x(2:end) - x(1:end-1);
k = ( d == -1 );
z = y(k);
0 Kommentare
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)]
0 Kommentare
Siehe auch
Kategorien
Mehr zu Read, Write, and Modify Image finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!