Mean of a bunch of slices
2 views (last 30 days)
Show older comments
% -----------------Step 3 -Masking the PCASL Files
PCASL_Files_Masked= PCASL_Files.*Human_Mask; %apply the mask. PCASL Files Masked = 64x64x128x16, Human_Mask=64x64x128x16
PCASL_Files_Masked=mean(PCASL_Files_Masked,4); %Taking the mean of each image, now PCASL_Files_Masked= 64x64x128
PCASL_Files_Masked=double(PCASL_Files_Masked);
save('PCASL_Files_Masked','PCASL_Files_Masked'); %Saving the PCASL_Files_Masked
Question 1) When I am taking the mean of all 16 slices I do PCASL_Files_Masked=mean(PCASL_Files_Masked,4); Is this theoretically correct? I am just not sure about using the '4'
Question 2) Next I want to get the mean over each image, however only in the 'masked' area
PCASL_Files_Masked_1= mean(mean(PCASL_Files_Masked)); % gives the mean signal over each measurement or each brain volume (there's 128 of them), so mean of (64, 64, 1:128)
But it doesn't do the job correctly. I want to ONLY take the mean over where the BRAIN is, not the rest of the space (which is zero) Just to clarify again, I believe when Matlab takes the mean over the image it even accounts for the number of pixels in the zero area(outside of the brain)
As in :
mean=[brain signal(which is some value)+ outside brain(which is zero)]/ [number of pixels in brain area+ number of pixels outside of brain] which is theoretically wrong.
Thanks in advance
0 Comments
Answers (2)
Jan
on 7 Mar 2012
Q1. mean(X, 4) calculates the mean over the 4th dimension. Therefore I assume your command is correct. I suggest to try it using a tiny test matrix.
Q2. If you want to ignore the zeros in a mean, simply use sum(X) and divide by sum(X ~= 0).
2 Comments
Image Analyst
on 7 Mar 2012
I think there are only 3 dimensions - I think the final x16 meant 16 bit integers, not an additional dimension.
Image Analyst
on 7 Mar 2012
If you have a mask image you can do
pixelsInsideMask = sliceImage(maskImage); % This is a 1D vector of pixels only within the mask area.
meanInsideMask = mean(pixelsInsideMask);
Now sliceImage and even maskImage can vary as you move through the volume slice by slice. To keep track of meanInsideMask as a function of slice, make it an array
for slice = 1 : totalNumberOfSlices
% First somehow get sliceImage.
% Next somehow get maskImage - the mask for this slice level.
% Then, once you have those....
pixelsInsideMask = sliceImage(maskImage); % This is a 1D vector of pixels only within the mask area.
meanInsideMask(slice) = mean(pixelsInsideMask);
end
0 Comments
See Also
Categories
Find more on MRI in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!