视觉特征--ORB系列
ORB 特征提取算法--理論
ORB 特征提取算法(理論篇) - Alex777 - 博客園
ORB 特征提取算法--實踐篇
ORB 特征提取算法(理論篇) - Alex777 - 博客園
Python OpenCV orb特征提取和匹配
OpenCV-Python ORB特征匹配(實踐篇)_Loner...的博客-CSDN博客_orb
調整圖像大小
python-opencv-圖像縮放 - 天子驕龍 - 博客園
import cv2 as cv
import numpy as np
def ORB_Feature(img1, img2):
? ? # 初始化ORB
? ? i = 0
? ? orb = cv.ORB_create()
? ? # 尋找關鍵點
? ? kp1 = orb.detect(img1)
? ? kp2 = orb.detect(img2)
? ? # 計算描述符
? ? kp1, des1 = orb.compute(img1, kp1)
? ? kp2, des2 = orb.compute(img2, kp2)
? ? # 畫出關鍵點
? ? outimg1 = cv.drawKeypoints(img1, keypoints=kp1, outImage=None)
? ? outimg2 = cv.drawKeypoints(img2, keypoints=kp2, outImage=None)
? ? # 顯示關鍵點
? ? # import numpy as np
? ? # outimg3 = np.hstack([outimg1, outimg2])
? ? # cv.imshow("Key Points", outimg3)
? ? # cv.waitKey(0)
? ? # 初始化 BFMatcher
? ? bf = cv.BFMatcher(cv.NORM_HAMMING)
? ? # 對描述子進行匹配
? ? matches = bf.match(des1, des2)
? ? # 計算最大距離和最小距離
? ? min_distance = matches[0].distance
? ? max_distance = matches[0].distance
? ? for x in matches:
? ? ? ? if x.distance < min_distance:
? ? ? ? ? ? min_distance = x.distance
? ? ? ? if x.distance > max_distance:
? ? ? ? ? ? max_distance = x.distance
? ? # 篩選匹配點
? ? '''
? ? ? ? 當描述子之間的距離大于兩倍的最小距離時,認為匹配有誤。
? ? ? ? 但有時候最小距離會非常小,所以設置一個經驗值30作為下限。
? ? '''
? ? good_match = []
? ? for x in matches:
? ? ? ? if x.distance <= max(1.1 * min_distance, 30):
? ? ? ? ? ? good_match.append(x)
? ? ? ? ? ? i = i + 1
? ? # 繪制匹配結果
? ? draw_match(img1, img2, kp1, kp2, good_match)
? ? print (i)
def draw_match(img1, img2, kp1, kp2, match):
? ? outimage = cv.drawMatches(img1, kp1, img2, kp2, match, outImg=None)
? ? cv.imshow("Match Result", outimage)
? ? cv.waitKey(0)
if __name__ == '__main__':
? ? # 讀取圖片
? ? img1 = cv.imread('E:\Tests\img1.jpg')
? ? img1 = cv.resize(img1, (960, 640))
? ? img2 = cv.imread('E:\Tests\img3.jpg')
? ? img2 = cv.resize(img2, (960, 640))
? ? ORB_Feature(img1, img2)
?
擴展: ORB特征檢測完之后,如何畫出并顯示。
函數表示:
cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
image?? ?
原始圖像,可以使三通道或單通道圖像;
keypoints?? ?特征點向量,向量內每一個元素是一個KeyPoint對象,包含了特征點的各種屬性信息;
outImage?? ?特征點繪制的畫布圖像,可以是原圖像;
color?? ?繪制的特征點的顏色信息,默認繪制的是隨機彩色;
flags?? ?
特征點的繪制模式,其實就是設置特征點的那些信息需要繪制,那些不需要繪制,有以下幾種模式可選:
DRAW_MATCHES_FLAGS_DEFAULT:只繪制特征點的坐標點,顯示在圖像上就是一個個小圓點,每個小圓點的圓心坐標都是特征點的坐標。
DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:函數不創建輸出的圖像,而是直接在輸出圖像變量空間繪制,要求本身輸出圖像變量就是一個初始化好了的,size與type都是已經初始化好的變量。
DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS :單點的特征點不被繪制。
DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:繪制特征點的時候繪制的是一個個帶有方向的圓,這種方法同時顯示圖像的坐標,size和方向,是最能顯示特征的一種繪制方式。
示例代碼:
import cv2
import numpy as np
?
?
def SIFT(img):
? ? I = cv2.imread(img)
? ? descriptor = cv2.xfeatures2d.SIFT_create() ?# 在2004年,不列顛哥倫比亞大學的D.Lowe在他的論文中提出了一種新的算法,即尺度不變特征變換(SIFT)
? ? (kps, features) = descriptor.detectAndCompute(I, None)
? ? cv2.drawKeypoints(I, kps, I, (0, 255, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
? ? cv2.imshow('img', I)
? ? cv2.waitKey(0)
? ? cv2.imwrite('sift_keypoints.jpg', I)
? ? cv2.destroyAllWindows()
?
?
if __name__ == '__main__':
? ? SIFT('left.png')
運行結果:
以上代碼參考網友的內容,稍加修改,換成orb特征提取和顯示部分內容即可。
import numpy as np import cv2 from matplotlib import pyplot as pltimg = cv2.imread('E:/Tests/corridor-1.jpg',0)plt.imshow(img) plt.show()# Initiate STAR detector orb = cv2.ORB_create()# find the keypoints with ORB kp = orb.detect(img,None)# draw only keypoints location,not size and orientation #img2 = cv2.drawKeypoints(img, kp, None, color=(0,255,0), flags=0) img2 = cv2.drawKeypoints(img, kp, img, color=None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) plt.imshow(img2) plt.show()擴展: 用于ORB-SLAM中的orb特征描述和解析
3D視覺(四):ORB特征提取與匹配_Twilight737的博客-CSDN博客3D視覺(四):ORB特征提取與匹配提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加例如:第一章 Python 機器學習入門之pandas的使用提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔文章目錄3D視覺(四):ORB特征提取與匹配前言一、pandas是什么?二、使用步驟1.引入庫2.讀入數據總結前言提示:這里可以添加本文要記錄的大概內容:例如:隨著人工智能的不斷發展,機器學習這門技術也越來越重要,很多人都開啟了學習機器學習,本文就介紹了機器學習的基礎https://blog.csdn.net/Twilight737/article/details/121860262?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1&utm_relevant_index=3
擴展--特征提取方法
OpenCV探索之路(二十三):特征檢測和特征匹配方法匯總 - Madcola - 博客園
總結
以上是生活随笔為你收集整理的视觉特征--ORB系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人学习--Mobile robot国
- 下一篇: 机器人学习--机器人仿真环境汇总