コード例 #1
0
    def _save_current_image(self, image_out, resize_to):
        if self.input_image is None:
            return
        window_shape = resize_to
        while image_out.ndim < 5:
            image_out = image_out[..., np.newaxis, :]
        if self.window_border and any([b > 0 for b in self.window_border]):
            np_border = self.window_border
            while len(np_border) < 5:
                np_border = np_border + (0, )
            np_border = [(b, ) for b in np_border]
            image_out = np.pad(image_out, np_border, mode='edge')
        image_shape = image_out.shape
        zoom_ratio = \
            [float(p) / float(d) for p, d in zip(window_shape, image_shape)]
        image_shape = list(image_shape[:3]) + [1, image_shape[-1]]
        image_out = np.reshape(image_out, image_shape)
        image_out = zoom_3d(image=image_out,
                            ratio=zoom_ratio,
                            interp_order=self.output_interp_order)

        for layer in reversed(self.reader.preprocessors):
            if isinstance(layer, PadLayer):
                image_out, _ = layer.inverse_op(image_out)
            if isinstance(layer, DiscreteLabelNormalisationLayer):
                image_out, _ = layer.inverse_op(image_out)
        subject_name = self.reader.get_subject_id(self.image_id)
        filename = "{}{}.nii.gz".format(subject_name, self.postfix)
        source_image_obj = self.input_image[self.name]
        misc_io.save_data_array(self.output_path, filename, image_out,
                                source_image_obj, self.output_interp_order)
        self.log_inferred(subject_name, filename)
        return
コード例 #2
0
 def _save_current_image(self, idx, filename, image):
     if image is None:
         return
     uniq_name = "{}_{}{}.nii.gz".format(idx, filename, self.prefix)
     misc_io.save_data_array(self.output_path, uniq_name, image, None)
     with open(self.inferred_csv, 'a') as csv_file:
         filename = os.path.join(self.output_path, filename)
         csv_file.write('{},{}\n'.format(idx, uniq_name))
     return
コード例 #3
0
 def _save_current_image(self, idx, filename, image):
     if image is None:
         return
     uniq_name = "{}_{}{}.nii.gz".format(idx, filename, self.prefix)
     misc_io.save_data_array(self.output_path, uniq_name, image, None)
     with open(self.inferred_csv, 'a') as csv_file:
         filename = os.path.join(self.output_path, filename)
         csv_file.write('{},{}\n'.format(idx, uniq_name))
     return
コード例 #4
0
    def _save_current_image(self):
        """
        Loop through the dictionary of images output and resize and reverse
        the preprocessing prior to saving
        :return:
        """
        if self.input_image is None:
            return

        self.current_out = {}
        for i in self.image_out:
            resize_to_shape = self._initialise_image_shape(
                image_id=self.image_id, n_channels=self.image_out[i].shape[-1])
            window_shape = resize_to_shape
            current_out = self.image_out[i]
            while current_out.ndim < 5:
                current_out = current_out[..., np.newaxis, :]
            if self.window_border and any([b > 0 for b in self.window_border]):
                np_border = self.window_border
                while len(np_border) < 5:
                    np_border = np_border + (0, )
                np_border = [(b, ) for b in np_border]
                current_out = np.pad(current_out, np_border, mode='edge')
            image_shape = current_out.shape
            zoom_ratio = \
                [float(p) / float(d) for p, d in zip(window_shape, image_shape)]
            image_shape = list(image_shape[:3]) + [1, image_shape[-1]]
            current_out = np.reshape(current_out, image_shape)
            current_out = zoom_3d(
                image=current_out,
                ratio=zoom_ratio,
                interp_order=self.output_interp_order)
            self.current_out[i] = current_out

        for layer in reversed(self.reader.preprocessors):
            if isinstance(layer, PadLayer):
                for i in self.image_out:
                    self.current_out[i], _ = layer.inverse_op(
                        self.current_out[i])
            if isinstance(layer, DiscreteLabelNormalisationLayer):
                for i in self.image_out:
                    self.image_out[i], _ = layer.inverse_op(self.image_out[i])
        subject_name = self.reader.get_subject_id(self.image_id)
        for i in self.image_out:
            filename = "{}_{}_{}.nii.gz".format(i, subject_name, self.postfix)
            source_image_obj = self.input_image[self.name]
            misc_io.save_data_array(self.output_path, filename,
                                    self.current_out[i], source_image_obj,
                                    self.output_interp_order)
            self.log_inferred(subject_name, filename)
        return
コード例 #5
0
    def _save_current_image(self):
        if self.input_image is None:
            return

        for layer in reversed(self.reader.preprocessors):
            if isinstance(layer, PadLayer):
                self.image_out, _ = layer.inverse_op(self.image_out)
            if isinstance(layer, DiscreteLabelNormalisationLayer):
                self.image_out, _ = layer.inverse_op(self.image_out)
        subject_name = self.reader.get_subject_id(self.image_id)
        filename = "{}_niftynet_out.nii.gz".format(subject_name)
        source_image_obj = self.input_image[self.name]
        misc_io.save_data_array(self.output_path, filename, self.image_out,
                                source_image_obj, self.output_interp_order)
        return
コード例 #6
0
    def _save_current_image(self):
        if self.input_image is None:
            return

        for layer in reversed(self.reader.preprocessors):
            if isinstance(layer, PadLayer):
                self.image_out, _ = layer.inverse_op(self.image_out)
            if isinstance(layer, DiscreteLabelNormalisationLayer):
                self.image_out, _ = layer.inverse_op(self.image_out)
        subject_name = self.reader.get_subject_id(self.image_id)
        filename = "{}_niftynet_out.nii.gz".format(subject_name)
        source_image_obj = self.input_image[self.name]
        misc_io.save_data_array(self.output_path,
                                filename,
                                self.image_out,
                                source_image_obj,
                                self.output_interp_order)
        return
コード例 #7
0
 def _save_current_image(self, image_out):
     if self.input_image is None:
         return
     window_shape = [1, 1, 1, 1, image_out.shape[-1]]
     image_out = np.reshape(image_out, window_shape)
     for layer in reversed(self.reader.preprocessors):
         if isinstance(layer, DiscreteLabelNormalisationLayer):
             image_out, _ = layer.inverse_op(image_out)
     subject_name = self.reader.get_subject_id(self.image_id)
     filename = "{}{}.nii.gz".format(subject_name, self.prefix)
     source_image_obj = self.input_image[self.name]
     misc_io.save_data_array(self.output_path, filename, image_out,
                             source_image_obj, self.output_interp_order)
     with open(self.csv_path, 'a') as csv_file:
         data_str = ','.join([str(i) for i in image_out[0, 0, 0, 0, :]])
         csv_file.write(subject_name + ',' + data_str + '\n')
     self.log_inferred(subject_name, filename)
     return
コード例 #8
0
 def _save_current_image(self, image_out):
     if self.input_image is None:
         return
     window_shape = [1, 1, 1, 1, image_out.shape[-1]]
     image_out = np.reshape(image_out, window_shape)
     for layer in reversed(self.reader.preprocessors):
         if isinstance(layer, DiscreteLabelNormalisationLayer):
             image_out, _ = layer.inverse_op(image_out)
     subject_name = self.reader.get_subject_id(self.image_id)
     filename = "{}{}.nii.gz".format(subject_name, self.prefix)
     source_image_obj = self.input_image[self.name]
     misc_io.save_data_array(self.output_path,
                             filename,
                             image_out,
                             source_image_obj,
                             self.output_interp_order)
     with open(self.csv_path, 'a') as csv_file:
         data_str = ','.join([str(i) for i in image_out[0, 0, 0, 0, :]])
         csv_file.write(subject_name+','+data_str+'\n')
     self.log_inferred(subject_name, filename)
     return
コード例 #9
0
    def layer_op(self, subject_id, data):
        analyses = self.app_param.evaluation_units.split(',')
        if 'label' not in analyses and 'foreground' not in analyses:
            raise ValueError('ErrorMaps work with label or foreground '
                             'analyses only')
        if self.app_param.num_classes > 2:
            raise ValueError('ErrorMaps work with binary segmentations only')

        binarizer = cached_label_binarizer(1, self.app_param.output_prob)
        seg, ref = binarizer(data)
        cc_func = connected_components
        cc_seg, cc_ref = cc_func(seg, ref, self.app_param.output_prob)

        cc_aggregator = union_of_seg_for_each_ref_cc
        ccs = cc_aggregator(cc_ref, cc_seg)

        tp_seg_labels = set(s for seg_l, ref_l in ccs for s in seg_l)
        tp_ref_labels = set(r for seg_l, ref_l in ccs for r in ref_l if len(
            seg_l))
        fn_ref_labels = set(range(1, cc_ref[1])) - tp_ref_labels
        fp_seg_labels = set(range(1, cc_seg[1])) - tp_seg_labels
        maps = {}
        maps['tpc_map'] = np.logical_or(cc_seg in tp_seg_labels,
                                        cc_ref in tp_ref_labels)
        maps['fnc_map'] = cc_ref in fn_ref_labels
        maps['fpc_map'] = cc_seg in fp_seg_labels

        image_idx = self.reader.get_image_index(subject_id)
        file_path = os.path.join(self.eval_param.save_csv_dir, 'images')
        out = {'subject_id': subject_id}
        for key in maps:
            out[key] = os.path.join(file_path, subject_id + '_' + key + '.nii')
            save_data_array(file_path,
                            subject_id + '_' + key + '.nii',
                            maps[key],
                            self.reader.output_list[image_idx]['label'], 0)
        pdf = pd.DataFrame.from_records([out], ('subject_id',))
        return [pdf]
コード例 #10
0
    def layer_op(self, subject_id, data):
        analyses = self.app_param.evaluation_units.split(',')
        if 'label' not in analyses and 'foreground' not in analyses:
            raise ValueError('ErrorMaps work with label or foreground '
                             'analyses only')
        if self.app_param.num_classes > 2:
            raise ValueError('ErrorMaps work with binary segmentations only')

        binarizer = cached_label_binarizer(1, self.app_param.output_prob)
        seg, ref = binarizer(data)
        cc_func = connected_components
        cc_seg, cc_ref = cc_func(seg, ref, self.app_param.output_prob)

        cc_aggregator = union_of_seg_for_each_ref_cc
        ccs = cc_aggregator(cc_ref, cc_seg)

        tp_seg_labels = set(s for seg_l, ref_l in ccs for s in seg_l)
        tp_ref_labels = set(r for seg_l, ref_l in ccs for r in ref_l if len(
            seg_l))
        fn_ref_labels = set(range(1, cc_ref[1])) - tp_ref_labels
        fp_seg_labels = set(range(1, cc_seg[1])) - tp_seg_labels
        maps = {}
        maps['tpc_map'] = np.logical_or(cc_seg in tp_seg_labels,
                                        cc_ref in tp_ref_labels)
        maps['fnc_map'] = cc_ref in fn_ref_labels
        maps['fpc_map'] = cc_seg in fp_seg_labels

        image_idx = self.reader.get_image_index(subject_id)
        file_path = os.path.join(self.eval_param.save_csv_dir, 'images')
        out = {'subject_id': subject_id}
        for key in maps:
            out[key] = os.path.join(file_path, subject_id + '_' + key + '.nii')
            save_data_array(file_path,
                            subject_id + '_' + key + '.nii',
                            maps[key],
                            self.reader.output_list[image_idx]['label'], 0)
        pdf = pd.DataFrame.from_records([out], ('subject_id',))
        return [pdf]
コード例 #11
0
    def _save_current_image(self, image_out, resize_to):
        if self.input_image is None:
            return
        window_shape = resize_to
        while image_out.ndim < 5:
            image_out = image_out[..., np.newaxis, :]
        if self.window_border and any([b > 0 for b in self.window_border]):
            np_border = self.window_border
            while len(np_border) < 5:
                np_border = np_border + (0,)
            np_border = [(b,) for b in np_border]
            image_out = np.pad(image_out, np_border, mode='edge')
        image_shape = image_out.shape
        zoom_ratio = \
            [float(p) / float(d) for p, d in zip(window_shape, image_shape)]
        image_shape = list(image_shape[:3]) + [1, image_shape[-1]]
        image_out = np.reshape(image_out, image_shape)
        image_out = zoom_3d(image=image_out,
                            ratio=zoom_ratio,
                            interp_order=self.output_interp_order)

        for layer in reversed(self.reader.preprocessors):
            if isinstance(layer, PadLayer):
                image_out, _ = layer.inverse_op(image_out)
            if isinstance(layer, DiscreteLabelNormalisationLayer):
                image_out, _ = layer.inverse_op(image_out)
        subject_name = self.reader.get_subject_id(self.image_id)
        filename = "{}{}.nii.gz".format(subject_name, self.prefix)
        source_image_obj = self.input_image[self.name]
        misc_io.save_data_array(self.output_path,
                                filename,
                                image_out,
                                source_image_obj,
                                self.output_interp_order)
        self.log_inferred(subject_name, filename)
        return
コード例 #12
0
 def _save_current_image(self):
     """
     For all the outputs to be saved as images, go through the dictionary
     and save the resulting output after reversing the initial preprocessing
     :return:
     """
     if self.input_image is None:
         return
     for layer in reversed(self.reader.preprocessors):
         if isinstance(layer, PadLayer):
             for i in self.image_out:
                 self.image_out[i], _ = layer.inverse_op(self.image_out[i])
         if isinstance(layer, DiscreteLabelNormalisationLayer):
             for i in self.image_out:
                 self.image_out[i], _ = layer.inverse_op(self.image_out[i])
     subject_name = self.reader.get_subject_id(self.image_id)
     for i in self.image_out:
         filename = "{}_{}_{}.nii.gz".format(i, subject_name, self.postfix)
         source_image_obj = self.input_image[self.name]
         misc_io.save_data_array(self.output_path, filename,
                                 self.image_out[i], source_image_obj,
                                 self.output_interp_order)
         self.log_inferred(subject_name, filename)
     return
コード例 #13
0
 def _save_current_image(self, idx, filename, image):
     if image is None:
         return
     uniq_name = "{}_{}_niftynet_generated.nii.gz".format(idx, filename)
     misc_io.save_data_array(self.output_path, uniq_name, image, None)
     return
コード例 #14
0
 def _save_current_image(self, idx, filename, image):
     if image is None:
         return
     uniq_name = "{}_{}_niftynet_generated.nii.gz".format(idx, filename)
     misc_io.save_data_array(self.output_path, uniq_name, image, None)
     return