def METHOD_NAME(self, feature_images, label_images, axistags=None, feature_names=None):
    logger.debug("training pixel-wise vigra RF")
    all_features = numpy.ndarray(shape=(0, feature_images[0].shape[-1]), dtype=numpy.float32)
    all_labels = numpy.ndarray(shape=(0, 1), dtype=numpy.uint32)
    # Extract label points and corresponding feature vectors
    for feature_image, label_image in zip(feature_images, label_images):
        label_coords = numpy.nonzero(label_image)[:-1]  # discard channel
        label_vector = label_image[label_coords]
        feature_matrix = feature_image[label_coords]
        all_features = numpy.concatenate((all_features, feature_matrix), axis=0)
        all_labels = numpy.concatenate((all_labels, label_vector), axis=0)
    # Save for future reference
    known_labels = numpy.sort(vigra.analysis.unique(all_labels))
    assert len(all_features) == len(all_labels)
    classifier = vigra.learning.RandomForest(*self._args, **self._kwargs)
    classifier.learnRF(all_features, all_labels)
    return VigraRfPixelwiseClassifier(classifier, known_labels, feature_names)