-
-
Notifications
You must be signed in to change notification settings - Fork 387
/
Copy pathasymmetry.sh
executable file
·92 lines (86 loc) · 3.06 KB
/
asymmetry.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash
usage=" $0 -d 3 -f symmetric_template.nii.gz -m moving.nii.gz -o output_prefix "
:<<supercalifragilisticexpialidocious
here is a first pass at registration-based asymmetry based on mapping an image A to a symmetric-template.
note - care must be taken to look at prefix_L_aff.nii.gz to make sure that it's correct - we dont yet have an automated way to verify this - though we know the theory. if prefix_L_aff.nii.gz is not well aligned, results will be invalid.
supercalifragilisticexpialidocious
A=A ; B=B ; prefix=J ; dim=3 ; a=1
if [[ $# -eq 0 ]] ; then echo $usage ; exit 0 ; fi
while getopts ":d:f:m:o:h:a:" opt; do
case $opt in
d)
echo "-d $OPTARG" >&2
dim=$OPTARG
;;
f)
echo "-f $OPTARG" >&2
A=$OPTARG
;;
h)
echo $usage
exit 0;
;;
m)
echo "-m $OPTARG" >&2
B=$OPTARG
;;
o)
echo "-o $OPTARG " >&2
prefix=$OPTARG
;;
a)
echo "-a $OPTARG " >&2
a=$OPTARG
;;
\?)
echo "Usage: $usage " >&2
exit 0
;;
esac
done
echo inputs: $A $B $prefix $dim
if [[ ${#dim} -lt 1 ]] ; then echo must provide input dimension $dim ; echo $usage ; exit 0 ; fi
if [[ ${#prefix} -lt 3 ]] ; then echo must provide output prefix $prefix ; echo $usage ; exit 0 ; fi
if [[ ! -s $A ]] || [[ ! -s $B ]] ; then echo inputs: $A $B $prefix ; echo $usage ; exit 1 ; fi
#####################################################
reg=antsRegistration
uval=0
affits=999x999x1550x200
rig=" -t rigid[ 0.2 ] -c [ $affits ,1.e-7,20 ] -s 3x2x1x0 -f 8x4x2x1 -u $uval -l 0 "
aff=" -t affine[ 0.2 ] -c [ $affits ,1.e-7,20 ] -s 3x2x1x0 -f 8x4x2x1 -u $uval -l 0 "
metparams=" 1 , 32, regular , 0.5 "
synits=220x220x100x50 #BA
# synits=0x0x0x0 #BA
dtx="syn[ 0.25, 3, 0. ]"
ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2
export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS
#####################################################
ImageMath $dim ${prefix}_reflection.mat ReflectionMatrix $A $a
antsApplyTransforms -d $dim -t ${prefix}_reflection.mat -i $B -o ${prefix}_reflect.nii.gz -r $B
imgs=" $A, $B "
antsAffineInitializer ${dim} $A $B ${prefix}_init.mat 5 0.25 0 3
$reg -d $dim -r ${prefix}_init.mat\
-m mattes[ $imgs, $metparams ] $rig \
-m mattes[ $imgs, $metparams ] $aff \
-u $uval -b 0 -z 1 \
-o [ ${prefix}_L,${prefix}_L_aff.nii.gz]
$reg -d $dim -r ${prefix}_L0GenericAffine.mat \
-m mattes[ $imgs , 1 , 32 ] \
-t $dtx \
-c [ ${synits},1.e-8,10 ] \
-s 3x2x1x0 \
-f 8x4x2x1 \
-u $uval -b 0 -z 1 \
-o [ ${prefix}_L,${prefix}_L.nii.gz]
$reg -d $dim -r ${prefix}_reflection.mat -r ${prefix}_L0GenericAffine.mat \
-m mattes[ $imgs , 1 , 32 ] \
-t $dtx \
-c [ ${synits},1.e-8,10 ] \
-s 3x2x1x0 \
-f 8x4x2x1 \
-u $uval -b 0 -z 1 \
-o [ ${prefix}_R,${prefix}_R.nii.gz]
##########################################################
ANTSJacobian $dim ${prefix}_R1Warp.nii.gz ${prefix}_R 1
ANTSJacobian $dim ${prefix}_L1Warp.nii.gz ${prefix}_L 1
ImageMath $dim ${prefix}_asym.nii.gz - ${prefix}_Llogjacobian.nii.gz ${prefix}_Rlogjacobian.nii.gz