def compute_color2d_superpixels_features(image, dict_features, sp_size=30, sp_regul=0.2, fts_norm=True): """ segment image into superpixels and estimate features per superpixel :param ndarray image: input RGB image :param int sp_size: initial size of a superpixel(meaning edge length) :param float sp_regul: regularisation in range(0;1) where "0" gives elastic and "1" nearly square segments :param {str: [str]} dict_features: list of features to be extracted :param bool fts_norm: weather normalise features :return [[int]], [[floats]]: superpixels and related of features """ assert sp_regul > 0., 'slic. regularisation must be positive' logging.debug('run Superpixel clustering.') slic = seg_sp.segment_slic_img2d(image, sp_size=sp_size, rltv_compact=sp_regul) # plt.figure(), plt.imshow(slic) logging.debug('extract slic/superpixels features.') features, _ = seg_fts.compute_selected_features_img2d( image, slic, dict_features) logging.debug('list of features RAW: %s', repr(features.shape)) features[np.isnan(features)] = 0 if fts_norm: logging.debug('norm all features.') features, _ = seg_fts.norm_features(features) logging.debug('list of features NORM: %s', repr(features.shape)) return slic, features
def pipe_gray3d_slic_features_model_graphcut( image, nb_classes, dict_features, spacing=(12, 1, 1), sp_size=15, sp_regul=0.2, gc_regul=0.1, ): """ complete pipe-line for segmentation using superpixels, extracting features and graphCut segmentation :param ndarray image: input RGB image :param int sp_size: initial size of a superpixel(meaning edge lenght) :param float sp_regul: regularisation in range(0;1) where "0" gives elastic and "1" nearly square segments :param int nb_classes: number of classes to be segmented(indexing from 0) :param tuple(int,int,int) spacing: :param float gc_regul: regularisation for GC :return list(list(int)): segmentation matrix maping each pixel into a class >>> np.random.seed(0) >>> image = np.random.random((5, 125, 150)) / 2. >>> image[:, :, :75] += 0.5 >>> segm = pipe_gray3d_slic_features_model_graphcut(image, 2, {'color': ['mean']}) >>> segm.shape (5, 125, 150) """ logging.info('PIPELINE Superpixels-Features-GraphCut') slic = segment_slic_img3d_gray(image, sp_size=sp_size, relative_compact=sp_regul, space=spacing) # plt.imshow(segments) logging.info('extract segments/superpixels features.') # f = features.computeColourMean(image, segments) features, _ = compute_selected_features_gray3d(image, slic, dict_features) # merge features together logging.debug('list of features RAW: %r', features.shape) features[np.isnan(features)] = 0 logging.info('norm all features.') features, _ = norm_features(features) logging.debug('list of features NORM: %r', features.shape) model = estim_class_model(features, nb_classes) proba = model.predict_proba(features) logging.debug('list of probabilities: %r', proba.shape) # resultGraph = graphCut.segment_graph_cut_int_vals(segments, prob, gcReg) graph_labels = segment_graph_cut_general(slic, proba, image, features, gc_regul) return graph_labels[slic]