Opencv SIFT SURF ORB FAST 代碼以及效果對比

開發環境:win10 anaconda  python3.6  opencv3

 1、四種特徵提取算法簡介(需要深入的同學可以參考其他博主的博客)

    SIFT特徵主要提取圖像的局部特徵,對平移、旋轉、尺度縮放、亮度變化、遮擋和噪聲等具有很好的不變性,對視覺變化、仿射變換也保持一定程度的穩定性。SURF可以說是從SIFT發展而來的,速度上優於SIFT,快了一個數量級(10倍),並且穩定性要高於SIFT。而FAST算法提取了大量的特徵點,但在計算時間上,比SIFT要快兩個數量級 比SURF快一個數量級。ORB算法基於FAST算法,但是提取的特徵點質量比FAST高,特徵點數目比FAST較少。
    實驗數據在這篇博客:點擊打開鏈接

    計算速度:            ORB>>SURF>>SIFT(各差一個量級)

    旋轉魯棒性:        SURF>ORB~SIFT(表示差不多)

    模糊魯棒性:        SURF>ORB~SIFT

    尺度變換魯棒性: SURF>SIFT>ORB(ORB並不具備尺度變換性)

2、代碼+效果對比

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import cv2

img = cv2.imread(r'C:\Users\Pictures\Camera Roll/test.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# one SIFT
#sift = cv2.xfeatures2d.SIFT_create()
#kp1 = sift.detect(gray,None)
#img1=cv2.drawKeypoints(gray,kp1,img)
#cv2.imshow("sift_Image", img1)
#cv2.imwrite(r'C:\Users\Pictures\Camera Roll/sift_test.jpg',img1)

#Compare four alogorithms

#Another SIFT
sift = cv2.xfeatures2d.SIFT_create()
(kps, descs) = sift.detectAndCompute(gray, None)
img1=cv2.drawKeypoints(gray, kps, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('SIFT_Algorithm', img1)

# SURF
surf = cv2.xfeatures2d.SURF_create()
(kps2, descs2) = surf.detectAndCompute(gray, None)
img2=cv2.drawKeypoints(gray, kps2, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('SURF_Algorithm', img2)

# FAST
fast = cv2.FastFeatureDetector_create()
kps3 = fast.detect(gray, None)
img3=cv2.drawKeypoints(gray, kps3, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('FAST_Algorithm', img3)

# ORB
orb = cv2.ORB_create()
kps4 = orb.detect(gray, None)
(kps4, des4) = orb.compute(gray, kps4)
img4=cv2.drawKeypoints(gray, kps4, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('ORB_Algorithm', img4)

最終的圖像對比爲:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章