电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python利用opencv實現SIFT特征提取與匹配

瀏覽:5日期:2022-08-04 09:19:10

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

1、SIFT

1.1、sift的定義

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

1.2、sift算法介紹

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

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

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

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

1.3、特征檢測

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

1.4、特征匹配

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

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

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

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

2、python實現

2.1、準備工作

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

pip uninstall opencv-pythonpip uninstall opencv-contrib-python

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

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

python利用opencv實現SIFT特征提取與匹配

2.2、代碼實現

#!/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 pltfrom imagedt.decorator import time_costimport cv2print(’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_costdef 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、運行結果

采用同一張圖片:

python利用opencv實現SIFT特征提取與匹配

兩張有重疊部分的代碼:

python利用opencv實現SIFT特征提取與匹配

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 逗网红-抖音网红-快手网红-各大平台网红物品导航 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | 直线模组_滚珠丝杆滑台_模组滑台厂家_万里疆科技 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 南京泽朗生物科技有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商| 学生作文网_中小学生作文大全与写作指导| 户外环保不锈钢垃圾桶_标识标牌制作_园林公园椅厂家_花箱定制-北京汇众环艺 | 韦伯电梯有限公司| 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 |