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
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
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
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
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
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
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
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