特征检测点上的光流

时间:2019-05-16 22:43:54

标签: python opencv deep-learning computer-vision feature-detection

背景:

我正在为一个学校的项目工作。我有一个树莓派,一辆小型遥控车和一台相机。我的任务是遵循一条路径(地面上的路线)并避免基于计算机视觉的障碍。到目前为止,我可以跟踪并跟踪。

现在我想避免障碍,我有两个想法:

第一个想法:

1。)在两个图像中用冲浪检测特征 2.)计算特征的光流 3.)将CNN或Tensorflow与计算出的光流一起使用,以避免障碍物

第二个想法:

1。)在两个图像中用冲浪检测特征 2.)计算基本矩阵 3.)使用反极性几何来计算特征相对于相机的距离

我认为第一种方法有意义。 到目前为止,这是我的代码:

import numpy as np
import cv2 
import time

cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image', 1000,1000)
cap = cv2.VideoCapture(0)


# FLANN parameters
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)   # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)


#create surf
surf = cv2.xfeatures2d.SURF_create()
cv2.xfeatures2d.hessianThreshold = 50000


#get features from first frame
ret, old_frame = cap.read()
old_frame = cv2.flip(old_frame,1)
old_kp, old_dp = surf.detectAndCompute(old_frame, None)





while(True):

    # Capture frame-by-frame
    ret, new_frame = cap.read()
    new_frame = cv2.flip(new_frame,1)

    new_kp, new_dp = surf.detectAndCompute(new_frame, None)



    if len(new_kp) > 2 and len(old_kp) != 2:
        #match
        matches = flann.knnMatch(old_dp,new_dp,k=2)


        matchesMask = [[0,0] for i in range(len(matches), 0, -1)]
        # ratio test as per Lowe's paper
        for i,(m,n) in enumerate(matches):
            if m.distance < 0.7*n.distance:
                matchesMask[i]=[1,0]


        draw_params = dict(matchColor = (0,255,0), singlePointColor = (255,0,0),matchesMask = matchesMask,flags = 0)


        result = cv2.drawMatchesKnn(old_frame,old_kp,new_frame,new_kp,matches,None,**draw_params)




    old_frame = new_frame
    old_kp = new_kp
    old_dp = new_dp

    # Display the resulting frame
    cv2.imshow('image',result)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

我可以检测特征,但是我不知道如何计算这些点的光通量。 我试图在openCV中使用cv2.calcOpticalFlowPyrLK()函数,但这对我不起作用。

我的问题:

我的想法/方法正确吗?这样可以避免障碍吗?

我该如何计算冲浪钥匙的光流?

预先感谢

0 个答案:

没有答案