예제 #1
0
    def directInvokeAlgorithm(self, vals):
        print('oooo invoking: resliceImage with vals', (vals))
        input = self.inputs['input']
        reference = self.inputs['reference']
        if (reference == None):
            reference = input
        xform = self.inputs['xform']

        spa = reference.spacing
        dim = reference.dimensions
        dt = "-1"
        if (vals['forcefloat']):
            dt = "float"

        try:
            self.outputs['output'] = libbis.resliceImageWASM(
                input, xform, {
                    "spacing": [spa[0], spa[1], spa[2]],
                    "dimensions": [dim[0], dim[1], dim[2]],
                    "datatype": dt,
                    "interpolation": vals['interpolation']
                }, self.parseBoolean(vals['debug']))
        except:
            print('---- Failed to invoke algorithm')
            return False

        return True
예제 #2
0
    def test_resample(self):
        imgnames = [
            'avg152T1_LR_nifti_resampled.nii.gz', 'avg152T1_LR_nifti.nii.gz',
            'avg152T1_LR_nifti_resampled_resliced.nii.gz'
        ]
        images = [0, 0, 0]
        names = [' reference', 'target', 'true']

        print('\n\n')
        print('----------------------------------------------------------')
        for i in range(0, 3):
            name = my_path + '/../test/testdata/' + imgnames[i]
            images[i] = bis.bisImage().load(name)
            print('__ loaded ', names[i], 'from ', name, 'dims=',
                  images[i].dimensions, images[i].spacing,
                  images[i].dimensions, images[i].get_data().dtype)
        print('----------------------------------------------------------')

        reslice_matr = [[0.866, -0.525, 0.000, 68.758],
                        [0.500, 0.909, 0.000, 9.793],
                        [0.000, 0.000, 1.000, 2.250],
                        [0.000, 0.000, 0.000, 1.000]]

        matr = np.zeros([4, 4], dtype=np.float32)
        for row in range(0, 4):
            for col in range(0, 4):
                matr[row][col] = reslice_matr[row][col]

        reference_image = images[0]
        target_image = images[1]
        true_image = images[2]

        paramobj = {
            "interpolation": 1,
            "dimensions": reference_image.dimensions,
            "spacing": reference_image.spacing,
            "datatype": "float",
            "backgroundValue": 0.0,
        }

        print('----------------------------------------------------------')

        out_obj = libbis.resliceImageWASM(images[1], matr, paramobj, debug=2)
        cc = np.corrcoef(images[2].get_data().flatten(),
                         out_obj.get_data().flatten())[0, 1]

        if cc > 0.999:
            testpass = True
        else:
            testpass = False

        print('----------------------------------------------------------')
        print('__ post reslicing correlation out v true=', cc, 'pass='******'----------------------------------------------------------')

        self.assertEqual(testpass, True)
예제 #3
0

if (fmri.dimensions != group.dimensions):
	group_resliced = group;
	print('++++ \t No reslicing required...');
else:   
	print('++++ \t Group parcellation being resliced to match the fMRI image dimension...');
	resl_paramobj = {
            "interpolation" : 0,
            "dimensions" : fmri.dimensions,
            "spacing" : fmri.spacing,
            "datatype" : "short",
            "backgroundValue" : 0.0,
        };
	matr=np.eye(4,dtype=np.float32);
	group_resliced=libbiswasm.resliceImageWASM(group,matr,resl_paramobj,2);


print('++++ \t Group parcellation dims=',group_resliced.dimensions);

if (smooth == 0):
	fmri_smoothed = fmri;
	print('++++ \t No smoothing required...');
else:
	print('++++ \t Smoothing fMRI image...');
	c = smooth * 0.4247;
	fmri_smoothed = libbiswasm.gaussianSmoothImageWASM(fmri,
                                              paramobj={
                                              "sigmas": [c, c, c],
                                              "inmm": True,
                                              "radiusfactor": 1.5,
예제 #4
0
    def directInvokeAlgorithm(self, vals):
        print('oooo invoking: individualizedParcellation with vals', vals)

        debug = self.parseBoolean(vals['debug'])
        fmri = self.inputs['fmri']
        group = self.inputs['parc']

        if (fmri.hasSameOrientation(group, 'fMRI Image', 'Group Parcellation',
                                    True) == False):
            return False

        fmriDim = fmri.dimensions
        groupDim = group.dimensions

        # Reslice Group Parcellation if needed
        if (fmriDim[0] != groupDim[0] or fmriDim[1] != groupDim[1]
                or fmriDim[2] != groupDim[2]):
            print(
                '++++ \t Group parcellation being resliced to match the fMRI image dimension...'
            )
            resl_paramobj = {
                "interpolation": 0,
                "dimensions": fmri.dimensions,
                "spacing": fmri.spacing,
                "datatype": "short",
                "backgroundValue": 0.0,
            }

            matr = np.eye(4, dtype=np.float32)
            try:
                print(
                    '++++ Reslicing group parcellation to match dimensions of individual fmri image'
                )
                group = libbis.resliceImageWASM(group, matr, resl_paramobj,
                                                debug)
            except:
                e = sys.exc_info()[0]
                print('---- Failed to invoke algorithm', e)
                return False
            print('++++ \t Group parcellation dims=', group.dimensions)

        # Smooth If needed
        smooth = vals['smooth']
        if (smooth > 0.001):
            print('++++ \t Smoothing fMRI image...')
            c = smooth * 0.4247
            smooth_paramobj = {
                "sigmas": [c, c, c],
                "inmm": True,
                "radiusfactor": 1.5,
                "vtkboundary": True,
            }

            try:
                print('++++ Smoothing fmri Image')
                fmri = libbis.gaussianSmoothImageWASM(fmri, smooth_paramobj,
                                                      debug)
            except:
                e = sys.exc_info()[0]
                print('---- Failed to invoke algorithm', e)
                return False

        # Actual Parcellation
        paramobj = {
            'numberofexemplars': vals['numregions'],
            'usefloat': self.parseBoolean(vals['usefloat']),
            'saveexemplars': self.parseBoolean(vals['saveexemplars']),
        }
        try:
            self.outputs['output'] = libbis.individualizedParcellationWASM(
                fmri, group, paramobj, debug)
        except:
            e = sys.exc_info()[0]
            print('---- Failed to invoke algorithm', e)
            return False

        return True