Source code for facereclib.features.SIFTBobKeypoints

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# Laurent El Shafey <Laurent.El-Shafey@idiap.ch>

import bob.ip.base
import numpy
from .. import utils

from .Extractor import Extractor

[docs]class SIFTBobKeypoints(Extractor): """Extracts Sift descriptors according to the given keypoints""" def __init__(self, sigmas, height, width, n_octaves, n_scales, octave_min, sigma_n, sigma0, contrast_thres, edge_thres, norm_thres, kernel_radius_factor, set_sigma0_no_init_smoothing): # call base class constructor Extractor.__init__(self) # prepare SIFT extractor self.m_sigmas = sigmas self.m_height = height self.m_width = width self.m_n_octaves = n_octaves self.m_n_scales = n_scales self.m_octave_min = octave_min self.m_sigma_n = sigma_n self.m_sigma0 = sigma0 self.m_contrast_thres = contrast_thres self.m_edge_thres = edge_thres self.m_norm_thres = norm_thres self.m_kernel_radius_factor = kernel_radius_factor self.m_set_sigma0_no_init_smoothing = set_sigma0_no_init_smoothing self.m_len_keypoint = len(self.m_sigmas) # SIFT extractor self.m_sift_extract = bob.ip.base.SIFT((self.m_height, self.m_width), self.m_n_octaves, self.m_n_scales, self.m_octave_min, self.m_sigma_n, self.m_sigma0, self.m_contrast_thres, self.m_edge_thres, self.m_norm_thres, self.m_kernel_radius_factor) if self.m_set_sigma0_no_init_smoothing: self.m_sift_extract.set_sigma0_no_init_smoothing() def __linearize__(self, descr): return numpy.reshape(descr, descr.size)
[docs] def read(self, filename): """Read image and annotations stored in an HDF5 file""" f = bob.io.base.HDF5File(str(filename)) image = f.read('image') annotations = f.read('annotations') return (image, annotations)
def __call__(self, image): """Extract SIFT features given the image and the keypoints""" # Creates keypoints kp = [] annotations = image[1] for k in range(annotations.shape[0]): for x in range(len(self.m_sigmas)): kp.append(bob.ip.base.GSSKeypoint(self.m_sigmas[x], annotations[k])) # Extracts and returns descriptors return self.__linearize__(self.m_sift_extract.compute_descriptor(image[0], kp))