Adding values to a variable in a loop?

6 次查看(过去 30 天)
I'm having a problem putting data into a variable using a loop. I've never really worked with cell array's and they seem to be giving me problmes I'm working with z-stack confocal images and am looking to analyze the intensity within the cells. Right now I am just trying to put the data in appropriate matrices so that I can manipulate it later on.
Here is a run-down of the variable types.
ans gives 1x4 cell where the pixel and image data is in the first cell (which is the only thing I'm concerned with).
image_data gives a 135x2 cell as seen below
2048x2048 uint16 'C:\Users\Jessica\Desktop\GFP25_010.nd2; plane 1/135; C=1/3; T=1/45'
2048x2048 uint16 'C:\Users\Jessica\Desktop\GFP25_010.nd2; plane 2/135; C=2/3; T=1/45'
2048x2048 uint16 'C:\Users\Jessica\Desktop\GFP25_010.nd2; plane 3/135; C=3/3; T=1/45'
2048x2048 uint16 'C:\Users\Jessica\Desktop\GFP25_010.nd2; plane 4/135; C=1/3; T=2/45'
2048x2048 uint16 'C:\Users\Jessica\Desktop\GFP25_010.nd2; plane 5/135; C=2/3; T=2/45'
2048x2048 uint16 'C:\Users\Jessica\Desktop\GFP25_010.nd2; plane 6/135; C=3/3; T=2/45'
pixel_data is a 135x1 cell and is the first column of image_data
Below is my code. My problems is in the last little bit. I keep getting an error.
*Error message: The following error occurred converting from cell to double: Error using double. Conversion to double from cell is not possible.
Error in Image_Analysis (line 45) channel1(i,1)=pixel_data(i,1)*
%Data Analysis of Amount of Antibody Internalization in Cells
clc;
clear;
%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');
%Preallocate space and variables for each channel
if total_laser_channels==1
channel1=[];
elseif total_laser_channels==2
channel1=[];
channel2=[];
elseif total_laser_channels==3
channel1=[];
channel2=[];
channel3=[];
elseif total_laser_channels==4
channel1=[];
channel2=[];
channel3=[];
channel4=[];
else total_laser_channels==5
channel1=[];
channel2=[];
channel3=[];
channel4=[];
channel5=[];
end
%Loop: Each laser channel has corresponding images
i=1;
while i<length(pixel_data)+1
channel1(i,1)=pixel_data(i,1)
channel2(i-1,1)=pixel_data(i+1,1)
channel3(i-3,1)=pixel_data(i+2,1)
i=i+3;
end
To clarify what I'm trying to do with the loop. I want to know how many lasers were used. You'll notice in that in image_data C=1/3, 2/3, 3/3. These correspond to different laser channels. Thus I want to put the pixel_data of the corresponding laser channels into channel1 channel2 and channel3
Any help would be wonderful. Also any suggestions on my code would be great as well.

回答(1 个)

Matz Johansson Bergström
It seems as though pixel_data(i,1) is still a cell. Have you tried pixel_data{i,1}?
If I try
pixel_data={1,4,7,8}
>class(pixel_data(1))
cell
>class(pixel_data{1})
double
  2 个评论
Jessica
Jessica 2014-7-17
That probably would have worked. Thank you.
>> class(pixel_data(1))
ans =
cell
>> class(pixel_data{1})
ans =
uint16
However, I came up with a new little bit of code.
channel1=[channel1;pixel_data(i,1)];
channel2=[channel2;pixel_data(i+1,1)];
channel3=[channel3;pixel_data(i+2,1)];
i=i+3;
This worked for what I was trying to do

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Data Extraction 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by