Extract 3D cells with nonzero elements, from a 3D cell array.

Hi guys! I have binary masks saved in 3D arrays (e.g. Mask(:,:,40), see attached Matlab file) and I want to extract only the 3D cell arrays which contain nonzero elements in a sequential order (e.g. if these are 20, then NMask(:,:,20)). Any ideas would be much appreciated.

 Akzeptierte Antwort

KSSV
KSSV am 12 Sep. 2016
clc; clear all ;
load Mask.mat ;
k = Combinedmask ;
[m,n,p] = size(k) ;
count = 0 ;
for i = 1:p
ki = k(:,:,i) ;
if sum(any(ki))~=0
count = count+1 ;
iwant{count} = ki ;
end
end

3 Kommentare

That's brilliant, nice and concise Siva, great thanks!
Stephen23
Stephen23 am 12 Sep. 2016
Bearbeitet: Stephen23 am 12 Sep. 2016
There is no point in using a loop to solve this task. See Guillaume's answer for a much simpler solution.
Thanks Stephen.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Guillaume
Guillaume am 12 Sep. 2016
Well, if you want nice and concise:
filteredmask = Combinedmask(:, :, any(any(Combinedmask, 1), 2))
No need for cell arrays, loops, ifs, etc., just one line.

1 Kommentar

Thank you Guillaume, that's true. It works very well and it is really concise indeed!

Melden Sie sich an, um zu kommentieren.

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by