Example #1
0
 def _run_interface(self, runtime):
     imdata = nb.load(self.inputs.in_file).get_data()
     airdata = nb.load(self.inputs.air_msk).get_data()
     qi2, out_file = art_qi2(imdata, airdata)
     self._results["qi2"] = qi2
     self._results["out_file"] = out_file
     return runtime
Example #2
0
 def _run_interface(self, runtime):
     imdata = nb.load(self.inputs.in_file).get_data()
     airdata = nb.load(self.inputs.air_msk).get_data()
     qi2, out_file = art_qi2(imdata,
                             airdata,
                             ncoils=self.inputs.ncoils,
                             erodemask=self.inputs.erodemsk)
     self._results['qi2'] = qi2
     self._results['out_file'] = out_file
     return runtime
Example #3
0
def test_artifacts(brainweb):
    data = op.join(get_brainweb_1mm_normal(), 'sub-normal01')
    airdata = nb.load(op.join(get_brainweb_1mm_normal(), 'derivatives',
                              'volume_fraction_bck.nii.gz')).get_data()

    fname = op.join(data, brainweb.split('_')[1], 'anat', brainweb)
    imdata = nb.load(fname).get_data().astype(np.float32)

    value, _ = art_qi2(imdata[::4,::4,::4], airdata[::4,::4,::4])
    assert value > .0 and value <= 1
Example #4
0
def test_artifacts(brainweb):
    data = op.join(get_brainweb_1mm_normal(), 'sub-normal01')
    airdata = nb.load(
        op.join(get_brainweb_1mm_normal(), 'derivatives',
                'volume_fraction_bck.nii.gz')).get_data()

    fname = op.join(data, brainweb.split('_')[1], 'anat', brainweb)
    imdata = nb.load(fname).get_data().astype(np.float32)

    value = art_qi2(imdata, airdata, save_figure=False)
    assert value > .0 and value <= 1
Example #5
0
def test_qi2(gtruth, sigma):
    tmpdir = mkdtemp()
    data, _, bgdata = gtruth.get_data(sigma, rice)
    value, _ = art_qi2(data, bgdata, out_file=op.join(tmpdir, 'qi2.txt'))
    rmtree(tmpdir)
    assert value > .0 and value < 0.003
Example #6
0
    def _run_interface(self, runtime):  # pylint: disable=R0914
        imnii = nb.load(self.inputs.in_file)
        imdata = np.nan_to_num(imnii.get_data())
        erode = np.all(np.array(imnii.get_header().get_zooms()[:3],
                                dtype=np.float32) < 1.2)

        # Cast to float32
        imdata = imdata.astype(np.float32)

        # Remove negative values
        imdata[imdata < 0] = 0

        # Load image corrected for INU
        inudata = np.nan_to_num(nb.load(self.inputs.in_noinu).get_data())
        inudata[inudata < 0] = 0

        segnii = nb.load(self.inputs.in_segm)
        segdata = segnii.get_data().astype(np.uint8)

        airdata = nb.load(self.inputs.air_msk).get_data().astype(np.uint8)
        artdata = nb.load(self.inputs.artifact_msk).get_data().astype(np.uint8)

        # SNR
        snrvals = []
        self._results['snr'] = {}
        for tlabel in ['csf', 'wm', 'gm']:
            snrvals.append(snr(inudata, segdata, airdata, fglabel=tlabel,
                               erode=erode))
            self._results['snr'][tlabel] = snrvals[-1]
        self._results['snr']['total'] = float(np.mean(snrvals))

        # CNR
        self._results['cnr'] = cnr(inudata, segdata)

        # FBER
        self._results['fber'] = fber(inudata, segdata, airdata)

        # EFC
        self._results['efc'] = efc(inudata)

        # Artifacts
        self._results['qi1'] = art_qi1(airdata, artdata)
        qi2, bg_plot = art_qi2(imdata, airdata, ncoils=self.inputs.ncoils)
        self._results['qi2'] = qi2
        self._results['out_noisefit'] = bg_plot

        # CJV
        self._results['cjv'] = cjv(inudata, seg=segdata)

        pvmdata = []
        for fname in self.inputs.in_pvms:
            pvmdata.append(nb.load(fname).get_data().astype(np.float32))

        # ICVs
        self._results['icvs'] = volume_fraction(pvmdata)

        # RPVE
        self._results['rpve'] = rpve(pvmdata, segdata)

        # Summary stats
        mean, stdv, p95, p05 = summary_stats(imdata, pvmdata)
        self._results['summary'] = {'mean': mean, 'stdv': stdv,
                                    'p95': p95, 'p05': p05}

        # Image specs
        self._results['size'] = {'x': int(imdata.shape[0]),
                                 'y': int(imdata.shape[1]),
                                 'z': int(imdata.shape[2])}
        self._results['spacing'] = {
            i: float(v) for i, v in zip(
                ['x', 'y', 'z'], imnii.get_header().get_zooms()[:3])}

        try:
            self._results['size']['t'] = int(imdata.shape[3])
        except IndexError:
            pass

        try:
            self._results['spacing']['tr'] = float(imnii.get_header().get_zooms()[3])
        except IndexError:
            pass

        # Bias
        bias = nb.load(self.inputs.in_bias).get_data()[segdata > 0]
        self._results['inu'] = {
            'range': float(np.abs(np.percentile(bias, 95.) - np.percentile(bias, 5.))),
            'med': float(np.median(bias))}  #pylint: disable=E1101


        # Flatten the dictionary
        self._results['out_qc'] = _flatten_dict(self._results)
        return runtime
Example #7
0
    def _run_interface(self, runtime):  # pylint: disable=R0914
        imnii = nb.load(self.inputs.in_file)
        imdata = np.nan_to_num(imnii.get_data())
        erode = np.all(np.array(imnii.get_header().get_zooms()[:3], dtype=np.float32) < 1.2)

        # Cast to float32
        imdata = imdata.astype(np.float32)

        # Remove negative values
        imdata[imdata < 0] = 0

        # Load image corrected for INU
        inudata = np.nan_to_num(nb.load(self.inputs.in_noinu).get_data())
        inudata[inudata < 0] = 0

        segnii = nb.load(self.inputs.in_segm)
        segdata = segnii.get_data().astype(np.uint8)

        airdata = nb.load(self.inputs.air_msk).get_data().astype(np.uint8)
        artdata = nb.load(self.inputs.artifact_msk).get_data().astype(np.uint8)
        headdata = nb.load(self.inputs.head_msk).get_data().astype(np.uint8)

        # SNR
        snrvals = []
        self._results["snr"] = {}
        for tlabel in ["csf", "wm", "gm"]:
            snrvals.append(snr(inudata, segdata, fglabel=tlabel, erode=erode))
            self._results["snr"][tlabel] = snrvals[-1]
        self._results["snr"]["total"] = float(np.mean(snrvals))

        # CNR
        self._results["cnr"] = cnr(inudata, segdata)

        # FBER
        self._results["fber"] = fber(inudata, headdata)

        # EFC
        self._results["efc"] = efc(inudata)

        # M2WM
        self._results["wm2max"] = wm2max(imdata, segdata)

        # Artifacts
        self._results["qi1"] = art_qi1(airdata, artdata)
        qi2, bg_plot = art_qi2(imdata, airdata, ncoils=self.inputs.ncoils, erodemask=not self.inputs.testing)
        self._results["qi2"] = qi2
        self._results["out_noisefit"] = bg_plot

        # CJV
        self._results["cjv"] = cjv(inudata, seg=segdata)

        pvmdata = []
        for fname in self.inputs.in_pvms:
            pvmdata.append(nb.load(fname).get_data().astype(np.float32))

        # ICVs
        self._results["icvs"] = volume_fraction(pvmdata)

        # RPVE
        self._results["rpve"] = rpve(pvmdata, segdata)

        # Summary stats
        mean, stdv, p95, p05 = summary_stats(imdata, pvmdata)
        self._results["summary"] = {"mean": mean, "stdv": stdv, "p95": p95, "p05": p05}

        # Image specs
        self._results["size"] = {"x": int(imdata.shape[0]), "y": int(imdata.shape[1]), "z": int(imdata.shape[2])}
        self._results["spacing"] = {i: float(v) for i, v in zip(["x", "y", "z"], imnii.get_header().get_zooms()[:3])}

        try:
            self._results["size"]["t"] = int(imdata.shape[3])
        except IndexError:
            pass

        try:
            self._results["spacing"]["tr"] = float(imnii.get_header().get_zooms()[3])
        except IndexError:
            pass

        # Bias
        bias = nb.load(self.inputs.in_bias).get_data()[segdata > 0]
        self._results["inu"] = {
            "range": float(np.abs(np.percentile(bias, 95.0) - np.percentile(bias, 5.0))),
            "med": float(np.median(bias)),
        }  # pylint: disable=E1101

        mni_tpms = [nb.load(tpm).get_data() for tpm in self.inputs.mni_tpms]
        in_tpms = [nb.load(tpm).get_data() for tpm in self.inputs.in_pvms]
        overlap = fuzzy_jaccard(in_tpms, mni_tpms)
        self._results["tpm_overlap"] = {"csf": overlap[0], "gm": overlap[1], "wm": overlap[2]}

        # Flatten the dictionary
        self._results["out_qc"] = _flatten_dict(self._results)
        return runtime
Example #8
0
File: qc.py Project: suyashdb/mriqc
    def _run_interface(self, runtime):  # pylint: disable=R0914
        imnii = nb.load(self.inputs.in_file)
        imdata = np.nan_to_num(imnii.get_data())
        erode = np.all(
            np.array(imnii.get_header().get_zooms()[:3], dtype=np.float32) <
            1.2)

        # Cast to float32
        imdata = imdata.astype(np.float32)

        # Remove negative values
        imdata[imdata < 0] = 0

        # Load image corrected for INU
        inudata = np.nan_to_num(nb.load(self.inputs.in_noinu).get_data())
        inudata[inudata < 0] = 0

        segnii = nb.load(self.inputs.in_segm)
        segdata = segnii.get_data().astype(np.uint8)

        airdata = nb.load(self.inputs.air_msk).get_data().astype(np.uint8)
        artdata = nb.load(self.inputs.artifact_msk).get_data().astype(np.uint8)

        # SNR
        snrvals = []
        self._results['snr'] = {}
        for tlabel in ['csf', 'wm', 'gm']:
            snrvals.append(snr(inudata, segdata, fglabel=tlabel, erode=erode))
            self._results['snr'][tlabel] = snrvals[-1]
        self._results['snr']['total'] = float(np.mean(snrvals))

        # CNR
        self._results['cnr'] = cnr(inudata, segdata)

        # FBER
        self._results['fber'] = fber(inudata, segdata, airdata)

        # EFC
        self._results['efc'] = efc(inudata)

        # M2WM
        self._results['wm2max'] = wm2max(imdata, segdata)

        # Artifacts
        self._results['qi1'] = art_qi1(airdata, artdata)
        qi2, bg_plot = art_qi2(imdata,
                               airdata,
                               ncoils=self.inputs.ncoils,
                               erodemask=not self.inputs.testing)
        self._results['qi2'] = qi2
        self._results['out_noisefit'] = bg_plot

        # CJV
        self._results['cjv'] = cjv(inudata, seg=segdata)

        pvmdata = []
        for fname in self.inputs.in_pvms:
            pvmdata.append(nb.load(fname).get_data().astype(np.float32))

        # ICVs
        self._results['icvs'] = volume_fraction(pvmdata)

        # RPVE
        self._results['rpve'] = rpve(pvmdata, segdata)

        # Summary stats
        mean, stdv, p95, p05 = summary_stats(imdata, pvmdata)
        self._results['summary'] = {
            'mean': mean,
            'stdv': stdv,
            'p95': p95,
            'p05': p05
        }

        # Image specs
        self._results['size'] = {
            'x': int(imdata.shape[0]),
            'y': int(imdata.shape[1]),
            'z': int(imdata.shape[2])
        }
        self._results['spacing'] = {
            i: float(v)
            for i, v in zip(['x', 'y', 'z'],
                            imnii.get_header().get_zooms()[:3])
        }

        try:
            self._results['size']['t'] = int(imdata.shape[3])
        except IndexError:
            pass

        try:
            self._results['spacing']['tr'] = float(
                imnii.get_header().get_zooms()[3])
        except IndexError:
            pass

        # Bias
        bias = nb.load(self.inputs.in_bias).get_data()[segdata > 0]
        self._results['inu'] = {
            'range':
            float(np.abs(np.percentile(bias, 95.) - np.percentile(bias, 5.))),
            'med':
            float(np.median(bias))
        }  #pylint: disable=E1101

        # Flatten the dictionary
        self._results['out_qc'] = _flatten_dict(self._results)
        return runtime