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.

 Accepted Answer

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 Comments

That's brilliant, nice and concise Siva, great thanks!
There is no point in using a loop to solve this task. See Guillaume's answer for a much simpler solution.

Sign in to comment.

More Answers (1)

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 Comment

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

Sign in to comment.

Categories

Asked:

on 12 Sep 2016

Commented:

on 12 Sep 2016

Community Treasure Hunt

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

Start Hunting!