Ejemplo n.º 1
0
def test_invwarp():
    base_dir = str(Path(__file__).parent / "examples")
    anat_dir = f"{base_dir}/003/anat"
    ref = f"{anat_dir}/sub-003_T1w.nii.gz"
    warp = f"{anat_dir}/highres2standard_warp"
    out = f"{anat_dir}/highres2standard_warp_inv.nii.gz"
    utils.inverse_warp(ref, out, warp)
    out_warp = nib.load(out)
    assert out_warp is not None
Ejemplo n.º 2
0
def test_invwarp():
    base_dir = os.path.abspath(
        pkg_resources.resource_filename("pynets", "../data/examples"))
    anat_dir = f"{base_dir}/003/anat"
    ref = f"{anat_dir}/sub-003_T1w.nii.gz"
    warp = f"{anat_dir}/highres2standard_warp"
    out = f"{anat_dir}/highres2standard_warp_inv.nii.gz"
    utils.inverse_warp(ref, out, warp)
    out_warp = nib.load(out)
    assert out_warp is not None
Ejemplo n.º 3
0
    def t1w2mni_align(self):
        """
        A function to perform alignment from T1w --> MNI template.
        """
        import time

        # Create linear transform/ initializer T1w-->MNI
        regutils.align(
            self.t1w_brain,
            self.input_mni_brain,
            xfm=self.t12mni_xfm_init,
            bins=None,
            interp="spline",
            out=None,
            dof=12,
            cost="mutualinfo",
            searchrad=True,
        )
        time.sleep(0.5)
        # Attempt non-linear registration of T1 to MNI template
        if self.simple is False:
            try:
                print(f"Learning a non-linear mapping from T1w --> "
                      f"{self.template_name} ...")
                # Use FNIRT to nonlinearly align T1 to MNI template
                regutils.align_nonlinear(
                    self.t1w_brain,
                    self.input_mni,
                    xfm=self.t12mni_xfm_init,
                    out=self.t1_aligned_mni,
                    warp=self.warp_t1w2mni,
                    ref_mask=self.input_mni_mask,
                )
                time.sleep(0.5)
                # Get warp from MNI -> T1
                regutils.inverse_warp(self.t1w_brain, self.mni2t1w_warp,
                                      self.warp_t1w2mni)
                time.sleep(0.5)
                # Get mat from MNI -> T1
                self.mni2t1_xfm = regutils.invert_xfm(self.t12mni_xfm_init,
                                                      self.mni2t1_xfm)
                time.sleep(0.5)
            except BaseException:
                # Falling back to linear registration
                regutils.align(
                    self.t1w_brain,
                    self.input_mni_brain,
                    xfm=self.mni2t1_xfm,
                    init=self.t12mni_xfm_init,
                    bins=None,
                    dof=12,
                    cost="mutualinfo",
                    searchrad=True,
                    interp="spline",
                    out=self.t1_aligned_mni,
                    sch=None,
                )
                time.sleep(0.5)
                # Get mat from MNI -> T1
                self.mni2t1_xfm = regutils.invert_xfm(self.t12mni_xfm,
                                                      self.mni2t1_xfm)
                time.sleep(0.5)
        else:
            # Falling back to linear registration
            regutils.align(
                self.t1w_brain,
                self.input_mni_brain,
                xfm=self.t12mni_xfm,
                init=self.t12mni_xfm_init,
                bins=None,
                dof=12,
                cost="mutualinfo",
                searchrad=True,
                interp="spline",
                out=self.t1_aligned_mni,
                sch=None,
            )
            time.sleep(0.5)
            # Get mat from MNI -> T1
            self.t12mni_xfm = regutils.invert_xfm(self.mni2t1_xfm,
                                                  self.t12mni_xfm)
            time.sleep(0.5)