Ejemplo n.º 1
0
 def regAndResample(self, inputFH, i, filesToAvg, nlinFH):
     """For last generation, override default output names. 
        Note that the defaultDir specified in the minctracc call
        is ignored in this instance. """
     if i == (self.generations - 1):
         if not self.useGradient[i]:
             firstRegOutput, resampleOutput = finalGenerationFileNames(
                 inputFH)
         else:
             firstRegOutput = None
             registerOutput, resampleOutput = finalGenerationFileNames(
                 inputFH)
     else:
         firstRegOutput = None
         registerOutput = None
         resampleOutput = None
     """If self.useGradient is True, then we call minctracc twice: once
         with a gradient and once without. Otherwise, we call only once
         without a gradient. """
     mta = minctracc(inputFH,
                     self.target,
                     defaultDir="tmp",
                     output=firstRegOutput,
                     blur=self.blurs[i],
                     gradient=False,
                     iterations=self.iterations[i],
                     step=self.stepSize[i],
                     weight=0.8,
                     stiffness=0.98,
                     similarity=0.8,
                     w_translations=self.w_translations[i],
                     simplex=self.simplex[i])
     self.p.addStage(mta)
     if self.useGradient[i]:
         mtb = minctracc(inputFH,
                         self.target,
                         output=registerOutput,
                         defaultDir="tmp",
                         blur=self.blurs[i],
                         gradient=True,
                         iterations=self.iterations[i],
                         step=self.stepSize[i],
                         weight=0.8,
                         stiffness=0.98,
                         similarity=0.8,
                         simplex=self.simplex[i])
         self.p.addStage(mtb)
         """Need to set last xfm so that next generation will use it as the input transform"""
         inputFH.setLastXfm(nlinFH, mtb.outputFiles[0])
     rs = mincresample(inputFH,
                       self.target,
                       likeFile=self.target,
                       output=resampleOutput,
                       defaultDir="tmp",
                       argArray=["-sinc"])
     #Do we need to resample any masks?
     filesToAvg.append(rs.outputFiles[0])
     self.p.addStage(rs)
     if i == (self.generations - 1):
         inputFH.setLastBasevol(newBaseVol=rs.outputFiles[0])
Ejemplo n.º 2
0
 def regAndResample(self, inputFH, i, filesToAvg, nlinFH):
     """For last generation, override default output names. 
        Note that the defaultDir specified in the minctracc call
        is ignored in this instance. """
     if i == (self.generations -1):
         if not self.useGradient[i]:
             firstRegOutput, resampleOutput = finalGenerationFileNames(inputFH)
         else:
             firstRegOutput = None
             registerOutput, resampleOutput = finalGenerationFileNames(inputFH)
     else:
         firstRegOutput = None
         registerOutput = None
         resampleOutput = None
     """If self.useGradient is True, then we call minctracc twice: once
         with a gradient and once without. Otherwise, we call only once
         without a gradient. """
     mta = minctracc(inputFH, 
                     self.target, 
                     defaultDir="tmp",
                     output=firstRegOutput, 
                     blur=self.blurs[i],
                     gradient=False,
                     iterations=self.iterations[i],
                     step=self.stepSize[i],
                     weight=self.weight[i], 
                     stiffness=self.stiffness[i],
                     similarity=self.similarity[i],
                     w_translations = self.w_translations[i],
                     simplex=self.simplex[i])
     self.p.addStage(mta)
     if self.useGradient[i]:
         mtb = minctracc(inputFH, 
                         self.target, 
                         output=registerOutput,
                         defaultDir="tmp", 
                         blur=self.blurs[i],
                         gradient=True,
                         iterations=self.iterations[i],
                         step=self.stepSize[i],
                         weight=self.weight[i], 
                         stiffness=self.stiffness[i],
                         similarity=self.similarity[i],
                         simplex=self.simplex[i])
         self.p.addStage(mtb)
         """Need to set last xfm so that next generation will use it as the input transform"""
         inputFH.setLastXfm(nlinFH, mtb.outputFiles[0])
     rs = mincresample(inputFH, 
                       self.target, 
                       likeFile=self.target, 
                       output=resampleOutput,
                       defaultDir="tmp", 
                       argArray=["-sinc"])
     #Do we need to resample any masks?
     filesToAvg.append(rs.outputFiles[0])
     self.p.addStage(rs)
     if i == (self.generations -1):
         inputFH.setLastBasevol(newBaseVol=rs.outputFiles[0])
Ejemplo n.º 3
0
 def buildPipeline(self):
     for i in range(len(self.blurs)):    
         linearStage = ma.minctracc(self.inputFH, 
                                    self.targetFH, 
                                    blur=self.blurs[i], 
                                    defaultDir=self.defaultDir,
                                    gradient=self.gradient[i],                                     
                                    linearparam="lsq12",
                                    step=self.step[i],
                                    simplex=self.simplex[i])
         self.p.addStage(linearStage)
Ejemplo n.º 4
0
 def buildPipeline(self):
     for i in range(len(self.blurs)):
         linearStage = ma.minctracc(self.inputFH,
                                    self.targetFH,
                                    blur=self.blurs[i],
                                    defaultDir=self.defaultDir,
                                    gradient=self.gradient[i],
                                    linearparam="lsq12",
                                    step=self.step[i],
                                    w_translations=self.w_translations[i],
                                    simplex=self.simplex[i])
         self.p.addStage(linearStage)
Ejemplo n.º 5
0
 def __init__(self, 
              inputPipeFH, 
              templatePipeFH,
              steps=[1,0.5,0.5,0.2,0.2,0.1],
              blurs=[0.25,0.25,0.25,0.25,0.25, -1], 
              gradients=[False, False, True, False, True, False],
              iterations=[60,60,60,10,10,4],
              simplexes=[3,3,3,1.5,1.5,1],
              w_translations=0.2,
              linearparams = {'type' : "lsq12", 'simplex' : 1, 'step' : 1}, 
              defaultDir="tmp"):
     
     self.p = Pipeline()
     
     for b in blurs:
         #MF TODO: -1 case is also handled in blur. Need here for addStage.
         #Fix this redundancy and/or better design?
         if b != -1:
             tblur = ma.blur(templatePipeFH, b, gradient=True)
             iblur = ma.blur(inputPipeFH, b, gradient=True)               
             self.p.addStage(tblur)
             self.p.addStage(iblur)
         
     # Do standard LSQ12 alignment prior to non-linear stages 
     lsq12reg = lsq12.LSQ12(inputPipeFH, 
                            templatePipeFH, 
                            defaultDir=defaultDir)
     self.p.addPipeline(lsq12reg.p)
     
     # create the nonlinear registrations
     for i in range(len(steps)):
         """For the final stage, make sure the output directory is transforms."""
         if i == (len(steps) - 1):
             defaultDir = "transforms"
         nlinStage = ma.minctracc(inputPipeFH, 
                                  templatePipeFH,
                                  defaultDir=defaultDir,
                                  blur=blurs[i],
                                  gradient=gradients[i],
                                  iterations=iterations[i],
                                  step=steps[i],
                                  similarity=0.8,
                                  w_translations=w_translations,
                                  simplex=simplexes[i])
         self.p.addStage(nlinStage)
Ejemplo n.º 6
0
    def buildPipeline(self):

        # Do LSQ12 alignment prior to non-linear stages if desired
        if self.includeLinear:
            self.lsq12Params = mp.setLSQ12MinctraccParams(
                self.fileRes,
                subject_matter=self.subject_matter,
                reg_protocol=self.lsq12_protocol)
            lsq12reg = lsq12.LSQ12(
                self.inputFH,
                self.targetFH,
                blurs=self.lsq12Params.blurs,
                step=self.lsq12Params.stepSize,
                gradient=self.lsq12Params.useGradient,
                simplex=self.lsq12Params.simplex,
                w_translations=self.lsq12Params.w_translations,
                defaultDir=self.defaultDir)
            self.p.addPipeline(lsq12reg.p)

        # create the nonlinear registrations
        self.nlinParams = mp.setNlinMinctraccParams(
            self.fileRes, reg_protocol=self.nlin_protocol)
        for b in self.nlinParams.blurs:
            if b != -1:
                self.p.addStage(ma.blur(self.inputFH, b, gradient=True))
                self.p.addStage(ma.blur(self.targetFH, b, gradient=True))
        for i in range(len(self.nlinParams.stepSize)):
            #For the final stage, make sure the output directory is transforms.
            if i == (len(self.nlinParams.stepSize) - 1):
                self.defaultDir = "transforms"
            nlinStage = ma.minctracc(
                self.inputFH,
                self.targetFH,
                defaultDir=self.defaultDir,
                blur=self.nlinParams.blurs[i],
                gradient=self.nlinParams.useGradient[i],
                iterations=self.nlinParams.iterations[i],
                step=self.nlinParams.stepSize[i],
                w_translations=self.nlinParams.w_translations[i],
                simplex=self.nlinParams.simplex[i],
                optimization=self.nlinParams.optimization[i])
            self.p.addStage(nlinStage)
Ejemplo n.º 7
0
 def buildPipeline(self):
         
     # Do LSQ12 alignment prior to non-linear stages if desired
     if self.includeLinear: 
         self.lsq12Params = mp.setLSQ12MinctraccParams(self.fileRes,
                                         subject_matter=self.subject_matter,
                                         reg_protocol=self.lsq12_protocol)
         lsq12reg = lsq12.LSQ12(self.inputFH, 
                                self.targetFH, 
                                blurs=self.lsq12Params.blurs,
                                step=self.lsq12Params.stepSize,
                                gradient=self.lsq12Params.useGradient,
                                simplex=self.lsq12Params.simplex,
                                w_translations=self.lsq12Params.w_translations,
                                defaultDir=self.defaultDir)
         self.p.addPipeline(lsq12reg.p)
     
     # create the nonlinear registrations
     self.nlinParams = mp.setNlinMinctraccParams(self.fileRes, reg_protocol=self.nlin_protocol)
     for b in self.nlinParams.blurs: 
         if b != -1:           
             self.p.addStage(ma.blur(self.inputFH, b, gradient=True))
             self.p.addStage(ma.blur(self.targetFH, b, gradient=True))
     for i in range(len(self.nlinParams.stepSize)):
         #For the final stage, make sure the output directory is transforms.
         if i == (len(self.nlinParams.stepSize) - 1):
             self.defaultDir = "transforms"
         nlinStage = ma.minctracc(self.inputFH, 
                                  self.targetFH,
                                  defaultDir=self.defaultDir,
                                  blur=self.nlinParams.blurs[i],
                                  gradient=self.nlinParams.useGradient[i],
                                  iterations=self.nlinParams.iterations[i],
                                  step=self.nlinParams.stepSize[i],
                                  w_translations=self.nlinParams.w_translations[i],
                                  simplex=self.nlinParams.simplex[i],
                                  memory=self.nlinParams.memory[i] if self.nlinParams.memory else None,
                                  optimization=self.nlinParams.optimization[i])
         self.p.addStage(nlinStage)
Ejemplo n.º 8
0
 def regAndResample(self, inputFH, i, filesToAvg, nlinFH):
     """For last generation, override default output names. 
        Note that the defaultDir specified in the minctracc call
        is ignored in this instance. """
     if i == (self.generations -1):
         if not self.useGradient[i]:
             firstRegOutput, resampleOutput = finalGenerationFileNames(inputFH)
         else:
             firstRegOutput = None
             registerOutput, resampleOutput = finalGenerationFileNames(inputFH)
     else:
         firstRegOutput = None
         #registerOutput = None
         resampleOutput = None
     """ In order to make the behavior of different modules / registration
         methods work in the same manner, the self.useGradient variable
         will determine what the blurring kernel needs to be applied on:
         either the image intensities (if self.useGradient = False),
         or     the image gradients   (if self.useGradient = True).
     """
     useGradients = self.useGradient[i]
     mta = minctracc(inputFH, 
                     self.target, 
                     defaultDir="tmp",
                     output=firstRegOutput, 
                     blur=self.blurs[i],
                     gradient=useGradients,
                     iterations=self.iterations[i],
                     step=self.stepSize[i],
                     weight=self.weight[i], 
                     stiffness=self.stiffness[i],
                     similarity=self.similarity[i],
                     w_translations = self.w_translations[i],
                     simplex=self.simplex[i],
                     memory=self.memory[i])
     self.p.addStage(mta)
     # after each registration stage, we have to update
     # the last transformation between the nlinFH and the input file
     # TODO: we should definitely do something about this. This 
     # assignment below is very cryptic (what is this nlinFH??), but
     # I assume that with the new file handler classes coming up, this
     # will all become more clear. 
     inputFH.setLastXfm(nlinFH, mta.outputFiles[0])
      
     
     #if self.useGradient[i]:
     #    mtb = minctracc(inputFH, 
     #                    self.target, 
     #                    output=registerOutput,
     #                    defaultDir="tmp", 
     #                    blur=self.blurs[i],
     #                    gradient=True,
     #                    iterations=self.iterations[i],
     #                    step=self.stepSize[i],
     #                    weight=self.weight[i], 
     #                    stiffness=self.stiffness[i],
     #                    similarity=self.similarity[i],
     #                    simplex=self.simplex[i])
     #    self.p.addStage(mtb)
     #    """Need to set last xfm so that next generation will use it as the input transform"""
     #    inputFH.setLastXfm(nlinFH, mtb.outputFiles[0])
     rs = mincresample(inputFH, 
                       self.target, 
                       likeFile=self.target, 
                       output=resampleOutput,
                       defaultDir="tmp", 
                       argArray=["-sinc"])
     #Do we need to resample any masks?
     filesToAvg.append(rs.outputFiles[0])
     self.p.addStage(rs)
     if i == (self.generations -1):
         inputFH.setLastBasevol(newBaseVol=rs.outputFiles[0])