最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python利用opencv實現(xiàn)SIFT特征提取與匹配

 更新時間:2020年03月05日 08:36:26   作者:無落  
這篇文章主要為大家詳細介紹了python利用opencv實現(xiàn)SIFT特征提取與匹配,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了利用opencv實現(xiàn)SIFT特征提取與匹配的具體代碼,供大家參考,具體內(nèi)容如下

1、SIFT

1.1、sift的定義

SIFT,即尺度不變特征變換(Scale-invariant feature transform,SIFT),是用于圖像處理領(lǐng)域的一種描述。這種描述具有尺度不變性,可在圖像中檢測出關(guān)鍵點,是一種局部特征描述子。

1.2、sift算法介紹

SIFT由David Lowe在1999年提出,在2004年加以完善 。SIFT在數(shù)字圖像的特征描述方面當(dāng)之無愧可稱之為最紅最火的一種,許多人對SIFT進行了改進,誕生了SIFT的一系列變種。SIFT已經(jīng)申請了專利(所以現(xiàn)在opencv使用這個算法,需要低的版本)。

SIFT特征是基于物體上的一些局部外觀的興趣點而與影像的大小和旋轉(zhuǎn)無關(guān)。對于光線、噪聲、微視角改變的容忍度也相當(dāng)高?;谶@些特性,它們是高度顯著而且相對容易擷取,在母數(shù)龐大的特征數(shù)據(jù)庫中,很容易辨識物體而且鮮有誤認。使用SIFT特征描述對于部分物體遮蔽的偵測率也相當(dāng)高,甚至只需要3個以上的SIFT物體特征就足以計算出位置與方位。在現(xiàn)今的電腦硬件速度下和小型的特征數(shù)據(jù)庫條件下,辨識速度可接近即時運算。SIFT特征的信息量大,適合在海量數(shù)據(jù)庫中快速準確匹配。

SIFT算法具有如下一些特點:

1)SIFT特征是圖像的局部特征,其對旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性;
2)區(qū)分性(Distinctiveness)好,信息量豐富,適用于在海量特征數(shù)據(jù)庫中進行快速、準確的匹配;
3)多量性,即使少數(shù)的幾個物體也可以產(chǎn)生大量的SIFT特征向量;
4)高速性,經(jīng)優(yōu)化的SIFT匹配算法甚至可以達到實時的要求;
5)可擴展性,可以很方便的與其他形式的特征向量進行聯(lián)合。

1.3、特征檢測

SIFT特征檢測主要包括以下4個基本步驟:
1)尺度空間極值檢測:搜索所有尺度上的圖像位置。通過高斯微分函數(shù)來識別潛在的對于尺度和旋轉(zhuǎn)不變的興趣點。
2)關(guān)鍵點定位:在每個候選的位置上,通過一個擬合精細的模型來確定位置和尺度。關(guān)鍵點的選擇依據(jù)于它們的穩(wěn)定程度。
3)方向確定:基于圖像局部的梯度方向,分配給每個關(guān)鍵點位置一個或多個方向。所有后面的對圖像數(shù)據(jù)的操作都相對于關(guān)鍵點的方向、尺度和位置進行變換,從而提供對于這些變換的不變性。
4)關(guān)鍵點描述:在每個關(guān)鍵點周圍的鄰域內(nèi),在選定的尺度上測量圖像局部的梯度。這些梯度被變換成一種表示,這種表示允許比較大的局部形狀的變形和光照變化。

1.4、特征匹配

SIFT特征匹配主要包括2個階段:

第一階段:SIFT特征的生成,即從多幅圖像中提取對尺度縮放、旋轉(zhuǎn)、亮度變化無關(guān)的特征向量。
第二階段:SIFT特征向量的匹配。

SIFT特征的生成一般包括以下幾個步驟:

1)構(gòu)建尺度空間,檢測極值點,獲得尺度不變性。
2)特征點過濾并進行精確定位。
3)為特征點分配方向值。
4)生成特征描述子。以特征點為中心取16×16的鄰域作為采樣窗口,將采樣點與特征點的相對方向通過高斯加權(quán)后歸入包含8個bin的方向直方圖,最后獲得4×4×8的128維特征描述子。當(dāng)兩幅圖像的SIFT特征向量生成以后,下一步就可以采用關(guān)鍵點特征向量的歐式距離來作為兩幅圖像中關(guān)鍵點的相似性判定度量。取圖1的某個關(guān)鍵點,通過遍歷找到圖像2中的距離最近的兩個關(guān)鍵點。在這兩個關(guān)鍵點中,如果最近距離除以次近距離小于某個閾值,則判定為一對匹配點。

2、python實現(xiàn)

2.1、準備工作

由于SIFT已經(jīng)申請了專利,所以在高版本的opencv中,會出現(xiàn)錯誤,以前是opencv4.0.1,然后安裝版本為opencv3.4.2.16
卸載以前的版本(低版本,可以試試直接運行代碼):

pip uninstall opencv-python
pip uninstall opencv-contrib-python

用命令行(CMD),采用pip方式:

pip install opencv_python==3.4.2.16 
pip install opencv-contrib-python==3.4.2.16

2.2、代碼實現(xiàn)

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年6月14日
@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重慶交大'
__updated__ = '2019-06-14'
from matplotlib import pyplot as plt
from imagedt.decorator import time_cost
import cv2
print('cv version: ', cv2.__version__)

def bgr_rgb(img):
 (r, g, b) = cv2.split(img)
 return cv2.merge([b, g, r])

def orb_detect(image_a, image_b):
 # feature match
 orb = cv2.ORB_create()
 kp1, des1 = orb.detectAndCompute(image_a, None)
 kp2, des2 = orb.detectAndCompute(image_b, None)
 # create BFMatcher object
 bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
 # Match descriptors.
 matches = bf.match(des1, des2)
 # Sort them in the order of their distance.
 matches = sorted(matches, key=lambda x: x.distance)
 # Draw first 10 matches.
 img3 = cv2.drawMatches(image_a, kp1, image_b, kp2,
    matches[:100], None, flags=2)
 return bgr_rgb(img3)

@time_cost
def sift_detect(img1, img2, detector='surf'):
 if detector.startswith('si'):
 print("sift detector......")
 sift = cv2.xfeatures2d.SURF_create()
 else:
 print("surf detector......")
 sift = cv2.xfeatures2d.SURF_create()
 # find the keypoints and descriptors with SIFT
 kp1, des1 = sift.detectAndCompute(img1, None)
 kp2, des2 = sift.detectAndCompute(img2, None)
 # BFMatcher with default params
 bf = cv2.BFMatcher()
 matches = bf.knnMatch(des1, des2, k=2)
 # Apply ratio test
 good = [[m] for m, n in matches if m.distance < 0.5 * n.distance]
 # cv2.drawMatchesKnn expects list of lists as matches.
 img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good, None, flags=2)
 return bgr_rgb(img3)

if __name__ == "__main__":
 # load image
 image_a = cv2.imread('G:/2018and2019two/qianrushi/wuluo1.jpg')#絕對路徑
 image_b = cv2.imread('G:/2018and2019two/qianrushi/wuluo2.jpg')
 # ORB
 # img = orb_detect(image_a, image_b)
 # SIFT or SURF
 img = sift_detect(image_a, image_b)
 plt.imshow(img)
 plt.show()

2.3、運行結(jié)果

采用同一張圖片:

兩張有重疊部分的代碼:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python Json與pickle模塊序列化使用介紹

    Python Json與pickle模塊序列化使用介紹

    這篇文章主要為大家介紹了Python中常用的兩個序列化模塊:pickle序列化和json序列化。文中的示例代碼講解詳細,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-10-10
  • Django項目實戰(zhàn)之配置文件詳解

    Django項目實戰(zhàn)之配置文件詳解

    這篇文章主要給大家介紹了關(guān)于Django項目實戰(zhàn)之配置文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python爬蟲爬取疫情數(shù)據(jù)并可視化展示

    Python爬蟲爬取疫情數(shù)據(jù)并可視化展示

    這篇文章主要介紹了Python利用爬蟲爬取疫情數(shù)據(jù)并進行可視化的展示,文中的示例代碼講解清晰,對工作或?qū)W習(xí)有一定的價值,需要的朋友可以參考一下
    2021-12-12
  • java_error_in_pycharm64.hprof文件作用、風(fēng)險與處理建議解析

    java_error_in_pycharm64.hprof文件作用、風(fēng)險與處理建議解析

    這篇文章主要介紹了java_error_in_pycharm64.hprof文件作用、風(fēng)險與處理的相關(guān)資料,java_error_in_pycharm64.hprof是PyCharmrm生成的JVM內(nèi)存轉(zhuǎn)儲文件,記錄JVM錯誤時的內(nèi)存狀態(tài),需要的朋友可以參考下
    2026-05-05
  • python實現(xiàn)圖像高斯金字塔的示例代碼

    python實現(xiàn)圖像高斯金字塔的示例代碼

    這篇文章主要介紹了python實現(xiàn)圖像高斯金字塔的示例代碼,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • Python使用BeautifulSoup4解析HTML文檔的操作指南

    Python使用BeautifulSoup4解析HTML文檔的操作指南

    本文介紹如何使用Python庫BeautifulSoup4解析HTML文檔,包括基本概念、對象類型及多種搜索方法,幫助讀者快速掌握HTML數(shù)據(jù)抓取技巧,需要的朋友可以參考下
    2026-01-01
  • Python中字典映射類型的學(xué)習(xí)教程

    Python中字典映射類型的學(xué)習(xí)教程

    這篇文章主要介紹了Python中字典映射類型的學(xué)習(xí)教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 使用python實現(xiàn)多維數(shù)據(jù)降維操作

    使用python實現(xiàn)多維數(shù)據(jù)降維操作

    今天小編就為大家分享一篇使用python實現(xiàn)多維數(shù)據(jù)降維操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 最新評論

    波密县| 康定县| 昂仁县| 蒙阴县| 杂多县| 石首市| 惠州市| 同心县| 台南市| 云林县| 竹北市| 资兴市| 东海县| 环江| 大足县| 禹城市| 呼伦贝尔市| 南乐县| 南投市| 河南省| 军事| 大新县| 孝义市| 柳江县| 江山市| 阜宁县| 平武县| 遵化市| 新安县| 乌海市| 荥阳市| 蕉岭县| 牟定县| 黑龙江省| 都匀市| 海安县| 武宁县| 余庆县| 平罗县| 阿瓦提县| 保定市|