27 lines
874 B
Python
27 lines
874 B
Python
|
import cv2
|
||
|
import numpy as np
|
||
|
from .helpers import corners_to_keypoints
|
||
|
|
||
|
|
||
|
class HARRIS:
|
||
|
def __init__(self, blockSize=2, apertureSize=3, k=0.1, T=0.02):
|
||
|
self.blockSize = blockSize
|
||
|
self.apertureSize = apertureSize
|
||
|
self.k = k
|
||
|
self.T = T
|
||
|
|
||
|
def detect(self, img):
|
||
|
# convert our input image to a floating point data type and then
|
||
|
# compute the Harris corner matrix
|
||
|
gray = np.float32(img)
|
||
|
H = cv2.cornerHarris(gray, self.blockSize, self.apertureSize, self.k)
|
||
|
|
||
|
# for every (x, y)-coordinate where the Harris value is above the
|
||
|
# threshold, create a keypoint (the Harris detector returns
|
||
|
# keypoint size a 3-pixel radius)
|
||
|
kps = np.argwhere(H > self.T * H.max())
|
||
|
kps = [cv2.KeyPoint(pt[1], pt[0], 3) for pt in kps]
|
||
|
|
||
|
# return the Harris keypoints
|
||
|
return kps
|