Mean of a bunch of slices

조회 수: 4 (최근 30일)
Med_Imager
Med_Imager 2012년 3월 6일
% -----------------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

답변 (2개)

Jan
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
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.
Med_Imager
Med_Imager 2012년 3월 7일
There are 4 dimensions at first
64x64x128x16
size of each image=64x64
# of repetitions=128
Slices in each image=16

댓글을 달려면 로그인하십시오.


Image Analyst
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

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by