Effacer les filtres
Effacer les filtres

Pre-Allocate Space for a Cell Array

3 vues (au cours des 30 derniers jours)
Jessica
Jessica le 1 Août 2014
Commenté : Ben11 le 1 Août 2014
I'm working with confocal microscopy images. Specifically Z-stacks. I want to manipulate the images. However, I'm having a problem preallocating the space in memory.
%Open Image
bfopen()
%Extract Image Data
image_data=ans{1,1};
%Create an Array focused on the pixel_data
pixel_data=image_data(:,1);
%Ask User How Many Laser Channels were used to Acquire the Image
total_laser_channels=input('How many laser channels were used to acquire this image?\n');
%Determine the number of image slices in each channel
images_per_channel=length(pixel_data)/total_laser_channels;
*
%Preallocate space and variables for each channel
if total_laser_channels==1
channel1{images_per_channel,:}=[];
elseif total_laser_channels==2
channel1{images_per_channel,:}=[];
channel2{images_per_channel,:}=[];
elseif total_laser_channels==3
channel1{images_per_channel,:}=[];
channel2{images_per_channel,:}=[];
channel3{images_per_channel,:}=[];
elseif total_laser_channels==4
channel1{images_per_channel,:}=[];
channel2{images_per_channel,:}=[];
channel3{images_per_channel,:}=[];
channel4{images_per_channel,:}=[];
elseif total_laser_channels==5
channel1{images_per_channel,:}=[];
channel2{images_per_channel,:}=[];
channel3{images_per_channel,:}=[];
channel4{images_per_channel,:}=[];
channel5{images_per_channel,:}=[];
else
break
end*
%Loop: Each laser channel has corresponding images
i=1;
while i<length(pixel_data)+1
if total_laser_channels==1
channel1=[channel1;pixel_data(i,1)];
i=i+1;
elseif total_laser_channels==2
channel1=[channel1;pixel_data(i,1)];
channel2=[channel2;pixel_data(i+1,1)];
i=i+2;
elseif total_laser_channels==3
channel1=[channel1;pixel_data(i,1)];
channel2=[channel2;pixel_data(i+1,1)];
channel3=[channel3;pixel_data(i+2,1)];
i=i+3;
elseif total_laser_channels==4
channel1=[channel1;pixel_data(i,1)];
channel2=[channel2;pixel_data(i+1,1)];
channel3=[channel3;pixel_data(i+2,1)];
channel4=[channel4;pixel_data(i+3,1)];
i=i+4;
elseif total_laser_channels==5
channel1=[channel1;pixel_data(i,1)];
channel2=[channel2;pixel_data(i+1,1)];
channel3=[channel3;pixel_data(i+2,1)];
channel4=[channel4;pixel_data(i+3,1)];
channel5=[channel5;pixel_data(i+4,1)];
i=i+5;
else
display('Too many or wrong number of laser channels.')
break
end
end
For the images i'm looking at now the total_laser_channels is 3. images_per_channel is 45. However for channel1, channel2, channel3 after i run the code i get a 46x1 array instead of the 45x1 array that i want.
[]
2048x2048 uint16
2048x2048 uint16
2048x2048 uint16
2048x2048 uint16
2048x2048 uint16
2048x2048 uint16
2048x2048 uint16....
The first position of the cell array has []
Any help would be greatly appreciated.
  1 commentaire
Ben11
Ben11 le 1 Août 2014
Maybe you could use a switch/case and a for loop? On a side note if you want to remove the empty array from your cell array you can use ths:
channel1 = channel1(~cellfun('isempty', channel1));

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Import, Export, and Conversion dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by