John
That solved the first problem, but I am still getting errors in the
normalization routine- as shown below. This led to the discovery of
what I think are a number of other problems caused by having 3D
instead of 4D data. See below.
Warning: Matrix is singular to working precision.
> In spm_klaff at 200
In spm_dartel_norm_fun at 94
In matlabbatch/private/cfg_run_cm at 29
In cfg_util>local_runcj at 1363
In cfg_util at 699
In cfg_ui>MenuFileRun_Callback at 1139
In gui_mainfcn at 96
In cfg_ui at 53
Warning: Matrix is singular, close to singular or badly scaled.
Results may be inaccurate. RCOND = NaN.
> In expm>PadeApproximantOfDegree at 123
In expm at 39
In spm_klaff at 203
In spm_dartel_norm_fun at 94
In matlabbatch/private/cfg_run_cm at 29
In cfg_util>local_runcj at 1363
In cfg_util at 699
In cfg_ui>MenuFileRun_Callback at 1139
In gui_mainfcn at 96
In cfg_ui at 53
1 NaN 0
----------
In spm_klaff.m
The first problem caused by having 3D data is that loaddat doesn't
load Ng (or Nf) because loops such as starting at line 221
for k = 1:d(4)-1
don't execute because d(4) -1 is 0. Also, the summing of the first
nd-1 volumes to create the last volume won't be right either, etc.
Other questions about the code:
Around line 45 it says [x,y ,zz] = ndgrid(1:dg(1),1:dg(2),0);
This will make zz all 0's, so I don't understand why at line 49 it is
added to z and if it really should be all 0's?
A second problem occurs at lines 102-104.
x1 = M(1,1)*x + M(1,2)*y + M(1,3)*z + M(1,4);
y1 = M(2,1)*x + M(2,2)*y + M(2,3)*z + M(2,4);
z1 = M(3,1)*x + M(3,2)*y + M(3,3)*z + M(3,4);
It turns out that for certain matrices, M, the values of x1, y1 or z1
can be very close to but not quite > 1. This causes the subsequent
lines (107-109)
msk = x1>=1 & x1<=df(1) &...
y1>=1 & y1<=df(2) &...
z1>=1 & z1<=df(3);
to generate an empty msk.
for example my Nf and Ng matrices resulted in an M matrix of
M =
1.5000 0.0000 0.0000 -0.5000
0.0000 1.5000 0.0000 -0.5000
-0.0000 -0.0000 1.5000 -0.5000
0 0 0 1.0000
This looks ok but the values of the 3rd row are actually
-0.0000000000000001
-0.0000000000000001
1.5000000000000000
-0.5000000000000142
which leads to a z1(1), for example, of: 0.9999999999999856. Since it
is < 1, msk ends up as all 0's.
so perhaps 102-104 should be rounded?
x1 = round(M(1,1)*x + M(1,2)*y + M(1,3)*z + M(1,4));
y1 = round(M(2,1)*x + M(2,2)*y + M(2,3)*z + M(2,4));
z1 = round(M(3,1)*x + M(3,2)*y + M(3,3)*z + M(3,4));
Messing around with all of this doesn't lead to optimum convergence of
dM and the resulting warped volumes end up being shifted and tiny...
-----
Darren Gitelman
On Tue, May 26, 2009 at 6:54 AM, John Ashburner <[log in to unmask]> wrote:
> Hi Darren,
> At around line 29, try changing the code to
>
> df = [size(Nf.dat),1,1]; % Dimensions of data
> dg = [size(Ng.dat),1,1]; % Dimensions of data
>
> The reason for the crash is that when the algorithm asks the size of a
> variable, MATLAB gives a vector of length equal to the number of dimensions.
> Usually, the data are 4D but yours were only 3D, so the 'df' variable
> contained only three elements and the code didn't know that the 4th (5th, 6th
> etc) dimensions should be 1.
>
> This will be fixed in the next updates.
>
> All the best,
> -John
>
> On Tuesday 26 May 2009 07:02, Darren Gitelman wrote:
>> Hi
>>
>> I am having difficulty using the "normalize to MNI space" function of
>> dartel.
>>
>> The steps I've taken are as follows
>> 1) Import seg_sn.mat files
>> 2) Create template: I used just the rc1 files.
>> 3) Normalise to MNI space- Selected c1Template6. Selected the flow
>> fields and selected the rc1 images.
>>
>> It produces this error
>>
>> Running 'Normalise to MNI Space'
>> ** Affine registering "c1Template_6" with MNI space **
>> Failed 'Normalise to MNI Space'
>> Attempted to access df(4); index out of bounds because numel(df)=3.
>> In file "/usr/local/imsw/SPM/spm8/toolbox/DARTEL/spm_klaff.m" (v3053),
>> function "spm_klaff" at line 32.
>> In file "/usr/local/imsw/SPM/spm8/toolbox/DARTEL/spm_dartel_norm_fun.m"
>> (v3032), function "spm_dartel_norm_fun" at line 94.
>>
>> The following modules did not run:
>> Failed: Normalise to MNI Space
>>
>> thanks
>> -----
>> Darren Gitelman
>
>
|