Esempio n. 1
0
 def __freesurferToDWITransformation(self, source, reference, extraArgs):
     dwiToFreesurferMatrix = "dwiToFreesurfer_transformation.mat"
     freesurferToDWIMatrix = "freesurferToDWI_transformation.mat"
     cmd = "flirt -in {} -ref {} -omat {} {}".format(source, reference, dwiToFreesurferMatrix, extraArgs)
     self.launchCommand(cmd)
     mriutil.invertMatrix(dwiToFreesurferMatrix, freesurferToDWIMatrix)
     return freesurferToDWIMatrix
Esempio n. 2
0
 def __freesurferToDWITransformation(self, source, reference, extraArgs):
     dwiToFreesurferMatrix = "dwiToFreesurfer_transformation.mat"
     freesurferToDWIMatrix = "freesurferToDWI_transformation.mat"
     cmd = "flirt -in {} -ref {} -omat {} {}".format(
         source, reference, dwiToFreesurferMatrix, extraArgs)
     self.launchCommand(cmd)
     mriutil.invertMatrix(dwiToFreesurferMatrix, freesurferToDWIMatrix)
     return freesurferToDWIMatrix
Esempio n. 3
0
    def __computeFieldmap(self, dwi, bVals, mag, phase, norm, parcellationMask, freesurferAnat):

        # extract a b0 from the dwi image
        b0 = os.path.join(self.workingDir, os.path.basename(dwi).replace(self.get("prefix", 'dwi'), "b0_fieldmap_tmp"))
        self.info(mriutil.extractFirstB0FromDwi(dwi, b0, bVals))

        self.info("rescaling the phase image")
        phaseRescale = self.__rescaleFieldMap(phase)

        self.info('Coregistring magnitude image with the anatomical image produce by freesurfer')
        fieldmapToAnat = self.__coregisterFieldmapToAnat(mag, freesurferAnat)

        extraArgs = " -dof 6 "
        if self.get("methodology", "intrasession"):
            extraArgs += " -usesqform  -dof 6"

        interpolateMask, fm2anat, anat2fm = mriutil.computeDwiMaskFromFreesurfer(
            mag,
            norm,
            parcellationMask,
            self.buildName(parcellationMask, 'interpolate'),
            extraArgs)

        self.info('Resampling the anatomical mask into the phase image space')
        # interpolateMask = self.__interpolateAnatMaskToFieldmap(anat, phaseRescale, invertFielmapToAnat, mask)
        fieldmap = self.__computePhaseFieldmap(phaseRescale, interpolateMask)

        self.info('Generate a lossy magnitude file with signal loss and distortion')
        lossy = self.__simulateLossyMap(fieldmap, interpolateMask)

        magnitudeMask = self.__computeMap(mag, interpolateMask, 'brain')
        lossyMagnitude = self.__computeMap(magnitudeMask, lossy, 'lossy')

        warped = self.__computeForwardDistorsion(fieldmap, lossyMagnitude, interpolateMask)

        self.info('Coregister the simulated lossy fieldmap with the EPI')
        matrixName = self.get("epiTo_b0fm")
        self.__coregisterEpiLossyMap(b0, warped, matrixName, lossy)

        self.info('Reslice magnitude and fieldmap in the EPI space')
        invertMatrixName = self.buildName(matrixName, 'inverse', 'mat')
        self.info(mriutil.invertMatrix(matrixName, invertMatrixName))
        magnitudeIntoDwiSpace = self.__interpolateFieldmapInEpiSpace(warped, b0, invertMatrixName)
        magnitudeIntoDwiSpaceMask = self.__mask(parcellationMask, b0, anat2fm, invertMatrixName)
        interpolateFieldmap = self.__interpolateFieldmapInEpiSpace(fieldmap, b0, invertMatrixName)
        self.info('Create the shift map')
        saveshift = self.__performDistortionCorrection(b0, interpolateFieldmap, magnitudeIntoDwiSpaceMask)

        self.info('Perform distortion correction of EPI data')
        dwiUnwarp = self.__performDistortionCorrectionToDWI(dwi, magnitudeIntoDwiSpaceMask, saveshift)

        return dwiUnwarp
Esempio n. 4
0
    def __computeFieldmap(self, dwi, bVals, mag, phase, norm, parcellationMask,
                          freesurferAnat):

        # extract a b0 from the dwi image
        b0 = os.path.join(
            self.workingDir,
            os.path.basename(dwi).replace(self.get("prefix", 'dwi'),
                                          "b0_fieldmap_tmp"))
        self.info(mriutil.extractFirstB0FromDwi(dwi, b0, bVals))

        self.info("rescaling the phase image")
        phaseRescale = self.__rescaleFieldMap(phase)

        self.info(
            'Coregistring magnitude image with the anatomical image produce by freesurfer'
        )
        fieldmapToAnat = self.__coregisterFieldmapToAnat(mag, freesurferAnat)

        extraArgs = " -dof 6 "
        if self.get("methodology", "intrasession"):
            extraArgs += " -usesqform  -dof 6"

        interpolateMask = mriutil.computeDwiMaskFromFreesurfer(
            mag, norm, parcellationMask,
            self.buildName(parcellationMask, 'interpolate'), extraArgs)

        self.info('Resampling the anatomical mask into the phase image space')
        # interpolateMask = self.__interpolateAnatMaskToFieldmap(anat, phaseRescale, invertFielmapToAnat, mask)
        fieldmap = self.__computePhaseFieldmap(phaseRescale, interpolateMask)

        self.info(
            'Generate a lossy magnitude file with signal loss and distortion')
        lossy = self.__simulateLossyMap(fieldmap, interpolateMask)

        magnitudeMask = self.__computeMap(mag, interpolateMask, 'brain')
        lossyMagnitude = self.__computeMap(magnitudeMask, lossy, 'lossy')

        warped = self.__computeForwardDistorsion(fieldmap, lossyMagnitude,
                                                 interpolateMask)

        self.info('Coregister the simulated lossy fieldmap with the EPI')
        matrixName = self.get("epiTo_b0fm")
        self.__coregisterEpiLossyMap(b0, warped, matrixName, lossy)

        self.info('Reslice magnitude and fieldmap in the EPI space')
        invertMatrixName = self.buildName(matrixName, 'inverse', 'mat')
        self.info(mriutil.invertMatrix(matrixName, invertMatrixName))
        magnitudeIntoDwiSpace = self.__interpolateFieldmapInEpiSpace(
            warped, b0, invertMatrixName)
        magnitudeIntoDwiSpaceMask = self.__mask(magnitudeIntoDwiSpace)
        interpolateFieldmap = self.__interpolateFieldmapInEpiSpace(
            fieldmap, b0, invertMatrixName)
        self.info('Create the shift map')
        saveshift = self.__performDistortionCorrection(
            b0, interpolateFieldmap, magnitudeIntoDwiSpaceMask)

        self.info('Perform distortion correction of EPI data')
        dwiUnwarp = self.__performDistortionCorrectionToDWI(
            dwi, magnitudeIntoDwiSpaceMask, saveshift)

        return dwiUnwarp