Ejemplo n.º 1
0
def getFeaturesByDetector(mode,img):
    
    detector = cv2.SimpleBlobDetector_create()
    
    if mode == featuresDetector.Agast:
        detector = cv2.AgastFeatureDetector_create()
    elif mode == featuresDetector.AKAZE:
        detector = cv2.AKAZE_create()
    elif mode == featuresDetector.BRISK:
        detector = cv2.BRISK_create()
    elif mode == featuresDetector.FAST:
        detector = cv2.FastFeatureDetector_create()
    elif mode == featuresDetector.KAZE:
        detector = cv2.KAZE_create()
    elif mode == featuresDetector.MSER:
        detector = cv2.MSER_create()
    elif mode == featuresDetector.ORB:
        detector = cv2.ORB_create()
    elif mode == featuresDetector.SIFT:
        detector = cv2.xfeatures2d.SIFT_create()
    elif mode == featuresDetector.SimpleBlob:
        detector = cv2.SimpleBlobDetector_create()
    
    keypoints = detector.detect(img)
    descriptors = detector.compute(img, keypoints)
    
    return descriptors
Ejemplo n.º 2
0
def set_detector_by_name(name):
    det = None
    if name == "Agast":
        det = cv2.AgastFeatureDetector_create()
    elif name == "FAST":
        det = cv2.FastFeatureDetector_create()
    elif name == "GFTT":
        det = cv2.GFTTDetector_create(310)
    elif name == "HARRIS":
        det = cv2.GFTTDetector_create(310,
                                      0.001,
                                      10,
                                      3,
                                      useHarrisDetector=True)
    elif name == "KAZE":
        det = cv2.KAZE_create(False, False, 0.001, 4, 4)
    elif name == "ORB":
        det = cv2.ORB_create()
    elif name == "STAR":
        det = cv2.xfeatures2d.StarDetector_create()
    elif name == "SURF":
        det = cv2.xfeatures2d.SURF_create()
    elif name == "SIFT":
        det = cv2.xfeatures2d.SIFT_create()
    elif name == "AKAZE":
        det = cv2.AKAZE_create()
    else:
        print "Not Implemented Error ..."
    return det
Ejemplo n.º 3
0
 def __init__(self, ratio_matching = 0.5, ratio_pose = 0.5, detecteur = 'fast', descripteur = 'orb'):
     self.ratio_matching = ratio_matching
     self.ratio_pose = ratio_pose
     self.detecteur = detecteur
     self.descripteur = descripteur
     self.detecteurs = {  'akaze': cv2.AKAZE_create(),
                          'agast': cv2.AgastFeatureDetector_create(),
                          'brisk': cv2.BRISK_create(),
                          'fast' : cv2.FastFeatureDetector_create(),
                          'gftt' : cv2.GFTTDetector_create(),
                          'kaze' : cv2.KAZE_create(),
                          'mser' : cv2.MSER_create(),
                          'orb'  : cv2.ORB_create(),
                          'blob' : cv2.SimpleBlobDetector_create() }
     self.descripteurs = {'brisk': cv2.BRISK_create(),
                          'orb'  : cv2.ORB_create(),}
     self.detector =   self.detecteurs[self.detecteur]
     self.descriptor = self.descripteurs[self.descripteur]
     self.matcheur = cv2.BFMatcher(normType = self.descriptor.defaultNorm(), crossCheck = True )
     self.KF = []
     self.current_kf = None
     self.traj = []
     self.current_time = 0
     self.prev_pts = None
     print 'construction du SLAM'
Ejemplo n.º 4
0
def detectar(x):
    t = cv.getTrackbarPos('Threshold', 'Deteccion de Rasgos')

    # Crea un objeto de acuerdo al metodo seleccionado
    # y llama a la funcion para detectar los rasgos
    if metodo == '1':
        # Crea un objeto "Good Features to Track"
        gftt = cv.GFTTDetector_create(0, 0.01, t, 3)
        kp = gftt.detect(input_img, None)
    elif metodo == '2':
        # Crea un objeto tipo FAST
        fast = cv.FastFeatureDetector_create(t)
        # Detecta los rasgos
        kp = fast.detect(input_img, None)
    elif metodo == '3':
        # Crea un objeto tipo AGAST
        agast = cv.AgastFeatureDetector_create(t)
        # Detecta los rasgos
        kp = agast.detect(input_img, None)
    elif metodo == '4':
        #Crea un objeto tipo star(?) / BRIEF
        star = cv.xfeatures2d.StarDetector_create(t)
        #Detecta los rasgos
        kp = star.detect(input_img, None)
    elif metodo == '5':
        #Crea un objeto tipo ORB
        orb = cv.ORB_create(t)
        #Detecta los ragos
        kp = orb.detect(input_img, None)
    elif metodo == '6':
        # Crea un objeto tipo AKAZE, la funcion requiere valores mas bajos de t
        akaze = cv.AKAZE_create(threshold=0.001 * t)
        kp = akaze.detect(input_img, None)
        print(t)
    elif metodo == '7':
        # Crea un objeto tipo BRISK
        brisk = cv.BRISK_create(t)
        kp = brisk.detect(input_img, None)
    elif metodo == '8':
        # Crea un objeto tipo KAZE, la funcion requiere valores mas bajos de t
        kaze = cv.KAZE_create(threshold=0.001 * t)
        kp = kaze.detect(input_img, None)
    elif metodo == '9':
        # Crea un objeto tipo SIFT
        sift = cv.xfeatures2d.SIFT_create(t)
        kp = sift.detect(input_img, None)
    elif metodo == '10':
        # Crea un objeto tipo SURF
        surf = cv.xfeatures2d.SURF_create(t)
        kp = surf.detect(input_img, None)

    else:
        return

    # Dibuja los rasgos detectados sobre la imagen original
    output_img = cv.drawKeypoints(input_img, kp, None, color=(255, 0, 0))
    cv.imshow('Deteccion de Rasgos', output_img)
Ejemplo n.º 5
0
    def __init__(self):
        self._det = cv2.AgastFeatureDetector_create(threshold=30)
        self._desc = cv2.ORB_create()

        self.perf = PerfCounter()

        FLANN_INDEX_LSH = 6
        index_params = dict(algorithm = FLANN_INDEX_LSH, table_number = 6, key_size = 12, multi_probe_level = 1)
        search_params = dict(checks = 50)
        self._matcher = cv2.FlannBasedMatcher(index_params, search_params)
Ejemplo n.º 6
0
def dCreate(_detType, _desType):

    print('Detector  : ' + _detType)
    print('Descriptor: ' + _desType)
    """ Keypoint Detector """
    if _detType == 'SIFT':
        detect_ = cv2.xfeatures2d.SIFT_create()

    elif _detType == 'SURF':
        detect_ = cv2.xfeatures2d.SURF_create()

    elif _detType == 'ORB':
        detect_ = cv2.ORB_create()

    elif _detType == 'AGAST':
        detect_ = cv2.AgastFeatureDetector_create()

    elif _detType == 'AKAZE':
        detect_ = cv2.AKAZE_create()

    else:
        detect_ = cv2.ORB_create()
        print('No keypoint detection method is specified.')
        print('Use ORB detector.')
    """ Keypoint Descriptor """
    if _desType == 'SIFT':
        descript_ = cv2.xfeatures2d.SIFT_create()

    elif _desType == 'SURF':
        descript_ = cv2.xfeatures2d.SURF_create()

    elif _desType == 'DAISY':
        descript_ = cv2.xfeatures2d.DAISY_create()

    elif _desType == 'ORB':
        descript_ = cv2.ORB_create()

    elif _desType == 'BRISK':
        descript_ = cv2.BRISK_create()

    elif _desType == 'FREAK':
        descript_ = cv2.xfeatures2d.FREAK_create()

    elif _desType == 'AKAZE':
        descript_ = cv2.AKAZE_create()

    else:
        descript_ = cv2.ORB_create()
        print('No keypoint description method is specified.')
        print('Use ORB descriptor.')

    return [detect_, descript_]
Ejemplo n.º 7
0
        def detect(self):
            src_image = self.get_opencv_image()
            if src_image.all() != None:
                detector = cv2.AgastFeatureDetector_create()

                keypoints = detector.detect(src_image)
                detected_image = cv2.drawKeypoints(
                    src_image,
                    keypoints,
                    None,
                    color=(0, 0, 255),
                )
                self.set_opencv_image(detected_image)
            self.update()
Ejemplo n.º 8
0
def agast(detector,emparejador,opcion,nombre1,nombre2,norma):
    #Lee las imagenes a analizar
    if opcion == 'd':
        img1= cv.imread('tpic5.png',cv.IMREAD_GRAYSCALE)          
        img2 = cv.imread('tpic5_flipped.png',cv.IMREAD_GRAYSCALE) 
    
    if opcion == 'db':
        img1= cv.imread('thome.jpg',cv.IMREAD_GRAYSCALE)          
        img2 = cv.imread('thome_escale.jpg',cv.IMREAD_GRAYSCALE)  
    
    if opcion == 'dc':
        img1= cv.imread('tgrafizq.png',cv.IMREAD_GRAYSCALE)          
        img2 = cv.imread('tgrafder.png',cv.IMREAD_GRAYSCALE) 
    
    if opcion == 'n':
        img1= cv.imread(nombre1,cv.IMREAD_GRAYSCALE)          
        img2 = cv.imread(nombre2,cv.IMREAD_GRAYSCALE) 
        
    #Inicia el Detector y Descriptor 
    agast = cv.AgastFeatureDetector_create()
    brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
    
    #Detecta Rasgos y Calcula el descriptor
    kpa= agast.detect(img1,None)
    kp1,des1=brief.compute(img1,kpa)
    
    kpb= agast.detect(img2,None)
    kp2,des2=brief.compute(img2,kpb)
    
    #Muestra Rasgos y Guarda la imagen correspondiente
    imgx = cv.drawKeypoints(img1, kp1, None, color=(0,255,255))
    imgy = cv.drawKeypoints(img2, kp2, None, color=(0,255,255))
    window_namex="Rasgos Caracteristicos imagen 1"
    window_namey="Rasgos Caracteristicos imagen 2"
    cv.namedWindow(window_namex)
    cv.namedWindow(window_namey)
    cv.resizeWindow(window_namex,500,400)
    cv.resizeWindow(window_namey,500,400)
    cv.imshow(window_namex,imgx)
    cv.imshow(window_namey,imgy)
    save(imgx,emparejador,detector,norma,tag1)
    save(imgy,emparejador,detector,norma,tag2)

    #Envia los datos a la etapa de emparejamiento
    menu_emparejamiento(emparejador,kp1,des1,kp2,des2,img1,img2,norma,detector)
Ejemplo n.º 9
0
def agast(detector, emparejador):

    if opcion == 'd':
        img1 = cv.imread('graf1.png', cv.IMREAD_GRAYSCALE)  # queryImage
        img2 = cv.imread('graf3.png', cv.IMREAD_GRAYSCALE)  # trainImage
    if opcion == 'n':
        img1 = cv.imread(nombre1, cv.IMREAD_GRAYSCALE)  # queryImage
        img2 = cv.imread(nombre2, cv.IMREAD_GRAYSCALE)  # trainImage

    # Initiate SIFT detector
    agast = cv.AgastFeatureDetector_create()
    brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
    # find the keypoints and descriptors with SIFT
    kpa = agast.detect(img1, None)
    kp1, des1 = brief.compute(img1, kpa)

    kpb = agast.detect(img2, None)
    kp2, des2 = brief.compute(img2, kpb)

    menu_emparejamiento(emparejador, kp1, des1, kp2, des2, img1, img2)
Ejemplo n.º 10
0
def create_panorama(descriptor_name, detector_name, normalized_imgs,
                    output_path, img_name):
    # (2) detect keypoints and extract local invariant descriptors
    detector = {
        "MSER": lambda: cv.MSER_create(),
        "FAST": lambda: cv.FastFeatureDetector_create(),
        "AGAST": lambda: cv.AgastFeatureDetector_create(),
        "GFFT": lambda: cv.GFTTDetector_create(),
        "STAR": lambda: cv.xfeatures2d.StarDetector_create()
    }[detector_name]()
    descriptor = {
        "sift": lambda: cv.xfeatures2d.SIFT_create(),
        "surf": lambda: cv.xfeatures2d.SURF_create(),
        "brief": lambda: cv.xfeatures2d.BriefDescriptorExtractor_create(),
        "orb": lambda: cv.ORB_create(nfeatures=1500),
        "kaze": lambda: cv.KAZE_create(),
        "akaze": lambda: cv.AKAZE_create(),
    }[descriptor_name]()

    def default_describe(img):
        return descriptor.detectAndCompute(img.astype('uint8'), None)

    descriptor_apply_function = {
        "brief":
        lambda img: extract_and_describe_with_brief(img, detector, descriptor)
    }.get(descriptor_name, lambda img: default_describe(img))
    matcher = cv.BFMatcher()
    ratio = 0.75
    reproj_threshold = 4.
    alg = descriptor_name if descriptor_name in [
        "sift", "surf", "orb", "kaze", "akaze"
    ] else "{}_{}".format(descriptor_name, detector_name)

    def r_stitch(a, b):
        return stitch(a[1], b[1], ratio, descriptor_apply_function, matcher,
                      reproj_threshold, True, a[0] + 1, b[0] + 1, img_name,
                      alg)

    result = reduce(r_stitch, enumerate(normalized_imgs))
    save_img(result[1], "{}/{}_result_{}.jpg".format(output_path, img_name,
                                                     alg))
def detectar(x):
    t = cv.getTrackbarPos('Threshold', 'Deteccion de Rasgos')
    # Crea un objeto de acuerdo al metodo seleccionado
    # y llama a la funcion para detectar los rasgos
    if metodo == '1':
        gftt = cv.GFTTDetector_create(0, 0.01, t, 3)
        kp = gftt.detect(input_img, None)
    elif metodo == '2':
        # Crea un objeto tipo FAST
        fast = cv.FastFeatureDetector_create(t)
        # Detecta los rasgos
        kp = fast.detect(input_img, None)
    elif metodo == '3':
        # Crea un objeto tipo AGAST
        agast = cv.AgastFeatureDetector_create(t)
        # Detecta los rasgos
        kp = agast.detect(input_img, None)
    else:
        return
    # Dibuja los rasgos detectados sobre la imagen original
    output_img = cv.drawKeypoints(input_img, kp, None, color=(255, 0, 0))
    cv.imshow('Deteccion de Rasgos', output_img)
Ejemplo n.º 12
0
    def detechAndDescribe(self, image):

        # 단일 채널인 grayscale로 전환
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

        # 버전 체크 (__init__참고)를 하여 버전에 맞는 SIFT 알고리즘을 사용함.
        # SIFT 결과로 특징 점들과 디스크립터를 튜플의 형태로 받는다.
        if self.isv3:
            descriptor = cv2.xfeatures2d.SIFT_create()
            (kps, features) = descriptor.detectAndCompute(image, None)

        else:
            detector = cv2.AgastFeatureDetector_create("SIFT")
            kps = detector.detect(gray)

            extractor = cv2.BOWImgDescriptorExtractor("SIFT")
            (kps, features) = extractor.compute(gray, kps)

        # 특징점을 KeyPoint 객체에서 numpy 배열로 전환
        kps = np.float32([kp.pt for kp in kps])

        # 특징점과 특징을 튜플로 반환함 eturn a tuple of keypoints and features
        return (kps, features)
Ejemplo n.º 13
0
    def create_detector(self, detector):
        """ Create detector object.

        Parameters
        ----------
        detector : str
            The detector type to create.
        """
        if detector is 'Agast':
            det = cv2.AgastFeatureDetector_create()
        elif detector is 'AKAZE':
            det = cv2.AKAZE_create()
        elif detector is 'BRISK':
            det = cv2.BRISK_create()
        elif detector is 'Fast':
            det = cv2.FastFeatureDetector_create()
        elif detector is 'GFTT':
            det = cv2.GFTTDetector_create()
        elif detector is 'KAZE':
            det = cv2.KAZE_create()
        elif detector is 'MSER':
            det = cv2.MSER_create()
        elif detector is 'ORB':
            det = cv2.ORB_create()

        elif detector is 'MSD':
            det = xfeatures2d.MSDDetector_create()
        elif detector is 'SIFT':
            det = xfeatures2d.SIFT_create()
        elif detector is 'SURF':
            det = xfeatures2d.SURF_create()
        elif detector is 'Star':
            det = xfeatures2d.StarDetector_create()
        else:
            raise ValueError("Unsupported detector")

        return det
Ejemplo n.º 14
0
    3: cv.AGAST_FEATURE_DETECTOR_OAST_9_16,
}

# Set Agast detector parameter callbacks
cv.createTrackbar("Threshold", "Agast", 15, 50, f)
cv.createTrackbar("Non Max Suppression", "Agast", 1, 1, f)
cv.createTrackbar("Type", "Agast", 0, len(detector_types) - 1, f)

while True:
    agast_threshold = cv.getTrackbarPos("Threshold", "Agast")
    non_max_suppression = cv.getTrackbarPos("Non Max Suppression", "Agast")
    current_type = cv.getTrackbarPos("Type", "Agast")

    agast = cv.AgastFeatureDetector_create(
        threshold=agast_threshold,
        nonmaxSuppression=non_max_suppression,
        type=detector_types[current_type],
    )

    # find the keypoints with Agast
    kp = agast.detect(img, None)

    # draw only keypoints location,not size and orientation
    img2 = cv.drawKeypoints(img, kp, None, color=(0, 255, 0))

    cv.imshow("Agast", img2)

    if cv.waitKey(10) & 0xFF == 27:
        break

cv.destroyAllWindows()
Ejemplo n.º 15
0
from typing import List, Tuple, Iterable, Optional
import numpy as np
import cv2 as cv
import numpy as np
import time
from util.collection_util import *
from functools import reduce
from motion_match import MotionMatch, KP

#### Detectors, fastest first. (fast is a bit faster but agast is a bit better. Orb offers sparse but good quality features and surf is very good but very slow) :
#fast = cv.FastFeatureDetector_create(threshold=5, nonmaxSuppression=True, type=cv.FastFeatureDetector_TYPE_9_16)
agast = cv.AgastFeatureDetector_create(threshold=5, nonmaxSuppression=True, type=cv.AgastFeatureDetector_OAST_9_16)
orb_dtc = cv.ORB_create(edgeThreshold=24, patchSize=31, nlevels=3, fastThreshold=8, scaleFactor=1.2, WTA_K=2, scoreType=cv.ORB_HARRIS_SCORE, firstLevel=0, nfeatures=6000)
## SURF Defaults : hessianThreshold=100, nOctaves=4, nOctaveLayers=3, extended=False, upright=False
#surf_dtc = cv.xfeatures2d.SURF_create(hessianThreshold=10, nOctaves=4, nOctaveLayers=3, extended=False, upright=True)
default_dtc = agast

#### Descriptors, Matchers, and match-distance result scale (worst to best. orb and brief are good choices)
surf_dsc = (cv.xfeatures2d.SURF_create(hessianThreshold=10,nOctaves=4,nOctaveLayers=3,extended=False,upright=True),
            cv.BFMatcher_create(normType=cv.NORM_L1), 1 / (1))
orb_dsc = (cv.ORB_create(edgeThreshold=24, patchSize=31, nlevels=8, fastThreshold=14, scaleFactor=1.2, WTA_K=2, scoreType=cv.ORB_HARRIS_SCORE, firstLevel=0, nfeatures=6000),
            cv.BFMatcher_create(normType=cv.NORM_HAMMING), 1 / (18))
brief = (cv.xfeatures2d.BriefDescriptorExtractor_create(bytes=32, use_orientation=False),
            cv.BFMatcher_create(normType=cv.NORM_HAMMING), 1 / (12))
sift = (cv.xfeatures2d.SIFT_create(nOctaveLayers=3, contrastThreshold=0.01, edgeThreshold=100.0, sigma=1.6),
            cv.BFMatcher_create(normType=cv.NORM_L1), 1 / (500))
default_dsc = brief

def computeMotion(imgs: Iterable[np.ndarray], degree: int = 1, detector: cv.Feature2D = default_dtc,
        descriptor: cv.Feature2D = default_dsc[0], matcher: cv.DescriptorMatcher = default_dsc[1],
        distscale: float = default_dsc[2], dist_thresh: float = 1.5, better_thresh: float = 1.5
Ejemplo n.º 16
0
class DetectorDescriptor:
    detectors = {
        'Agast': cv2.AgastFeatureDetector_create(),
        'AKAZE': cv2.AKAZE_create(),
        'BRISK': cv2.BRISK_create(),
        'Fast': cv2.FastFeatureDetector_create(),
        'GFTT': cv2.GFTTDetector_create(),
        'KAZE': cv2.KAZE_create(),
        'MSER': cv2.MSER_create(),
        'ORB': cv2.ORB_create()
    }
    xdetectors = {
        #        'Boost': xfeatures2d.BoostDesc_create(),
        'Harris': xfeatures2d.HarrisLaplaceFeatureDetector_create(),
        #        'PCT': xfeatures2d.PCTSignatures_create(),
        'Star': xfeatures2d.StarDetector_create()
    }

    descriptors = {
        'AKAZE': None,
        'BRISK': cv2.BRISK_create(),
        'KAZE': None,
        'ORB': cv2.ORB_create(),
    }
    xdescriptors = {
        #        'Boost': xfeatures2d.BoostDesc_create(),
        'BRIEF': xfeatures2d.BriefDescriptorExtractor_create(),
        'DAISY': xfeatures2d.DAISY_create(),
        'FREAK': xfeatures2d.FREAK_create(),
        'LATCH': xfeatures2d.LATCH_create(),
        #        'LUCID': xfeatures2d.LUCID_create(),
        'VGG': xfeatures2d.VGG_create()
    }

    def __init__(self, det_s, des_s=None):
        self._string_re = re.compile(r'<([^\W_]+)_?(\w+)?')

        try:
            self.det = self.detectors[det_s]
        except KeyError:
            try:
                self.det = self.xdetectors[det_s]
            except KeyError:
                raise ValueError("Unsupported detector")

        if des_s:
            try:
                self.desc = self.descriptors[des_s]
            except KeyError:
                try:
                    self.desc = self.xdescriptors[des_s]
                except KeyError:
                    raise ValueError("Unsupported descriptor")

            # AKAZE and KAZE special case
            if self.desc is None:
                self.desc = self._create_kaze_descriptor(des_s)
        else:
            self.desc = None

    def _create_kaze_descriptor(self, des_s):
        """AKAZE only allows AKAZE or KAZE detectors."""

        if isinstance(self.det, cv2.AKAZE) or isinstance(self.det, cv2.KAZE):
            if des_s == 'AKAZE':
                return cv2.AKAZE_create()
            else:
                return cv2.KAZE_create()
        else:
            return None

    def _stringify(self, obj):
        match = self._string_re.match(str(obj))
        if match.group(2):  # In the case of 'xfeatures2d_SIFT' etc.
            return match.group(2)
        else:
            return match.group(1)

    @property
    def detector_s(self):
        return self._stringify(self.det)

    @property
    def descriptor_s(self):
        return self._stringify(self.desc)

    def detect_and_compute(self, image):
        return self.det.detectAndCompute(image, None)

    def detect(self, image):
        try:
            keypoints = self.det.detect(image)
        except:
            return ([])
        else:
            return keypoints

    def compute(self, image, keypoints):
        try:
            (keypoints, descriptors) = self.desc.compute(image, keypoints)
        except:
            return ([], [])
        else:
            return (keypoints, descriptors)
Ejemplo n.º 17
0
    def __init__(self,
                 image_topic,
                 depth_image_topic,
                 pose_topic,
                 detector,
                 descriptor,
                 focal_length,
                 chi,
                 alpha,
                 realtime=False):
        self.camera_model = DoubleSphereModel(focal_length, chi, alpha)

        if detector == 'FAST':
            self.detector = cv2.FastFeatureDetector_create(threshold=50)
        elif detector == 'SIFT':
            self.detector = cv2.xfeatures2d.SIFT_create(nfeatures=5000)
        elif detector == 'SURF':
            self.detector = cv2.xfeatures2d.SURF_create(hessianThreshold=500)
        elif detector == 'ORB':
            self.detector = cv2.ORB_create(nfeatures=5000)
        elif detector == 'BRISK':
            self.detector = cv2.BRISK_create(thresh=50)
        elif detector == 'STAR':
            self.detector = cv2.xfeatures2d.StarDetector_create()
        elif detector == 'AKAZE':
            self.detector = cv2.AKAZE_create(threshold=0.001)
        elif detector == 'KAZE':
            self.detector = cv2.KAZE_create(threshold=0.001)
        elif detector == 'AGAST':
            self.detector = cv2.AgastFeatureDetector_create(threshold=65)
        else:
            print 'Invalid feature detector specified'

        self.rgb = False
        self.vgg = False
        if descriptor == 'SIFT':
            self.descriptor = cv2.xfeatures2d.SIFT_create(nfeatures=5000)
        elif descriptor == 'SURF':
            self.descriptor = cv2.xfeatures2d.SURF_create()
        elif descriptor == 'ORB':
            self.descriptor = cv2.ORB_create(nfeatures=5000)
        elif descriptor == 'BRISK':
            self.descriptor = cv2.BRISK_create(thresh=50, octaves=3)
        elif descriptor == 'AKAZE':
            self.descriptor = cv2.AKAZE_create()
        elif descriptor == 'KAZE':
            self.descriptor = cv2.KAZE_create()
        elif descriptor == 'FREAK':
            self.descriptor = cv2.xfeatures2d.FREAK_create()
        elif descriptor == 'DAISY':
            self.descriptor = cv2.xfeatures2d.DAISY_create()
        elif descriptor == 'LUCID':
            self.descriptor = cv2.xfeatures2d.LUCID_create()
            self.rgb = True
        elif descriptor == 'LATCH':
            self.descriptor = cv2.xfeatures2d.LATCH_create()
        elif descriptor == 'VGG':
            self.descriptor = cv2.xfeatures2d.VGG_create()
            self.vgg = True
        elif descriptor == 'BOOST':
            scale = 1.5
            if detector == 'KAZE' or detector == 'SURF':
                scale = 6.25
            if detector == 'SIFT':
                scale = 6.75
            elif detector == 'AKAZE' or detector == 'AGAST' or detector == 'FAST' or detector == 'BRISK':
                scale = 5.0
            elif detector == 'ORB':
                scale = 0.75
            self.descriptor = cv2.xfeatures2d.BoostDesc_create(
                scale_factor=scale)

        np.random.seed(3)
        if descriptor == '' and (
                detector == 'SIFT' or detector == 'SURF' or detector == 'KAZE'
        ) or descriptor == 'SIFT' or descriptor == 'SURF' or descriptor == 'KAZE' or descriptor == 'DAISY' or descriptor == 'LUCID' or descriptor == 'VGG':
            self.matcher = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
        elif descriptor == '' and (
                detector == 'ORB' or detector == 'BRISK' or detector == 'AKAZE'
        ) or descriptor == 'ORB' or descriptor == 'BRISK' or descriptor == 'AKAZE' or descriptor == 'FREAK' or descriptor == 'LATCH' or descriptor == 'BOOST':
            self.matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
        self.color = np.random.randint(0, 200, (32768, 3))
        self.frame_inx = 0
        self.num_matches = []
        self.recall = []
        self.precision = []
        self.t = tf.TransformListener()
        self.old_tf = geometry_msgs.msg.TransformStamped()
        self.image_pub = rospy.Publisher("/matcher/matches",
                                         Image,
                                         queue_size=2)
        self.bridge = CvBridge()
        if realtime:
            self.image_sub = message_filters.Subscriber(image_topic, Image)
            self.depth_sub = message_filters.Subscriber(
                depth_image_topic, Image)
            self.pose_sub = message_filters.Subscriber(pose_topic, PoseStamped)
            self.sync = message_filters.ApproximateTimeSynchronizer(
                [self.image_sub, self.depth_sub, self.pose_sub],
                queue_size=3,
                slop=0.1)
            self.sync.registerCallback(self.on_new_image)
Ejemplo n.º 18
0
detectorHasChanged = True
while True:
    ret, frame = video_capture.read()
    threshold = cv2.getTrackbarPos('Threshold', 'Keypoints')

    key = cv2.waitKey(1)
    if key == ord('1'):
        detector = cv2.FastFeatureDetector_create(threshold=threshold)
        detectorName = "FAST"
        detectorHasChanged = True
    elif key == ord('2'):
        detector = cv2.AKAZE_create(threshold=threshold)
        detectorName = "AKAZE"
        detectorHasChanged = True
    elif key == ord('3'):
        detector = cv2.AgastFeatureDetector_create(threshold=threshold)
        detectorName = "AGAST"
        detectorHasChanged = True
    elif key == ord('4'):
        detector = cv2.ORB_create()
        detectorName = "ORB"
        detectorHasChanged = True
    elif key == ord('q'):
        break

    initTime = datetime.datetime.now()
    keypoints = detector.detect(frame, None)
    endTime = datetime.datetime.now()
    if detectorHasChanged:
        print("Chosen detector: " + detectorName)
        print("Calculation time for " + detectorName + " : " +
Ejemplo n.º 19
0
def detectFeatures(img, detector):
    ##Detects new features in the frame.
    ##Uses the Feature Detector selected.

    if detector == 'SIFT':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.detectAndCompute(img, None)

    elif detector == 'SURF':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.detectAndCompute(img, None)

    elif detector == 'ORB':
        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.detectAndCompute(img, None)

    elif detector == 'BRISK':
        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.detectAndCompute(img, None)

    elif detector == 'KAZE':
        kaze = cv2.KAZE_create()
        feature_pts, des = kaze.detectAndCompute(img, None)

    elif detector == 'AKAZE':
        akaze = cv2.AKAZE_create()
        feature_pts, des = akaze.detectAndCompute(img, None)

########################### SimpleBlobDetector as detector#############################################
    elif detector == 'SimpleBlobDetector_BRIEF':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'SimpleBlobDetector_VGG':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'SimpleBlobDetector_BoostDesc':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SimpleBlobDetector_LATCH':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SimpleBlobDetector_DAISY':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SimpleBlobDetector_FREAK':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'SimpleBlobDetector_LUCID':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

################################### FAST as detector##############################################
    elif detector == 'FAST_BRIEF':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'FAST_VGG':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'FAST_BoostDesc':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'FAST_LATCH':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'FAST_DAISY':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'FAST_FREAK':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'FAST_LUCID':
        fast = cv2.FastFeatureDetector_create(threshold=50,
                                              nonmaxSuppression=True)
        feature_pts = fast.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

#################################### GFTT as detector#############################################

    elif detector == 'GFTT_BRIEF':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'GFTT_VGG':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'GFTT_BoostDesc':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'GFTT_LATCH':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'GFTT_DAISY':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'GFTT_FREAK':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'GFTT_LUCID':
        retval = cv2.GFTTDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

###################################  AGAST as detector ################################################

    elif detector == 'AGAST_BRIEF':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'AGAST_VGG':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'AGAST_BoostDesc':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'AGAST_LATCH':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'AGAST_DAISY':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'AGAST_FREAK':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'AGAST_LUCID':
        retval = cv2.AgastFeatureDetector_create()
        feature_pts = retval.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

#################################  STAR  as detector ##################################################

    elif detector == 'STAR_BRIEF':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'STAR_VGG':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'STAR_BoostDesc':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'STAR_LATCH':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'STAR_DAISY':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'STAR_FREAK':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'STAR_LUCID':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

################################  MSER  as detector ################################################

    elif detector == 'MSER_BRIEF':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'MSER_VGG':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'MSER_BoostDesc':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'MSER_LATCH':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'MSER_DAISY':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'MSER_FREAK':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'MSER_LUCID':
        mser = cv2.MSER_create()
        feature_pts = mser.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

#####################################  SIFT  as detector #################################################

    elif detector == 'SIFT_BRIEF':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'SIFT_VGG':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'SIFT_BoostDesc':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SIFT_LATCH':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SIFT_DAISY':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SIFT_FREAK':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'SIFT_LUCID':
        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts = sift.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

###################################  SURF  as detector ###################################################

    elif detector == 'SURF_BRIEF':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'SURF_VGG':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'SURF_BoostDesc':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SURF_LATCH':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SURF_DAISY':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'SURF_FREAK':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'SURF_LUCID':
        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts = surf.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

#####################################  ORB  as detector ###############################################

    elif detector == 'ORB_BRIEF':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'ORB_VGG':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'ORB_BoostDesc':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'ORB_LATCH':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'ORB_DAISY':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'ORB_FREAK':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'ORB_LUCID':
        orb = cv2.ORB_create(1000)
        feature_pts = orb.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

####################################  BRISK  as detector ################################################

    elif detector == 'BRISK_BRIEF':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
        feature_pts, des = brief.compute(img, feature_pts)

    elif detector == 'BRISK_VGG':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        retval = cv2.xfeatures2d.VGG_create()
        des = retval.compute(img, feature_pts)

    elif detector == 'BRISK_BoostDesc':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        retval = cv2.xfeatures2d.BoostDesc_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'BRISK_LATCH':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        retval = cv2.xfeatures2d.LATCH_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'BRISK_DAISY':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        retval = cv2.xfeatures2d.DAISY_create()
        feature_pts, des = retval.compute(img, feature_pts)

    elif detector == 'BRISK_FREAK':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        freakExtractor = cv2.xfeatures2d.FREAK_create()
        feature_pts, des = freakExtractor.compute(img, feature_pts)

    elif detector == 'BRISK_LUCID':
        brisk = cv2.BRISK_create()
        feature_pts = brisk.detect(img, None)

        retval = cv2.xfeatures2d.LUCID_create()
        feature_pts, des = retval.compute(img, feature_pts)

#######################################  SIFT as Descriptor #######################################

    elif detector == 'SimpleBlobDetector_SIFT':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.compute(img, feature_pts)

    elif detector == 'FAST_SIFT':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.compute(img, feature_pts)

    elif detector == 'GFTT_SIFT':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.compute(img, feature_pts)

    elif detector == 'AGAST_SIFT':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.compute(img, feature_pts)

    elif detector == 'STAR_SIFT':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.compute(img, feature_pts)

    elif detector == 'MSER_SIFT':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        sift = cv2.xfeatures2d.SIFT_create()
        feature_pts, des = sift.compute(img, feature_pts)

###################################### SURF as Descriptor #############################################

    elif detector == 'SimpleBlobDetector_SURF':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.compute(img, feature_pts)

    elif detector == 'FAST_SURF':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.compute(img, feature_pts)

    elif detector == 'GFTT_SURF':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.compute(img, feature_pts)

    elif detector == 'AGAST_SURF':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.compute(img, feature_pts)

    elif detector == 'STAR_SURF':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.compute(img, feature_pts)

    elif detector == 'MSER_SURF':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        surf = cv2.xfeatures2d.SURF_create(1000)
        feature_pts, des = surf.compute(img, feature_pts)

####################################  ORB as Descriptor  #############################################

    elif detector == 'SimpleBlobDetector_ORB':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.compute(img, feature_pts)

    elif detector == 'FAST_ORB':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.compute(img, feature_pts)

    elif detector == 'GFTT_ORB':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.compute(img, feature_pts)

    elif detector == 'AGAST_ORB':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.compute(img, feature_pts)

    elif detector == 'STAR_ORB':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.compute(img, feature_pts)

    elif detector == 'MSER_ORB':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        orb = cv2.ORB_create(1000)
        feature_pts, des = orb.compute(img, feature_pts)

################################### BRISK as Descriptor #############################################

    elif detector == 'SimpleBlobDetector_BRISK':
        retval = cv2.SimpleBlobDetector_create()
        feature_pts = retval.detect(img, None)

        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.compute(img, feature_pts)

    elif detector == 'FAST_BRISK':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.compute(img, feature_pts)

    elif detector == 'GFTT_BRISK':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.compute(img, feature_pts)

    elif detector == 'AGAST_BRISK':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.compute(img, feature_pts)

    elif detector == 'STAR_BRISK':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.compute(img, feature_pts)

    elif detector == 'MSER_BRISK':
        star = cv2.xfeatures2d.StarDetector_create()
        feature_pts = star.detect(img, None)

        brisk = cv2.BRISK_create()
        feature_pts, des = brisk.compute(img, feature_pts)

    elif detector == 'Tomasi_ORB':
        orb = cv2.ORB_create()
        features = cv2.goodFeaturesToTrack(img,
                                           1000,
                                           qualityLevel=0.01,
                                           minDistance=7)

        keypoints = [
            cv2.KeyPoint(x=feature[0][0], y=feature[0][1], _size=20)
            for feature in features
        ]
        feature_pts, des = orb.compute(img, keypoints)

    # return features extracted

    feature_pts = np.array([x.pt for x in feature_pts], dtype=np.float32)

    return feature_pts
Ejemplo n.º 20
0
	testSet = numpy.load("testSetInUint8.npy")
	testLabels = numpy.load(preprocessing.testLabelPath).astype(numpy.float32)
except FileNotFoundError:
	testSet, testLabels = preprocessing.loadTestSet()
	numpy.save("testSetInUint8.npy", testSet)

#surf = cv2.ORB_create()
#surf.setFastThreshold(0)
#surf.setEdgeThreshold(0)
# surf = cv2.xfeatures2d.BriefDescriptorExtractor_create()
surf = cv2.xfeatures2d.SURF_create()
# surf = cv2.xfeatures2d.SIFT_create()
# det = cv2.xfeatures2d.StarDetector_create()
# det = cv2.xfeatures2d.SURF_create()
# det = cv2.xfeatures2d.SIFT_create()
det = cv2.AgastFeatureDetector_create()
#det = cv2.ORB_create()
#det.setFastThreshold(0)
#det.setEdgeThreshold(0)

print("Extracting train features")
try:
	descriptors = pickle.load(open(descriptor+"allTrainDescriptors.pkl", "rb"))
except FileNotFoundError:
	descriptors = {}
	count = 0
	for im in trainSet:
		count += 1
		if count % 100 == 0:
			print(count/15000, end="\r", flush=True)
		for i in range(5):
Ejemplo n.º 21
0
def setup(detector_type, descriptor_type):
    binary_match = True
    # Detector !
    if detector_type == 'FAST':
        detector = cv2.FastFeatureDetector_create()
    if detector_type == 'ORB':
        detector = cv2.ORB_create(nfeatures=100000)
    if detector_type == 'AGAST':
        detector = cv2.AgastFeatureDetector_create()
    if detector_type == 'SURF':
        detector = cv2.xfeatures2d.SURF_create()
    if detector_type == 'SIFT':
        detector = cv2.xfeatures2d.SIFT_create()

    if detector_type == 'AKAZE':
        detector = cv2.AKAZE_create()

    #Descriptor
    if descriptor_type == 'FAST':
        descriptor = cv2.BRISK_create()
    if descriptor_type == 'BRIEF':
        descriptor = cv2.xfeatures2d.BriefDescriptorExtractor_create()
    if descriptor_type == 'BRISK':
        descriptor = cv2.BRISK_create()
    if descriptor_type == 'ORB':
        descriptor = cv2.ORB_create()
    if descriptor_type == 'FREAK':
        descriptor = cv2.xfeatures2d.FREAK_create()

    if descriptor_type == 'AKAZE':
        descriptor = cv2.AKAZE_create()

    if descriptor_type == 'SIFT':
        descriptor = cv2.xfeatures2d.SIFT_create()
        binary_match = False

    if descriptor_type == 'SURF':
        descriptor = cv2.xfeatures2d.SURF_create()
        binary_match = False

    if binary_match is False:

        FLANN_INDEX_KDTREE = 0
        index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
        search_params = dict(checks=50)
        matcher = cv2.FlannBasedMatcher(index_params, search_params)
        match_type = "FLANN Matcher"
#            matches = flann.knnMatch(self.features_descriptors[-1], descriptor, k=2)
    else:
        matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=False)
        # matcher  = cv2.BFMatcher(cv2.NORM_L1, crossCheck=False)
        match_type = "Hamming Distance"


#            matches = bf.knnMatch(self.features_descriptors[-1], descriptor, k=2)

    print('Detector = ', detector_type)
    print('Desc = ', descriptor_type)
    print('Match =', match_type)

    return detector, descriptor, matcher