Working with Cell Arrays
Afficher commentaires plus anciens
I'm doing some image analysis and am having a problem working with the cell arrays. I read in my images and they are stored in a cell array. I want to threshold every image for the different channels. And later on work with those thresholded images.
However, with the code I have below, for channel1bw, channel2bw, etc. I end up with a 90112*2048 double instead of a cell array for each image in the channel. For this example there are 44 images for each channel 44*2048=9012. I'd like the thresholded images to be stored in a vertical cell array, instead of all the pixel data in one matrix.
Any help would be appreciated. Also is there a cleaner way to code this? The for loops are redundant and I know it is a poor way to code.
channel1bw=[];
channel2bw=[];
channel3bw=[];
channel4bw=[];
channel5bw=[];
for x=1:length(channel1)
level=graythresh(channel1{x});
channel1bw=[channel1bw; im2bw(channel1{x},level)];
end
x=0;
for x=1:length(channel2)
level=graythresh(channel2{x});
channel2bw=[channel2bw; im2bw(channel2{x},level)];
end
x=0;
for x=1:length(channel3)
level=graythresh(channel3{x});
channel3bw=[channel3bw; im2bw(channel3{x},level)];
end
x=0;
for x=1:length(channel4)
level=graythresh(channel4{x});
channel4bw=[channel4bw; im2bw(channel4{x},level)];
end
x=0;
for x=1:length(channel5)
level=graythresh(channel5{x});
channel5bw=[channel5bw; im2bw(channel5{x},level)];
end
x=0;
Thanks for any help.
Réponses (2)
José-Luis
le 24 Juin 2014
your_mat = ones([2048,2048,numel(channel1)];
for x=1:length(channel1)
level=graythresh(channel1{x});
your_mat(:,:,x) = im2bw(channel1{x},level);
end
If you don't want to repeat the loops, you could make it a function.
AJ von Alt
le 24 Juin 2014
You can use cellfun with an anonymous function to get rid of the for loop.
channel1 = { imread('cameraman.tif'),...
rgb2gray(imread('ngc6543a.jpg')),...
rgb2gray(imread('peppers.png')),...
rgb2gray(imread('onion.png')) };
threshfun = @(x) im2bw( x , graythresh(x) );
channelbw = cellfun( threshfun , channel1 , 'UniformOutput', false );
Catégories
En savoir plus sur Image Arithmetic dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!