使用Python和OpenCV實現SIFT與ORB

2022-06-05 12:42:07 字數 3269 閱讀 9338

目錄如下:

目錄orb_pratice.py

相關理論

import cv2

import numpy as np

"""該程式使用dataset中的1.jpg和2.jpg,使用sift對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,最後計算匹配程度較高的特徵點的單應性矩陣

"""# 讀取

# 建立sift

sift = cv2.xfeatures2d.sift_create()

# 檢測關鍵點並提取特徵

kp1, des1 = sift.detectandcompute(img1, none)

kp2, des2 = sift.detectandcompute(img2, none)

# 特徵匹配:暴力匹配

bf = cv2.descriptormatcher_create(cv2.descriptormatcher_bruteforce)

matches = bf.match(des1, des2)

# 繪製特徵匹配結果

matches = sorted(matches, key=lambda x: x.distance)

good_matches = matches[:50] # 只取前xx個匹配

result = cv2.drawmatches(img1, kp1, img2, kp2, good_matches,

none, matchcolor=(0, 0, 255), singlepointcolor=(255, 0, 0)) # 只畫前xx個匹配

cv2.imshow('result', result)

# 計算單應性矩陣

pts1, pts2 = ,

for f in good_matches:

h, _ = cv2.findhomography(np.float32(pts1), np.float32(pts2), cv2.rho)

print('單應性矩陣:')

print(h)

cv2.waitkey(0)

該程式使用dataset中的1.jpg和2.jpg,使用sift對這2張進行特徵檢測特徵提取,使用暴力匹配法對這2張進行特徵匹配,最後計算匹配程度較高的特徵點的單應性矩陣

"""該程式使用dataset中的3.jpg和4.jpg,使用orb對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,,最後計算匹配程度較高的特徵點的單應性矩陣

"""# 讀取

# 建立orb

orb = cv2.orb_create()

# 檢測關鍵點並提取特徵

kp1, des1 = orb.detectandcompute(img1, none)

kp2, des2 = orb.detectandcompute(img2, none)

# 特徵匹配:暴力匹配、漢明距離

bf = cv2.bfmatcher(cv2.norm_hamming, crosscheck=true)

matches = bf.match(des1, des2)

# 繪製特徵匹配結果

matches = sorted(matches, key=lambda x: x.distance)

good_matches = matches[:50] # 只取前xx個匹配

result = cv2.drawmatches(img1, kp1, img2, kp2, good_matches, none)

cv2.imshow('result', result)

# 計算單應性矩陣

pts1, pts2 = ,

for f in good_matches:

h, _ = cv2.findhomography(np.float32(pts1), np.float32(pts2), cv2.rho)

print('單應性矩陣:')

print(h)

cv2.waitkey(0)

該程式使用dataset中的3.jpg和4.jpg,使用orb對這2張進行特徵檢測特徵提取,使用暴力匹配法對這2張進行特徵匹配,,最後計算匹配程度較高的特徵點的單應性矩陣。

keypoint localization

orientation assignment

keypoint descriptor

特點實現

可以分為4個步驟

構造影象金字塔

在不同降取樣大小的影象下進行fast特徵點提取,進而得到特徵點的尺度資訊

fast演算法

對於影象中乙個畫素點p,其灰度值為ip

以該畫素點為中心考慮乙個半徑為3的離散化的bresenham圓,圓邊界上有16個畫素

設定乙個合適的閾值t,如果圓上有n個連續畫素點的灰度值小於ip−t或者大於ip+t,那麼這個點即可判斷為特徵點(角點),n的值可取9、11、12。

執行完fast演算法,會得到大量特徵點,需要用nms篩選

計算旋轉角度

計算旋轉後的brief描述子

steered brief

rotated brief

單應性變換的作用

單應性變換具有很強的實用性,比如影象配準,影象糾正和紋理扭曲,以及建立全景影象。

關於齊次座標

歡迎討論和交流!

使用Python和OpenCV檢測和標記湖面輪廓

我和小冬瓜 2018 08 04 17 00 opencv是乙個跨平台的計算機視覺庫,廣泛的被應用於物體識別,機器視覺和影象處理等領域。這篇文章裡我們將使用opencv探測地圖中湖面的輪廓,並標記面積最大的湖面。下面示例中來至於goolge地圖截圖。我們需要做的第一件事情就是在我們的python環境...

使用Python和OpenCV進行文字偏斜校正

這篇部落格將介紹如何使用python和opencv進行文字偏斜校正。給定影象包含未知角度的旋轉文字塊,需要通過以下方法糾正文字傾斜 該演算法本身非常簡單,僅依賴於基本的影象處理技術,例如閾值處理,計算旋轉矩形的最小面積,然後應用仿射變換來校正偏斜。通常會在自動文件分析中使用這種文字偏斜校正演算法,目...

Python安裝OpenCV 基本使用

第一步 安裝numpy 第二步 安裝opencv contrib python 設定捕獲視窗大小 ret cap.set 4,240 while cap.isopened ret,frame cap.read gray cv2.cvtcolor frame,cv2.color bgr2gray 彩色...