def measure_bhattacharyya_distance_fsl (mean1fname, mean2fname, \
                                        var1fname, var2fname,  \
                                        std1fname, std2fname,  \
                                        numsubjs1, numsubjs2,  \
                                        experimentname, outdir, exclude_idx=-1):

    if not os.path.exists(outdir):
        os.mkdir(outdir)

    olddir = os.getcwd()
    os.chdir(outdir)

    #following the equations:
    #1/4 * ((m1-m2)^2/(var1+var2)) + 1/2 * (log( (var1+var2)/(2*std1*std2) ))
    #from:
    #1
    #Bhattacharyya clustering with applications to mixture simplifications
    #Frank Nielsen, Sylvain Boltz, and Olivier Schwander
    #2010 International Conference on Pattern Recognition
    #2
    #The Divergence and Bhattacharyya Distance Measures in Signal Selection
    #Kailath, T.
    #http://dx.doi.org/10.1109/TCOM.1967.1089532
    num1fname = outdir + os.path.sep + experimentname + '_bhatta_num1'
    den1fname = outdir + os.path.sep + experimentname + '_bhatta_denom1'
    bhatta1 = outdir + os.path.sep + experimentname + '_bhatta_first'
    au.fslmaths(mean1fname + ' -sub ' + mean2fname + ' -sqr ' + num1fname)
    au.fslmaths(var1fname + ' -add ' + var2fname + ' ' + den1fname)
    au.fslmaths(num1fname + ' -div ' + den1fname + ' -div 4 ' + bhatta1)

    num2fname = outdir + os.path.sep + experimentname + '_bhatta_num2'
    au.fslmaths(var1fname + ' -add ' + var2fname + ' ' + num2fname)

    den2fname = outdir + os.path.sep + experimentname + '_bhatta_denom2'
    bhatta2 = outdir + os.path.sep + experimentname + '_bhatta_secnd'
    au.fslmaths(std1fname + ' -mul ' + std2fname + ' -mul 2 ' + den2fname)
    au.fslmaths(num2fname + ' -div ' + den2fname + ' -log -div 2 ' + bhatta2)

    bhatta = outdir + os.path.sep + experimentname + '_' + au.bhattacharyya_str(
    )

    au.fslmaths(bhatta1 + ' -add ' + bhatta2 + ' ' + bhatta)

    #   au.imrm (num1fname)
    #   au.imrm (den1fname)
    #   au.imrm (bhatta1)
    #   au.imrm (num2fname)
    #   au.imrm (den2fname)
    #   au.imrm (bhatta2)

    os.chdir(olddir)

    return bhatta
def measure_bhattacharyya_distance_fsl (mean1fname, mean2fname, \
                                        var1fname, var2fname,  \
                                        std1fname, std2fname,  \
                                        numsubjs1, numsubjs2,  \
                                        experimentname, outdir, exclude_idx=-1):

   if not os.path.exists (outdir):
      os.mkdir (outdir)

   olddir = os.getcwd()
   os.chdir (outdir)

   #following the equations:
   #1/4 * ((m1-m2)^2/(var1+var2)) + 1/2 * (log( (var1+var2)/(2*std1*std2) ))
   #from:
   #1
      #Bhattacharyya clustering with applications to mixture simplifications
      #Frank Nielsen, Sylvain Boltz, and Olivier Schwander
      #2010 International Conference on Pattern Recognition
   #2
      #The Divergence and Bhattacharyya Distance Measures in Signal Selection
      #Kailath, T.
      #http://dx.doi.org/10.1109/TCOM.1967.1089532
   num1fname = outdir   + os.path.sep + experimentname + '_bhatta_num1'
   den1fname = outdir   + os.path.sep + experimentname + '_bhatta_denom1'
   bhatta1   = outdir   + os.path.sep + experimentname + '_bhatta_first'
   au.fslmaths (mean1fname + ' -sub '    + mean2fname + ' -sqr '   + num1fname)
   au.fslmaths (var1fname  + ' -add '    + var2fname  + ' '        + den1fname)
   au.fslmaths (num1fname  + ' -div '    + den1fname  + ' -div 4 ' + bhatta1)

   num2fname = outdir  + os.path.sep + experimentname + '_bhatta_num2'
   au.fslmaths (var1fname + ' -add '    + var2fname + ' ' + num2fname)

   den2fname = outdir + os.path.sep + experimentname + '_bhatta_denom2'
   bhatta2   = outdir + os.path.sep + experimentname + '_bhatta_secnd'
   au.fslmaths (std1fname + ' -mul ' + std2fname + ' -mul 2 ' + den2fname)
   au.fslmaths (num2fname + ' -div ' + den2fname + ' -log -div 2 ' + bhatta2)

   bhatta = outdir + os.path.sep + experimentname + '_' + au.bhattacharyya_str()

   au.fslmaths (bhatta1 + ' -add ' + bhatta2 + ' ' + bhatta)

#   au.imrm (num1fname)
#   au.imrm (den1fname)
#   au.imrm (bhatta1)
#   au.imrm (num2fname)
#   au.imrm (den2fname)
#   au.imrm (bhatta2)

   os.chdir(olddir)

   return bhatta
def measure_bhattacharyya_distance_py (mean1fname, mean2fname, \
                                        var1fname, var2fname,  \
                                        std1fname, std2fname,  \
                                        numsubjs1, numsubjs2,  \
                                        experimentname, outdir, exclude_idx=-1):

    if not os.path.exists(outdir):
        os.mkdir(outdir)

    #following the equations:
    #1/4 * (m1-m2)^2/(var1+var2) + 1/2 * log( (var1+var2)/(2*std1*std2) )
    #from:
    #1
    #Bhattacharyya clustering with applications to mixture simplifications
    #Frank Nielsen, Sylvain Boltz, and Olivier Schwander
    #2010 International Conference on Pattern Recognition
    #2
    #The Divergence and Bhattacharyya Distance Measures in Signal Selection
    #Kailath, T.
    #http://dx.doi.org/10.1109/TCOM.1967.1089532

    aff = nib.load(mean1fname).get_affine()
    m1 = nib.load(mean1fname).get_data()
    m2 = nib.load(mean2fname).get_data()
    v1 = nib.load(var1fname).get_data()
    v2 = nib.load(var2fname).get_data()
    s1 = nib.load(std1fname).get_data()
    s2 = nib.load(std2fname).get_data()

    b1 = 0.25 * (np.square(m1 - m2) / (v1 + v2)) + 0.5 * (np.log(
        (v1 + v2) / (2 * s1 * s2)))
    b1[np.isnan(b1)] = 0
    b1[np.isinf(b1)] = 0
    #b1 = np.nan_to_num(b1)

    bhatta = outdir + os.path.sep + experimentname + '_' + au.bhattacharyya_str(
    ) + au.ext_str()

    au.save_nibabel(bhatta, b1, aff)

    return bhatta
def measure_bhattacharyya_distance_py (mean1fname, mean2fname, \
                                        var1fname, var2fname,  \
                                        std1fname, std2fname,  \
                                        numsubjs1, numsubjs2,  \
                                        experimentname, outdir, exclude_idx=-1):

   if not os.path.exists (outdir):
      os.mkdir (outdir)

   #following the equations:
   #1/4 * (m1-m2)^2/(var1+var2) + 1/2 * log( (var1+var2)/(2*std1*std2) )
   #from:
   #1
      #Bhattacharyya clustering with applications to mixture simplifications
      #Frank Nielsen, Sylvain Boltz, and Olivier Schwander
      #2010 International Conference on Pattern Recognition
   #2
      #The Divergence and Bhattacharyya Distance Measures in Signal Selection
      #Kailath, T.
      #http://dx.doi.org/10.1109/TCOM.1967.1089532

   aff = nib.load(mean1fname).get_affine()
   m1  = nib.load(mean1fname).get_data()
   m2  = nib.load(mean2fname).get_data()
   v1  = nib.load (var1fname).get_data()
   v2  = nib.load (var2fname).get_data()
   s1  = nib.load (std1fname).get_data()
   s2  = nib.load (std2fname).get_data()

   b1  = 0.25 * (np.square(m1 - m2) / (v1 + v2)) + 0.5  * (np.log((v1 + v2) / (2*s1*s2)))
   b1[np.isnan(b1)] = 0
   b1[np.isinf(b1)] = 0
   #b1 = np.nan_to_num(b1)

   bhatta = outdir + os.path.sep + experimentname + '_' + au.bhattacharyya_str() + au.ext_str()

   au.save_nibabel(bhatta, b1, aff)

   return bhatta
Пример #5
0
    np.savetxt(outf_labels, subjlabels, fmt='%i')

    #creating folder for slices
    slidir = outdir + os.path.sep + au.slices_str()
    if not (os.path.exists(slidir)):
        os.mkdir(slidir)
        #slice the volumes

    #creating group and mask slices
    pre.slice_and_merge(outf_subjs, outf_labels, chkf, outdir, maskf)

    #creating measure output folder
    if measure == 'pea':
        measure_fname = au.pearson_str()
    elif measure == 'bat':
        measure_fname = au.bhattacharyya_str()
    elif measure == 'ttest':
        measure_fname = au.ttest_str()

    #checking the leave parameter
    if leave > (subjsnum - 1):
        au.log.warning('aizkolari_measure: the leave (-l) argument value is ' +
                       str(leave) +
                       ', bigger than the last index of subject: ' +
                       str(subjsnum - 1) + '. Im setting it to -1.')
        leave = -1

    #reading exclusion list
    excluded = parse_exclude_list(excluf, leave)

    #setting the output folder mdir extension
Пример #6
0
   np.savetxt(outf_labels, subjlabels, fmt='%i')

   #creating folder for slices
   slidir = outdir + os.path.sep + au.slices_str()
   if not(os.path.exists(slidir)):
      os.mkdir(slidir)
      #slice the volumes

   #creating group and mask slices
   pre.slice_and_merge(outf_subjs, outf_labels, chkf, outdir, maskf)

   #creating measure output folder
   if measure == 'pea':
      measure_fname = au.pearson_str()
   elif measure == 'bat':
      measure_fname = au.bhattacharyya_str()
   elif measure == 'ttest':
      measure_fname = au.ttest_str()

   #checking the leave parameter
   if leave > (subjsnum - 1):
      au.log.warning('aizkolari_measure: the leave (-l) argument value is ' + str(leave) + ', bigger than the last index of subject: ' + str(subjsnum - 1) + '. Im setting it to -1.')
      leave = -1

   #reading exclusion list
   excluded = parse_exclude_list (excluf, leave)

   #setting the output folder mdir extension
   mdir = outdir + os.path.sep + measure_fname
   if expname:
      mdir += '_' + expname