Source code for bob.bio.vein.algorithm.Correlate

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :

import numpy
import skimage.feature

from bob.bio.base.pipelines import BioAlgorithm


class Correlate(BioAlgorithm):
    """Correlate probe and model without cropping

    The method is based on "cross-correlation" between a model and a probe image.
    The difference between this and :py:class:`MiuraMatch` is that **no**
    cropping takes place on this implementation. We simply fill the excess
    boundary with zeros and extract the valid correlation region between the
    probe and the model using :py:func:`skimage.feature.match_template`.

    """

    def __init__(
        self,
        probes_score_fusion="max",
        enrolls_score_fusion="mean",
        **kwargs,
    ):
        super().__init__(
            probes_score_fusion=probes_score_fusion,
            enrolls_score_fusion=enrolls_score_fusion,
            **kwargs,
        )

[docs] def create_templates(self, feature_sets, enroll): return feature_sets
[docs] def compare(self, enroll_templates, probe_templates): # returns scores NxM where N is the number of enroll templates and M is the number of probe templates # enroll_templates is Nx?1xD # probe_templates is Mx?2xD scores = [] for enroll in enroll_templates: scores.append([]) for probe in probe_templates: s = [[self.score(e, p) for p in probe] for e in enroll] s = self.fuse_probe_scores(s, axis=1) s = self.fuse_enroll_scores(s, axis=0) scores[-1].append(s) return numpy.array(scores)
[docs] def score(self, model, probe): """Computes the score between the probe and the model. Parameters: model (numpy.ndarray): The model of the user to test the probe agains probe (numpy.ndarray): The probe to test Returns: float: Value between 0 and 0.5, larger value means a better match """ image_ = probe.astype(numpy.float64) R = model.astype(numpy.float64) Nm = skimage.feature.match_template(image_, R) # figures out where the maximum is on the resulting matrix t0, s0 = numpy.unravel_index(Nm.argmax(), Nm.shape) # this is our output score = Nm[t0, s0] return score