Mean of a bunch of slices
1 次查看(过去 30 天)
显示 更早的评论
% -----------------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 个评论
回答(2 个)
Jan
2012-3-7
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 个评论
Image Analyst
2012-3-7
I think there are only 3 dimensions - I think the final x16 meant 16 bit integers, not an additional dimension.
Image Analyst
2012-3-7
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 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!