That's because the images contain NaNs (not a number, which indicates
that the value is unknown). The version below should get fix this by
assuming that these NaNs are 0. There is also another slight fix to
deal with some voxel size settings.
V = spm_vol(spm_select(1,'image'));
sm = 0;
for i=1:V.dim(3),
M = spm_matrix([0 0 i]);
img = spm_slice_vol(V,M,V.dim(1:2),0);
sm = sm + sum(img(isfinite(img)));
end;
fprintf('%g litres\n', sm*abs(det(V.mat(1:3,1:3)))/100^3)
Best regards,
-John
On Fri, 2010-02-12 at 09:25 -0500, Sophie Lafaille wrote:
> thanks to both of you, now I'm getting
>
>
> sm =
>
>
> NaN
>
>
> NaN litres
>
>
>
>
> any ideas?
>
>
> Sophie
>
>
>
> On 12 February 2010 09:22, Darren Gitelman <[log in to unmask]>
> wrote:
> Sophie
>
> spm_get is no longer used as of spm5. to fix the error change
> the first line of the code below to
> V = spm_vol(spm_select(1,'image'));
> I
>
> Darren Gitelman, MD
>
>
>
> On Thu, Feb 11, 2010 at 1:26 PM, Sophie Lafaille
> <[log in to unmask]> wrote:
> I have a MTR image (Thanks to Benjamin Bender, my
> hero!). I'd like to use the matlab code below to
> integrate the values of my image.
>
>
> I get an error message when I run it
> ??? Undefined function or method 'spm_get' for input
> arguments of type 'double'.
>
>
> I'm on XP using SPM8. I don't know Matlab at all so
> I'm having problems troubleshooting it. Also, I've
> masked my image with the grey and white matter
> segmentations of my highres, this would make a
> difference in calculation?
>
>
> thanks, sophie
>
>
>
>
> >From John Ashburner 2002
> https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind02&L=SPM&P=R33843
> If you want to integrate all the values in an image,
> you would need to write
> some kind of a script to do it. A possible example that you could copy and
> paste into Matlab would be:
> %____________________________________________________________
>
> V = spm_vol(spm_get(1,'*.img'));
> sm = 0;
> for i=1:V.dim(3),
> M = spm_matrix([0 0 i]);
> img = spm_slice_vol(V,M,V.dim(1:2),0);
> sm = sm + sum(img(:));
> end;
> sm
> fprintf('%g litres\n', sm*det(V.mat(1:3,1:3))/100^3)
> %____________________________________________________________
>
> The value of sm is the integral of intensity throughout the image. If this
> is an integral over a grey matter image, then you will need to scale by the
> volume of each voxel ( det(V.mat(1:3,1:3)) )in order to get an answer in
> units of cubic millimetres.
>
>
>
>
>
> --
> Sophie Josee Lafaille, M.Sc.
> Research Coordinator
> Law and Mental Health Program
> Specialty Clinics, 4th Floor, RM 440
> Centre for Addiction and Mental Health
> 250 College Street, Toronto, Ontario, Canada
> M5T 1R8
>
> Office: 416-535-8501 Ext. 6278
>
>
>
>
>
>
> --
> Sophie Josee Lafaille, M.Sc.
> Research Coordinator
> Law and Mental Health Program
> Specialty Clinics, 4th Floor, RM 440
> Centre for Addiction and Mental Health
> 250 College Street, Toronto, Ontario, Canada
> M5T 1R8
>
> Office: 416-535-8501 Ext. 6278
>
--
John Ashburner <[log in to unmask]>
|