女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于計(jì)算機(jī)視覺領(lǐng)域中的特征檢測(cè)和匹配研究

3D視覺工坊 ? 來(lái)源:3D視覺工坊 ? 2023-06-16 16:48 ? 次閱讀

我們都知道特征檢測(cè)和匹配是計(jì)算機(jī)視覺領(lǐng)域中的重要任務(wù),它們?cè)谠S多應(yīng)用中發(fā)揮著關(guān)鍵作用,比如SLAM、SFM、AR、VR等許多算法都需要穩(wěn)定精確的特征檢測(cè)和匹配。

特征檢測(cè)算法的意義在于從圖像或視頻中提取出具有獨(dú)特性質(zhì)的特征點(diǎn),這些特征點(diǎn)可以代表圖像中的關(guān)鍵信息。這些特征點(diǎn)通常具有旋轉(zhuǎn)、尺度和光照變化的不變性,使得它們?cè)趫D像的不同位置和角度下都能夠被準(zhǔn)確地檢測(cè)到。

特征匹配算法的意義在于將兩個(gè)或多個(gè)圖像中的特征點(diǎn)進(jìn)行對(duì)應(yīng),以實(shí)現(xiàn)圖像間的關(guān)聯(lián)和匹配。通過(guò)將特征點(diǎn)進(jìn)行匹配,可以進(jìn)行目標(biāo)跟蹤、圖像配準(zhǔn)、三維重建等任務(wù)。

目前個(gè)人認(rèn)為特征檢測(cè)和匹配的研究點(diǎn)包括但不限于以下幾個(gè)方面:

1.特征點(diǎn)檢測(cè)算法的設(shè)計(jì)和改進(jìn),提高特征點(diǎn)的魯棒性和準(zhǔn)確性。

2.特征描述子的設(shè)計(jì)和優(yōu)化,提高特征點(diǎn)的區(qū)分度和匹配性能。

3.多尺度和多模態(tài)特征檢測(cè)與匹配,適應(yīng)不同尺度、視角和傳感器條件下的圖像數(shù)據(jù)。

4.大規(guī)模特征點(diǎn)檢測(cè)和匹配算法,用于處理大規(guī)模圖像數(shù)據(jù)庫(kù)或視頻流。

5.深度學(xué)習(xí)在特征檢測(cè)和匹配中的應(yīng)用,如使用卷積神經(jīng)網(wǎng)絡(luò)提取圖像特征和進(jìn)行匹配。

特征檢測(cè)和匹配的應(yīng)用廣泛,包括但不限于以下幾個(gè)方面:

1.目標(biāo)識(shí)別和跟蹤:通過(guò)檢測(cè)和匹配圖像中的特征點(diǎn),可以實(shí)現(xiàn)目標(biāo)在視頻中的跟蹤和定位,如自動(dòng)駕駛中的目標(biāo)識(shí)別和跟蹤。

2.圖像配準(zhǔn)和拼接:通過(guò)匹配圖像中的特征點(diǎn),可以將多幅圖像進(jìn)行配準(zhǔn)和拼接,生成全景圖像或三維重建模型。

3.增強(qiáng)現(xiàn)實(shí)(AR)和虛擬現(xiàn)實(shí)(VR):特征檢測(cè)和匹配可用于將虛擬對(duì)象與真實(shí)世界進(jìn)行對(duì)齊和融合,實(shí)現(xiàn)更逼真的AR和VR體驗(yàn)。

4.圖像檢索和分類:通過(guò)匹配圖像中的特征點(diǎn),可以對(duì)圖像進(jìn)行相似性搜索和分類,用于圖像檢索和內(nèi)容識(shí)別。

5.三維重建和建模:通過(guò)匹配多個(gè)視角的圖像中的特征點(diǎn),可以進(jìn)行三維重建和場(chǎng)景建模,用于計(jì)算機(jī)輔助設(shè)計(jì)、虛擬現(xiàn)實(shí)等領(lǐng)域。

6.視頻處理和分析:特征檢測(cè)和匹配在視頻處理中可以用于運(yùn)動(dòng)估計(jì)、目標(biāo)跟蹤、動(dòng)作識(shí)別等任務(wù)。

所以,本篇文章針對(duì)不同的實(shí)際應(yīng)用需求,對(duì)三種特征檢測(cè)和匹配算法進(jìn)行總結(jié)并進(jìn)行代碼實(shí)踐:

1.最傳統(tǒng)的且應(yīng)用最為廣泛的SIFT特征檢測(cè)匹配算法。

2.速度和精度之間的平衡,注重實(shí)時(shí)性的SLAM中常用的ORB特征檢測(cè)和匹配算法。

3.最新且效果很好的基于深度學(xué)習(xí)的特征檢測(cè)和匹配算法SuperPoint+SuperGlue。

1.SIFT特征檢測(cè)和匹配算法

關(guān)于SIFT的算法原理及解釋網(wǎng)上有很多資料,如果想深入理解還可以找來(lái)原論文讀一讀,所以這里就簡(jiǎn)單介紹下SIFT特征檢測(cè)和匹配算法。

SIFT是找到圖像中的一些“穩(wěn)定點(diǎn)”,這些點(diǎn)是一些十分突出的點(diǎn),比如角點(diǎn)、邊緣點(diǎn)、暗區(qū)域的亮點(diǎn)以及亮區(qū)域的點(diǎn),其算法假設(shè)兩幅圖像中有相同的景物,那么使用某種方法分別提取各自的穩(wěn)定點(diǎn),這些點(diǎn)之間會(huì)有相互對(duì)應(yīng)的匹配點(diǎn)。

SIFT算法找穩(wěn)定點(diǎn)的方法是找灰度圖的局部最值,由于數(shù)字圖像是離散的,想求導(dǎo)和求最值這些操作都是使用濾波器,而濾波器是有尺寸大小的,使用同一尺寸的濾波器對(duì)兩幅包含有不同尺寸的同一物體的圖像求局部最值將有可能出現(xiàn)一方求得最值而另一方卻沒有的情況,SIFT的精妙之處在于采用圖像金字塔的方法解決這一問(wèn)題,我們可以把兩幅圖像想象成是連續(xù)的,分別以它們作為底面作四棱錐,就像金字塔,那么每一個(gè)截面與原圖像相似,那么兩個(gè)金字塔中必然會(huì)有包含大小一致的物體的無(wú)窮個(gè)截面,但應(yīng)用只能是離散的,所以我們只能構(gòu)造有限層,層數(shù)越多當(dāng)然越好,但處理時(shí)間會(huì)相應(yīng)增加,層數(shù)太少不行,因?yàn)橄蛳虏蓸拥慕孛嬷锌赡苷也坏匠叽绱笮∫恢碌膬蓚€(gè)物體的圖像。有了圖像金字塔就可以對(duì)每一層求出局部最值,但是這樣的穩(wěn)定點(diǎn)數(shù)目將會(huì)很多,所以需要使用某種方法抑制去除一部分點(diǎn),但又使得同一尺度下的穩(wěn)定點(diǎn)得以保存。

這里用C++Python各自實(shí)現(xiàn)一遍:

C++版本:

這里需要自己安裝配置opencv3哈,很簡(jiǎn)單。安裝鏈接:https://blog.csdn.net/qq_43193873/article/details/126144636

在ubuntu20.04LTS下編譯執(zhí)行,首先是CMakeLists.txt的編寫

cmake_minimum_required(VERSION2.8)

set(CMAKE_BUILD_TYPEDebug)
set(DCMAKE_BUILD_TYPEDebug)

project(KeyPointsExtractionAndMatche)

find_package(OpenCV3REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

##CUDA(可選擇,SIFT可以進(jìn)行GPU加速)
#FIND_PACKAGE(CUDA)
#IF(CUDA_FOUND)
#set(EXTRA_INC_DIRS
#${CUDA_INCLUDE_DIRS}
#${CUDA_SDK_INCLUDE_DIR}
#)
#cuda_include_directories(${EXTRA_INC_DIRS}${CMAKE_CURRENT_BINARY_DIR})
#set(EXTRA_LIBRARIES
#${CUDA_LIBS}
#${CUDA_cublas_LIBRARY}
#)
#ENDIF(CUDA_FOUND)

add_executable(KeyPointsExtractionAndMatchemain.cpp)

target_link_libraries(KeyPointsExtractionAndMatche${OpenCV_LIBS})

代碼:

#include
#include
#include

#include
#include
#include


usingnamespacestd;

intmain()
{
//圖像名,自己實(shí)踐時(shí)替換成自己的路徑
stringimage_name1="/home/ccy/code_test/img1.jpg";
stringimage_name2="/home/ccy/code_test/img2.jpg";

//先讀一個(gè)彩色圖像用于后續(xù)繪制特征點(diǎn)匹配對(duì)
cv::Matcolor_img1=cv::imread(image_name1,1);
cv::Matcolor_img2=cv::imread(image_name2,1);

//將圖像轉(zhuǎn)換為灰度圖像,用于SIFT特征提取和匹配
cv::Matgray_img1=cv::imread(image_name1,0);
cv::Matgray_img2=cv::imread(image_name2,0);

//計(jì)算SIFT特征檢測(cè)和匹配的時(shí)間
doublestart=static_cast(cv::getTickCount());
//提取兩幅圖像的SIFT特征點(diǎn)并篩選出匹配的特征點(diǎn)
vectorkeypoints1,keypoints2;
cv::Matdescriptors1,descriptors2;
cv::Ptrdetector=cv::create();
cv::Ptrdescriptor=cv::create();
cv::Ptrmatcher=cv::create("BruteForce");

//----------------------------------------------------------------------------------------------------//
//opencv3里提供了兩種匹配算法,分別是BruteForce和FlannBased,BruteForce是暴力匹配,F(xiàn)lannBased是基于近似最近鄰的匹配。
//BruteForce:通過(guò)計(jì)算兩個(gè)特征描述子之間的歐氏距離或其他相似性度量來(lái)確定匹配程度。
//BruteForce_L1:這種匹配類型使用L1范數(shù)(曼哈頓距離)作為特征描述子之間的距離度量方式。L1范數(shù)是將兩個(gè)向量各個(gè)對(duì)應(yīng)元素的差的絕對(duì)值求和作為距離的度量方式。
//BruteForce_Hamming:這種匹配類型使用漢明距離作為特征描述子之間的距離度量方式。漢明距離是將兩個(gè)向量各個(gè)對(duì)應(yīng)元素的差的絕對(duì)值求和作為距離的度量方式。
//BruteForce_HammingLUT:這種匹配類型使用漢明距離作為特征描述子之間的距離度量方式。漢明距離是將兩個(gè)向量各個(gè)對(duì)應(yīng)元素的差的絕對(duì)值求和作為距離的度量方式。這種匹配類型使用了查找表(LUT)來(lái)加速漢明距離的計(jì)算。
//BruteForce_SL2:這種匹配類型使用平方歐氏距離作為特征描述子之間的距離度量方式。平方歐氏距離是將兩個(gè)向量各個(gè)對(duì)應(yīng)元素的差的平方求和作為距離的度量方式。
//FlannBased:基于近似最近鄰的匹配,使用快速最近鄰搜索包(FLANN)來(lái)計(jì)算。
//----------------------------------------------------------------------------------------------------//

detector->detect(gray_img1,keypoints1);
detector->detect(gray_img2,keypoints2);

descriptor->compute(gray_img1,keypoints1,descriptors1);
descriptor->compute(gray_img2,keypoints2,descriptors2);

//匹配
vectormatches;
matcher->match(descriptors1,descriptors2,matches);
//篩選匹配點(diǎn)
doublemin_dist=10000,max_dist=0;
//找出所有匹配之間的最小距離和最大距離,即是最相似的和最不相似的兩組點(diǎn)之間的距離
for(inti=0;imax_dist)max_dist=dist;
}
cout<<"--?Max?dist?:?"<filteredMatches;
for(inti=0;i

結(jié)果:

6c1e810c-0c1e-11ee-962d-dac502259ad0.png6c354158-0c1e-11ee-962d-dac502259ad0.jpg

Python實(shí)現(xiàn):

importcv2

#讀取彩色圖像
image1_color=cv2.imread('/home/ccy/code_test/img1.jpg',1)
image2_color=cv2.imread('/home/ccy/code_test/img2.jpg',1)

#讀取灰度圖像
image1=cv2.imread('/home/ccy/code_test/img1.jpg',0)
image2=cv2.imread('/home/ccy/code_test/img2.jpg',0)

#計(jì)算SIFT特征檢測(cè)和匹配的時(shí)間
start=cv2.getTickCount()
#創(chuàng)建SIFT對(duì)象
sift=cv2.SIFT_create()

#檢測(cè)關(guān)鍵點(diǎn)和計(jì)算描述子
keypoints1,descriptors1=sift.detectAndCompute(image1,None)
keypoints2,descriptors2=sift.detectAndCompute(image2,None)

#創(chuàng)建FLANN匹配器
flann=cv2.FlannBasedMatcher()

#進(jìn)行特征匹配
matches=flann.knnMatch(descriptors1,descriptors2,k=2)

#篩選匹配結(jié)果
good_matches=[]
form,ninmatches:
ifm.distance

結(jié)果:

6c50d60c-0c1e-11ee-962d-dac502259ad0.png

可以看出FLANN匹配效果還是要比Brute-Force暴力匹配要好很多,速度也更快。

ORB特征檢測(cè)和匹配算法:

ORB(Oriented FAST and Rotated BRIEF)結(jié)合了FAST角點(diǎn)檢測(cè)和BRIEF特征描述子,具有快速、魯棒和旋轉(zhuǎn)不變性的特點(diǎn)。

其中FAST(Features from Accelerated Segment Test)角點(diǎn)檢測(cè)算法通過(guò)比較像素點(diǎn)與其周圍鄰域像素點(diǎn)的灰度值來(lái)判斷該點(diǎn)是否為角點(diǎn)。通過(guò)FAST角點(diǎn)檢測(cè),ORB能夠快速而準(zhǔn)確地檢測(cè)出具有穩(wěn)定性和重復(fù)性的關(guān)鍵點(diǎn)。BRIEF(Binary Robust Independent Elementary Features)特征描述子來(lái)表示關(guān)鍵點(diǎn)的局部特征。BRIEF特征描述子將關(guān)鍵點(diǎn)周圍的像素對(duì)進(jìn)行二進(jìn)制比較,并生成一個(gè)定長(zhǎng)的二進(jìn)制描述子,用于描述關(guān)鍵點(diǎn)的局部特征。這種二進(jìn)制描述子具有較小的存儲(chǔ)空間和快速的匹配速度。

ORB算法具有旋轉(zhuǎn)不變性,這意味著它能夠檢測(cè)和匹配旋轉(zhuǎn)變化后的關(guān)鍵點(diǎn)。為了實(shí)現(xiàn)旋轉(zhuǎn)不變性,ORB在角點(diǎn)檢測(cè)過(guò)程中計(jì)算關(guān)鍵點(diǎn)的方向,并在生成描述子時(shí)根據(jù)關(guān)鍵點(diǎn)的方向進(jìn)行旋轉(zhuǎn)。這樣,即使圖像發(fā)生旋轉(zhuǎn),ORB算法仍然能夠正確地匹配關(guān)鍵點(diǎn)。

ORB算法可以使用暴力匹配(Brute-Force)或近似最近鄰匹配(FLANN)進(jìn)行特征匹配。暴力匹配方法通過(guò)計(jì)算特征描述子之間的歐氏距離或漢明距離來(lái)確定匹配程度。近似最近鄰匹配方法使用FLANN(快速最近鄰搜索庫(kù))算法進(jìn)行近似的最近鄰搜索,以加速匹配過(guò)程。

C++實(shí)踐代碼:

#include
#include
#include

#include
#include
#include


usingnamespacestd;
intmain()
{
//讀取彩色圖像
cv::Matimage1_color=cv::imread("/home/ccy/code_test/img1.jpg",cv::IMREAD_COLOR);
cv::Matimage2_color=cv::imread("/home/ccy/code_test/img2.jpg",cv::IMREAD_COLOR);

//讀取灰度圖像
cv::Matimage1_gray=cv::imread("/home/ccy/code_test/img1.jpg",cv::IMREAD_GRAYSCALE);
cv::Matimage2_gray=cv::imread("/home/ccy/code_test/img2.jpg",cv::IMREAD_GRAYSCALE);

//計(jì)時(shí)
doublestart=static_cast(cv::getTickCount());

//創(chuàng)建ORB對(duì)象
cv::Ptrorb=cv::create();

//檢測(cè)關(guān)鍵點(diǎn)和計(jì)算描述子
std::vectorkeypoints1,keypoints2;
cv::Matdescriptors1,descriptors2;
orb->detectAndCompute(image1_gray,cv::noArray(),keypoints1,descriptors1);
orb->detectAndCompute(image2_gray,cv::noArray(),keypoints2,descriptors2);

//創(chuàng)建FLANN匹配器
//注意:BruteForce_HAMMING匹配類型適用于二進(jìn)制特征描述子,如ORB(Oriented FAST and Rotated BRIEF)和Brief。
//這種匹配類型使用漢明距離(Hamming distance)作為特征描述子之間的距離度量方式。漢明距離是計(jì)算兩個(gè)二進(jìn)制向量之間不同位的數(shù)量。
cv::Ptrmatcher=cv::BRUTEFORCE_HAMMING);

//進(jìn)行特征匹配
std::vectormatches;
matcher->match(descriptors1,descriptors2,matches);

//篩選匹配結(jié)果
std::vectorgoodMatches;
doubleminDist=100.0;
doublemaxDist=0.0;
for(inti=0;imaxDist)
maxDist=dist;
}
doublethresholdDist=0.6*maxDist;
for(inti=0;i

結(jié)果:6c88050a-0c1e-11ee-962d-dac502259ad0.png

python代碼實(shí)現(xiàn):

importcv2

#讀取彩色圖像
image1_color=cv2.imread('/home/ccy/code_test/img1.jpg',1)
image2_color=cv2.imread('/home/ccy/code_test/img2.jpg',1)

#讀取灰度圖像
image1_gray=cv2.imread('/home/ccy/code_test/img1.jpg',cv2.IMREAD_GRAYSCALE)
image2_gray=cv2.imread('/home/ccy/code_test/img2.jpg',cv2.IMREAD_GRAYSCALE)

#計(jì)時(shí)
start=cv2.getTickCount()

#創(chuàng)建ORB對(duì)象
orb=cv2.ORB_create()

#檢測(cè)關(guān)鍵點(diǎn)和計(jì)算描述子
keypoints1,descriptors1=orb.detectAndCompute(image1_gray,None)
keypoints2,descriptors2=orb.detectAndCompute(image2_gray,None)

#創(chuàng)建BFMatcher匹配器
bf=cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck=True)

#進(jìn)行特征匹配
matches=bf.match(descriptors1,descriptors2)

#篩選匹配結(jié)果
matches=sorted(matches,key=lambdax:x.distance)#按距離升序排序
good_matches=matches[:50]#選擇前50個(gè)較好的匹配

end=cv2.getTickCount()
print('ORB匹配時(shí)間:',(end-start)/cv2.getTickFrequency(),'s')

#繪制匹配結(jié)果
result=cv2.drawMatches(image1_color,keypoints1,image2_color,keypoints2,good_matches,None,flags=2)

#保存結(jié)果
cv2.imwrite('ORB_Matches.jpg',result)

結(jié)果:

6ca2eeb0-0c1e-11ee-962d-dac502259ad0.png

從匹配質(zhì)量上看還是SIFT更好,這是沒有疑問(wèn)的,但是速度比SIFT快一個(gè)數(shù)量級(jí)要。

Super Point + Super Glue特征檢測(cè)和匹配算法:

Super Point論文:

D Detone, Malisiewicz T , Rabinovich A . SuperPoint: Self-Supervised Interest Point Detection and Description[C]// 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW). IEEE, 2018.

項(xiàng)目地址:https://github.com/magicleap/SuperPointPretrainedNetwork

Super Glue論文:

P. -E. Sarlin, D. DeTone, T. Malisiewicz and A. Rabinovich, "SuperGlue: Learning Feature Matching With Graph Neural Networks," 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), Seattle, WA, USA, 2020, pp. 4937-4946, doi: 10.1109/CVPR42600.2020.00499.

項(xiàng)目地址:https://github.com/magicleap/SuperGluePretrainedNetwork

簡(jiǎn)單介紹下這兩個(gè)算法,具體的網(wǎng)上有解釋,還可以看原論文。

首先SuperPoint,采用了自監(jiān)督的方法提取特征點(diǎn),設(shè)計(jì)了一個(gè)由特征點(diǎn)檢測(cè)器生成的具有偽真值的數(shù)據(jù)集,而非大量的人工標(biāo)記。為了得到偽真值,首先在大量的虛擬數(shù)據(jù)集上訓(xùn)練了一個(gè)全卷積網(wǎng)絡(luò),這些虛擬數(shù)據(jù)集由一些基本圖形組成,例如線段、三角形、矩形和立方體等,這些基本圖形具有無(wú)爭(zhēng)議的特征點(diǎn)位置;這樣pre-trained得到的檢測(cè)網(wǎng)絡(luò)稱之為MagicPoint,它在虛擬場(chǎng)景中檢測(cè)特征點(diǎn)的性能明顯優(yōu)于傳統(tǒng)方式,但是在真實(shí)的復(fù)雜場(chǎng)景中表現(xiàn)不佳,因此提出了一種多尺度多變換的方法Homographic Adaptation,通過(guò)對(duì)圖像進(jìn)行多次不同的尺度或角度變換來(lái)幫助網(wǎng)絡(luò)能夠在不同視角、不同尺度觀測(cè)到特征點(diǎn)。

6ced6bc0-0c1e-11ee-962d-dac502259ad0.png

然后是SuperGlue,他是一種能夠同時(shí)進(jìn)行特征匹配以及濾除外點(diǎn)的網(wǎng)絡(luò),其中特征匹配是通過(guò)求解可微分最優(yōu)化轉(zhuǎn)移問(wèn)題( optimal transport problem)來(lái)解決,損失函數(shù)由GNN來(lái)構(gòu)建;基于注意力機(jī)制提出了一種靈活的內(nèi)容聚合機(jī)制,這使得SuperGlue能夠同時(shí)感知潛在的3D場(chǎng)景以及進(jìn)行特征匹配。

6cf8a74c-0c1e-11ee-962d-dac502259ad0.png

代碼實(shí)踐:這里介紹一個(gè)常用的特征檢測(cè)、匹配、重建、定位工具包,hloc,里面集成里很多常用的特征檢測(cè)和匹配、重建、定位算法,我們直接拿他的庫(kù)來(lái)進(jìn)行super point和super glue特征檢測(cè)和匹配。

項(xiàng)目地址:https://github.com/cvg/Hierarchical-Localization

首先配置hloc,其需要Python >=3.7 PyTorch >=1.1

gitclone--recursivehttps://github.com/cvg/Hierarchical-Localization/
cdHierarchical-Localization/
python-mpipinstall-e.

代碼:

fromhlocimportextract_features,match_features
fromtqdmimporttqdm
frompathlibimportPath
importargparse
fromhloc.utils.parsersimportparse_retrieval
fromhloc.utils.ioimportget_keypoints,get_matches

importcv2
importnumpyasnp

importtime

if__name__=='__main__':

#添加參數(shù),在運(yùn)行時(shí)輸入自己的--base_dir,比如我的運(yùn)行代碼是'pythonSPSGtest.py--base_dir/home/ccy/code_test'
parser=argparse.ArgumentParser()
parser.add_argument('--base_dir',type=Path,required=True)
args=parser.parse_args()

#圖像所在路徑
images=args.base_dir/'images/'
#輸出路徑
outputs=args.base_dir/'output/'
#要匹配的圖像對(duì)所在路徑,里面每行的內(nèi)容為:img1name img2name
loc_pairs=args.base_dir/'loc_pairs.txt'
#計(jì)時(shí)
start=time.time()
#提取特征和匹配特征的配置文件
feature_conf=extract_features.confs['superpoint_max']
matcher_conf=match_features.confs['superglue']


#提取特征和匹配特征,利用預(yù)訓(xùn)練模型
features=extract_features.main(feature_conf,images,outputs)
loc_matches=match_features.main(matcher_conf,loc_pairs,feature_conf['output'],outputs)
retrieval_dict=parse_retrieval(loc_pairs)

end=time.time()
print('time:',end-start)

#遍歷每一對(duì)圖像,畫出匹配點(diǎn)對(duì)和匹配線
forimg1intqdm(retrieval_dict):
img2=retrieval_dict[img1]
forimg2nameinimg2:
matches,_=get_matches(loc_matches,img1,img2name)
kpts0=get_keypoints(features,img1)
kpts1=get_keypoints(features,img2name)
#找出匹配點(diǎn)對(duì)的坐標(biāo)
kpts0=kpts0[matches[:,0]]
kpts1=kpts1[matches[:,1]]
#畫出匹配點(diǎn)對(duì)
img1=cv2.imread(str(images/img1))
img2=cv2.imread(str(images/img2name))
foriinrange(len(kpts0)):
cv2.circle(img1,(int(kpts0[i][0]),int(kpts0[i][1])),2,(0,0,255),-1)
cv2.circle(img2,(int(kpts1[i][0]),int(kpts1[i][1])),2,(0,0,255),-1)

img3=np.zeros((max(img1.shape[0],img2.shape[0]),img1.shape[1]+img2.shape[1],3),np.uint8)
img3[:img1.shape[0],:img1.shape[1]]=img1
img3[:img2.shape[0],img1.shape[1]:]=img2
#畫出所有匹配線
foriinrange(len(kpts0)):
cv2.line(img3,(int(kpts0[i][0]),int(kpts0[i][1])),(int(kpts1[i][0])+img1.shape[1],int(kpts1[i][1])),(0,255,0),1)

cv2.imwrite('/home/ccy/code_test/result.jpg',img3)

結(jié)果:

6d0c3780-0c1e-11ee-962d-dac502259ad0.png

可以看到SP+SG的結(jié)果又快又準(zhǔn)!
責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2562

    文章

    52524

    瀏覽量

    763442
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3900

    瀏覽量

    65745
  • 計(jì)算機(jī)視覺
    +關(guān)注

    關(guān)注

    9

    文章

    1706

    瀏覽量

    46557

原文標(biāo)題:三種最常用的特征檢測(cè)與匹配算法總結(jié)實(shí)踐!

文章出處:【微信號(hào):3D視覺工坊,微信公眾號(hào):3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    機(jī)器視覺計(jì)算機(jī)視覺的關(guān)系簡(jiǎn)述

    初涉機(jī)器視覺領(lǐng)域,總是容易將其與計(jì)算機(jī)視覺這一概念混淆。實(shí)際上兩者確實(shí)存在一定的相同之處,但也不能因此而將這兩者視為同一概念,因?yàn)檫@兩者還存在著顯著的差別。而與此同時(shí),兩者也還有著密不
    發(fā)表于 05-13 14:57

    計(jì)算機(jī)視覺領(lǐng)域的關(guān)鍵技術(shù)/典型算法模型/通信工程領(lǐng)域的應(yīng)用方案

    重要關(guān)鍵技術(shù)計(jì)算機(jī)視覺領(lǐng)域一般包括如下五類關(guān)鍵技術(shù)。(1)圖像分類圖像分類主要研究內(nèi)容是對(duì)圖像進(jìn)行特征描述。通常,圖像分類算法通過(guò)手工
    發(fā)表于 12-03 13:58

    深度學(xué)習(xí)與傳統(tǒng)計(jì)算機(jī)視覺簡(jiǎn)介

    文章目錄1 簡(jiǎn)介1.1 深度學(xué)習(xí)與傳統(tǒng)計(jì)算機(jī)視覺1.2 性能考量1.3 社區(qū)支持2 結(jié)論3 參考在計(jì)算機(jī)視覺領(lǐng)域中,不同的場(chǎng)景不同的應(yīng)用程序
    發(fā)表于 12-23 06:17

    改進(jìn)的特征點(diǎn)匹配算法

    特征點(diǎn)匹配計(jì)算機(jī)視覺中的關(guān)鍵步驟,在很多領(lǐng)域中都有著的重要應(yīng)用。通過(guò)對(duì)當(dāng)前圖像特征點(diǎn)
    發(fā)表于 05-19 17:20 ?0次下載
    改進(jìn)的<b class='flag-5'>特征</b>點(diǎn)<b class='flag-5'>匹配</b>算法

    計(jì)算機(jī)視覺與機(jī)器視覺區(qū)別

     “計(jì)算機(jī)視覺”,是指用計(jì)算機(jī)實(shí)現(xiàn)人的視覺功能,對(duì)客觀世界的三維場(chǎng)景的感知、識(shí)別和理解。計(jì)算機(jī)視覺
    的頭像 發(fā)表于 12-08 09:27 ?1.3w次閱讀

    計(jì)算機(jī)視覺研究方向有哪些

    本視頻主要詳細(xì)介紹了計(jì)算機(jī)視覺研究方向有哪些,分別是圖像分類、目標(biāo)檢測(cè)、 圖像分割、目標(biāo)跟蹤、 圖像濾波與降噪、圖像增強(qiáng)、 風(fēng)格化、 三維重建、 圖像檢索。
    的頭像 發(fā)表于 04-04 16:11 ?5.1w次閱讀

    計(jì)算機(jī)視覺中的重要研究方向

    主要介紹計(jì)算機(jī)視覺中的幾個(gè)重要的研究方向。主要包括圖像分類、目標(biāo)檢測(cè)、語(yǔ)義分割、實(shí)例分割、全景分割等。通過(guò)對(duì)這幾個(gè)計(jì)算機(jī)
    的頭像 發(fā)表于 11-19 14:32 ?1.2w次閱讀

    目標(biāo)檢測(cè)計(jì)算機(jī)視覺領(lǐng)域中一個(gè)新興的應(yīng)用方向

    目標(biāo)檢測(cè)計(jì)算機(jī)視覺領(lǐng)域中一個(gè)新興的應(yīng)用方向。圖像分類是對(duì)圖像進(jìn)行分類,比如判斷圖像中是否是車。定位分類不僅要圖片分類,而且需要確定目標(biāo)在圖像中的哪個(gè)位置。目標(biāo)
    的頭像 發(fā)表于 02-12 15:39 ?5859次閱讀
    目標(biāo)<b class='flag-5'>檢測(cè)</b>是<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺</b><b class='flag-5'>領(lǐng)域中</b>一個(gè)新興的應(yīng)用方向

    計(jì)算機(jī)視覺之目標(biāo)檢測(cè)

    目標(biāo)檢測(cè)計(jì)算機(jī)視覺領(lǐng)域中一個(gè)新興的應(yīng)用方向。圖像分類是對(duì)圖像進(jìn)行分類,比如判斷圖像中是否是車。定位分類不僅要圖片分類,而且需要確定目標(biāo)在圖像中的哪個(gè)位置。目標(biāo)
    發(fā)表于 03-06 06:02 ?2次下載
    <b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺</b>之目標(biāo)<b class='flag-5'>檢測(cè)</b>

    雙目立體計(jì)算機(jī)視覺的立體匹配研究綜述

    雙目立體視覺技術(shù)具有成本低、適用性廣的優(yōu)點(diǎn),在物體識(shí)別、目標(biāo)檢測(cè)等方面應(yīng)用廣泛,成為計(jì)算機(jī)視覺領(lǐng)域研究
    發(fā)表于 04-12 09:47 ?3次下載
    雙目立體<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺</b>的立體<b class='flag-5'>匹配</b><b class='flag-5'>研究</b>綜述

    計(jì)算機(jī)視覺中不同的特征提取方法對(duì)比

    特征提取是計(jì)算機(jī)視覺中的一個(gè)重要主題。不論是SLAM、SFM、三維重建等重要應(yīng)用的底層都是建立在特征點(diǎn)跨圖像可靠地提取和匹配之上。
    的頭像 發(fā)表于 07-11 10:28 ?4026次閱讀

    三種最常用的特征檢測(cè)匹配算法總結(jié)

    我們都知道特征檢測(cè)匹配計(jì)算機(jī)視覺領(lǐng)域中的重要任務(wù),它們?cè)谠S多應(yīng)用中發(fā)揮著關(guān)鍵作用,比如SLA
    的頭像 發(fā)表于 06-19 11:27 ?6892次閱讀
    三種最常用的<b class='flag-5'>特征</b><b class='flag-5'>檢測(cè)</b>與<b class='flag-5'>匹配</b>算法總結(jié)

    機(jī)器視覺計(jì)算機(jī)視覺的區(qū)別

    機(jī)器視覺計(jì)算機(jī)視覺的區(qū)別 機(jī)器視覺計(jì)算機(jī)視覺是兩個(gè)相關(guān)但不同的概念。雖然許多人使用這兩個(gè)術(shù)語(yǔ)
    的頭像 發(fā)表于 08-09 16:51 ?2370次閱讀

    計(jì)算機(jī)視覺的主要研究方向

    計(jì)算機(jī)視覺(Computer Vision, CV)作為人工智能領(lǐng)域的一個(gè)重要分支,致力于使計(jì)算機(jī)能夠像人眼一樣理解和解釋圖像和視頻中的信息。隨著深度學(xué)習(xí)、大數(shù)據(jù)等技術(shù)的快速發(fā)展,
    的頭像 發(fā)表于 06-06 17:17 ?1642次閱讀

    計(jì)算機(jī)視覺和機(jī)器視覺區(qū)別在哪

    計(jì)算機(jī)視覺和機(jī)器視覺是兩個(gè)密切相關(guān)但又有明顯區(qū)別的領(lǐng)域。 一、定義 計(jì)算機(jī)視覺
    的頭像 發(fā)表于 07-09 09:22 ?778次閱讀