Skip navigation

Az ORB detektor használata OpenCV-ben

Az ORB detektor használata az OpenCV függvénykönyvtárral

Az OpenCV-ben megvalósított ORB detektor a FAST vagy Harris sarokdetektort többszintű képpiramison futtatja végig. Elsőrendű momentumok alapján meghatározza az orientációt és egy BRIEF leíró segítségével elkészíti a jellemzőpont leírását.

Az ORB detektort az ORB osztály create (Python-ban cv.ORB_create) függvénye hozza létre. A detektor beállítható paraméterei az alábbiak:

  • nfeatures: hány darab jellemzőpontot szeretnénk maximálisan kapni eredményül
  • scaleFactor: ez a képpiramis skálafaktora
  • nlevels: a képpiramis szintjeinek a száma
  • edgeThreshold: egy küszöbérték, amely a sarkosságra vonatkozik (mennyire erős éleket vegyen figyelembe)
  • firstLevel: a képpiramis első szintje ahol a detekció megkezdődik
  • WTA_k: a pontok száma, amely alapján a BRIEF leíró elkészíti a leírást.
  • scoreType: be lehet állítani, hogy a Harris vagy a FAST sarokdetektort hasznájuk
  • patchSize: a sarokpont környezetének figyelembe vett mérete a BRIEF leírás készítésétésekor

Példaprogram

Az alábbi példában áttekintjük az ORB detektor használatát. Megjegyzendő, hogy sok más jellemződetektor használata hasonlóképpen használható.

A példa az alábbi lépésekből áll:

  1. Egy kép beolvasása.
  2. A képet szürkeárnyalatossá konvertáljuk.
  3. Létrehozzuk a jellemződetektort.
  4. Jellemzőpontokat (kulcspontokat) detektálunk a szürkeárnyalatos képen.
  5. Kiszámoljuk a jellemzőpontokhoz (kulcspontokhoz) leírókat.
  6. Kirajzoljuk a képre a detektált jellemzőpontokat.

import cv2
import numpy as np
from matplotlib import pyplot as plt

SOURCE_IMAGE='lisbon1.jpg'
OUTPUT_IMAGE='orb_lisbon1.jpg'

## kép beolvasása
img = cv2.imread(SOURCE_IMAGE);

## a képet szürkeárnyalatossá konvertáljuk
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## jellemzőpontok detektálása
nFeaturePoints = 1000
patchSize = 10
scroreType = cv2.ORB_FAST_SCORE
orb = cv2.ORB_create(nfeatures=nFeaturePoints, scoreType=scroreType, patchSize=patchSize)
keypoints = orb.detect(gray_img)

## kulcspont leírók számítása
keypoints, descriptors = orb.compute(gray_img, keypoints)

## kulcspontok kirajzolása
out_img = cv2.drawKeypoints(gray_img, keypoints, descriptors, color=(255, 0, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imwrite(OUTPUT_IMAGE, out_img)