See responses below.


On Wed, Dec 25, 2013 at 2:06 AM, Philip Lin <[log in to unmask]> wrote:
Hi Watson and McLaren, thanks for your responses, it helps me understand more.

After the checking, I've found that the value read by spm_read_vols(SPM.xY.VY) is scaled, the scaled value is in pinfo.

1. I am curious why these voxel values should be scaled ?

>>> They are scaled to make the constant term in the GLM approximately 100.
 
2. How this scale be calculated ?

The scale is calculated by spm_fmri_spm_ui.m:

fprintf('%-40s: ','Mapping files')                                      %-#
VY    = spm_vol(SPM.xY.P);
fprintf('%30s\n','...done')                                             %-#

%-check internal consistency of images
%--------------------------------------------------------------------------spm_check_orientations(VY);

%-place in xY
%--------------------------------------------------------------------------
SPM.xY.VY = VY;

%-Compute Global variate
%========================================================GM    = 100;
q     = length(VY);
g     = zeros(q,1);
fprintf('%-40s: %30s','Calculating globals',' ')                        %-#

for i = 1:q    fprintf('%s%30s',repmat(sprintf('\b'),1,30),sprintf('%4d/%-4d',i,q))%-#
 g(i) = spm_global(VY(i));
end

fprintf('%s%30s\n',repmat(sprintf('\b'),1,30),'...done')                %-#

% scale if specified (otherwise session specific grand mean scaling)
%--------------------------------------------------------------------------

gSF   = GM./g;
if strcmpi(SPM.xGX.iGXcalc,'none')
    for i = 1:nsess
        gSF(SPM.Sess(i).row) = GM./mean(g(SPM.Sess(i).row));
    end
end

%-Apply gSF to memory-mapped scalefactors to implement scaling
%--------------------------------------------------------------------------

for i = 1:q
    SPM.xY.VY(i).pinfo(1:2,:) = SPM.xY.VY(i).pinfo(1:2,:)*gSF(i);
end

%-place global variates in global structure
%--------------------------------------------------------------------------

SPM.xGX.rg  = g;
SPM.xGX.GM  = GM;
SPM.xGX.gSF = gSF;


 
Because I've tried many packages in R (nifti / fmri / AnalyzeFMRI) and voxel values read by these packages are unscaled. Is there any difference to analyze data with scaled and unscaled voxels ?

 (values from spm_read_vols) = (values from R packages)*(scale number in pinfo)

As I stated before, if you use spm_read_vols(spm_vol(actual file names)), rather than spm_read_vols on the xY structure, then you'd get the same values as the other programs.

 

I've tried to check spm_slice_vol.m, but it seems be complied in .mex file and I can't see the origin code.

Thanks for your help, sincerely

Philip Lin

On Tue, 24 Dec 2013 13:14:35 -0600, MCLAREN, Donald <[log in to unmask]> wrote:

>There are likely two differences:
>(1) When you display things in SPM, the values are interpolated, turning
>the interpolation off should fix the issue if you told the program to
>display the same image that you loaded;
>(2) SPM.xY.VY.pinfo is likely different from hdr.pinfo, when its created
>from hdr=spm_vol(filename). The pinfo field contains scaling information.
>The pinfo field is modified during the 1st level model creation to make the
>mean 100. Thus, it will give you different values than the unscaled image.
>
>Hope this helps.
>
>Best Regards, Donald McLaren
>=================
>D.G. McLaren, Ph.D.
>Research Fellow, Department of Neurology, Massachusetts General Hospital and
>Harvard Medical School
>Postdoctoral Research Fellow, GRECC, Bedford VA
>Website: http://www.martinos.org/~mclaren
>Office: (773) 406-2464
>=====================
>This e-mail contains CONFIDENTIAL INFORMATION which may contain PROTECTED
>HEALTHCARE INFORMATION and may also be LEGALLY PRIVILEGED and which is
>intended only for the use of the individual or entity named above. If the
>reader of the e-mail is not the intended recipient or the employee or agent
>responsible for delivering it to the intended recipient, you are hereby
>notified that you are in possession of confidential and privileged
>information. Any unauthorized use, disclosure, copying or the taking of any
>action in reliance on the contents of this information is strictly
>prohibited and may be unlawful. If you have received this e-mail
>unintentionally, please immediately notify the sender via telephone at (773)
>406-2464 or email.
>
>
>On Tue, Dec 24, 2013 at 12:21 PM, Chris Watson <
>[log in to unmask]> wrote:
>
>>  How are they different?
>>
>>  On 12/24/2013 09:40 AM, Philip Lin wrote:
>>
>> Hi all,
>>
>> I have a question about voxel values in SPM. If I read an image into SPM8 and use GUI (Display) to show the target image, the value for each voxel means intensity. If I read the same image by using spm_read_vols(SPM.xY.VY), the values for each voxel is apparently different to intensity. What's the difference between them ? What's the meaning of values from spm_read_vols ?
>>
>>
>> Thanks if there's any help, sincerely
>>
>> Philip Lin
>>
>>
>>
>>
>