ORB-SLAM2-金字塔求解-特征點的提取-描述子的計算

//這個成員函數重載了函數括號運算符,讓他具有函數的特點
//但是還不知道在其他程序塊是如何應用這塊代碼的。
//InputArray和OutputArray是opencv中的兩個函數接口
void ORBextractor::operator()( InputArray _image, InputArray _mask, vector<KeyPoint>& _keypoints,OutputArray _descriptors)
{ if(_image.empty())return;//將輸入的圖像轉換為Mat數據類型Mat image = _image.getMat();//判斷數據類型是不是8bits單通道類型assert(image.type() == CV_8UC1 );// Pre-compute the scale pyramid//先計算輸入圖像的金字塔ComputePyramid(image);//從金字塔中的每一層圖像中獲取所有的特征點都存儲在allKeypoints向量中vector < vector<KeyPoint> > allKeypoints;ComputeKeyPointsOctTree(allKeypoints);//ComputeKeyPointsOld(allKeypoints);Mat descriptors;int nkeypoints = 0;//將每一層獲取的特征點的個數累加for (int level = 0; level < nlevels; ++level)nkeypoints += (int)allKeypoints[level].size();if( nkeypoints == 0 )_descriptors.release();else{//OutputArray是InputArray的派生類,在使用_OutputArray.getMat()之前要先用create()來為    //矩陣分配內存。_descriptors.create(nkeypoints, 32, CV_8U);descriptors = _descriptors.getMat();}_keypoints.clear();_keypoints.reserve(nkeypoints);int offset = 0;for (int level = 0; level < nlevels; ++level){//首先獲取每一層圖像上提取的特征點vector<KeyPoint>& keypoints = allKeypoints[level];//統計每層圖像上提取的特征點的個數int nkeypointsLevel = (int)keypoints.size();if(nkeypointsLevel==0)continue;// preprocess the resized image//每次將金字塔上某一層上的圖像復制都workingMat中Mat workingMat = mvImagePyramid[level].clone();//對這個圖像用高斯濾波器進行平滑,輸出的圖像仍然放在workingMat中的GaussianBlur(workingMat, workingMat, Size(7, 7), 2, 2, BORDER_REFLECT_101);//平滑之后計算描述子// Compute the descriptors//一個特征點的描述子占一行Mat desc = descriptors.rowRange(offset, offset + nkeypointsLevel);computeDescriptors(workingMat, keypoints, desc, pattern);//將所有層上的特征點的描述子都放在一起,每一行是一個描述子offset += nkeypointsLevel;// Scale keypoint coordinatesif (level != 0){//scale是金字塔中不同層圖像所代表的尺度,越往上尺度越大float scale = mvScaleFactor[level]; //getScale(level, firstLevel, scaleFactor);//我們先前在提取金字塔中每一層圖像中的特征點時,特征點的坐標都設置為了在當前圖像//下的坐標,從第i-1層圖像變為第i層圖像,相當于將圖像中每一個像素點的坐標除以1.2//所以為了得到每一層圖像上提取的特征點在原圖像中的坐標位置需要乘以1.2。for (vector<KeyPoint>::iterator keypoint = keypoints.begin(),keypointEnd = keypoints.end(); keypoint != keypointEnd; ++keypoint)keypoint->pt *= scale;}// And add the keypoints to the output_keypoints.insert(_keypoints.end(), keypoints.begin(), keypoints.end());}
}
//按照上面的操作步驟是提取到每層圖像上的特征點之后直接就計算特征點的描述子,和將每層中提取的特征
//點的坐標還原到原圖像上去。而沒有先用四叉樹對提取的特征點進行優化。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

am335x uboot, kernel 編譯

一、設置環境變量// 寫在家目錄下面的 .bashrc 里面export KERNEL_PATH~/aplex/kernel3.2.0 // kernel 路徑export UBOOT_PATH~/aplex/uboot2011.09 // u-boot 路勁export ROOTFS_PATH~/aplex/filesystemexport TOOLFS_PATH~/aplex/toolsexport ARCHarm …

php+ajax簡單實現跨域(http+https)請求調用

當一個網站 a站 需要調用另一個網站 b站 列表文章時 比如&#xff1a;www.a123.com 調用 www.b456.com 文章 在 a站 建立php文件獲取 b站 資源文章到本地后&#xff0c;再傳遞a站前端 在網站 b456 下的文件為 <ul class"ls_wz"> <li><a href"#&q…

ORB-SLAM2中MapPoints的描述子的計算

//我們在從金字塔的圖像中獲取特征點時為每一個特征點計算了描述子 //現在看看如何計算一個空間的地圖點的描述子 void MapPoint::ComputeDistinctiveDescriptors() {// Retrieve all observed descriptorsvector<cv::Mat> vDescriptors;//獲取到某一個地圖點可以被哪些關…

HDU:4185-Oil Skimming

Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description Thanks to a certain “green” resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floa…

域控制器情況分析

域控制器情況分析 1、Windows Server 的 Foundation、Standard、Enterprise 以及 Datacenter 版本號既可作為源server&#xff0c;也可作為目標server。僅支持將 Foundation Server 版本號作為受限方案中的目標server。在使用 Foundation Server 作為目標server之前&#xff0c…

Linux基礎命令---su

su臨時切換身份到另外一個用戶&#xff0c;使用su切換用戶之后&#xff0c;不會改變當前的工作目錄&#xff0c;但是會改變一些環境變量。此命令的適用范圍&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、語法su [選項] [參數]2、選項列表--help顯示…

在Ubuntu 16.04 上安裝和卸載matlab 2018b(Install and uninstall matlab 2018b on ubuntu)

1.安裝2018b可以參考下面兩篇文章 https://www.ph0en1x.space/2018/04/23/ubuntu_matlab/ https://blog.csdn.net/qq_32892383/article/details/79670871 2.卸載2018b 我的默認安裝在 /usr/local/MATLAB $ sudo rm -r /usr/local/MATLAB $ cd ~ $ ll (這個時候可以看到隱…

04.openssl編程——哈希表

4.1 哈希表在一般的數據結構如線性表和樹中&#xff0c;記錄在結構中的相對位置與記錄的關鍵字之間不存在確定的關系&#xff0c;在結構中查找記錄時需要進行一系列的關鍵字比較。這一類查找方法建立在比較的基礎上&#xff0c;查找的效率與比較次數密切相關。理想的情況是能…

shell數組中“和@的妙用

#!/bin/bashlist(4k"8k a bit""16k abc""32k gold"64k)for i in "${list[]}"do echo $idone 分別對比一下不帶” 和換成*&#xff0c;之間的區別。轉載于:https://www.cnblogs.com/zjd2626/p/7041341.html

「JupyterLab」 Jupyter Notebook 新生代IDE模式頁面

參考&#xff1a;Overview 安裝&#xff1a; $ pip install jupyterlab 啟動&#xff08;不是jupyter notebook&#xff09;&#xff1a; $ jupyter lab Jupyterlab中最好用的就是顯示csv數據。CSV數據顯示效果&#xff1a; 安裝插件 jupyterlab是和jupyter notebook隔離的&…

undefined reference to 'pthread_create'

剛在Ubuntu16.04 上用Clion寫一個"單生產者-單消費者"的線程的程序&#xff0c;源程序可以參考下面的網址 https://www.cnblogs.com/haippy/p/3252092.html 在編譯的時候編譯器給的提示是&#xff1a; undefined reference to pthread_create 解決辦法就是在CMake…

windows下安裝vundle

windows下安裝vundle ## 前言 windows下安裝vundle和linux下稍微有些不一樣&#xff0c;雖然官網給出了 安裝說明&#xff0c;但是有些問題的。E117: Unknown function: vundle#begin ## 安裝步驟 參考官方文檔即可vundle ## 問題處理 修改_vimrc配置文件內容&#xff0c;這是正…

深度學習框架不能“包治百病”,開發者如何選出最適合自己的?

隨著深度學習關注度和勢頭上升&#xff0c;深度學習被越來越多的企業和組織的生產實踐結合起來。這時&#xff0c;無論是對于深度學習相關專業的初學者&#xff0c;還是已經在企業和組織中從事工業場景應用和研發的開發者來說&#xff0c;選擇一個適合自己&#xff0c;適合業務…

Linux+CLion+cmake 動態鏈接庫的使用

在作《劍指offer》中的單向鏈表的題目時&#xff0c;需要一些常用到的操作鏈表的函數放在一個文件下&#xff0c;我想把這些函數的聲明都寫在list.h文件中&#xff0c;把這些函數的定義都寫在list.cpp文件中&#xff0c;這樣就可以在測試文件test.cpp中調用list.cpp中定義的函數…

PAT(乙級)1009

1009. 說反話 (20)給定一句英語&#xff0c;要求你編寫程序&#xff0c;將句中所有單詞的順序顛倒輸出。 輸入格式&#xff1a;測試輸入包含一個測試用例&#xff0c;在一行內給出總長度不超過80的字符串。字符串由若干單詞和若干空格組成&#xff0c;其中單詞是由英文字母&…

庫存扣減問題

2019獨角獸企業重金招聘Python工程師標準>>> 并發減庫存 并發扣庫存問題總結 庫存扣減還有這么多方案&#xff1f; | 架構師之路 轉載于:https://my.oschina.net/u/2939155/blog/3004363

HSRPSTPACL

1 HSRP配置 1.1 問題 在企業網絡到外部的連接方案中&#xff0c;要求不高的條件下可以是單出口。一旦該出口線路出現問題&#xff0c;整個企業網絡就不能連接到外網了。為了使得企業網絡到外網連接的高可用性&#xff0c;可以設置兩個以上的出口&#xff0c;然而多個出口對…

java 的 CopyOnWriteArrayList類

初識CopyOnWriteArrayList 第一次見到CopyOnWriteArrayList&#xff0c;是在研究JDBC的時候&#xff0c;每一個數據庫的Driver都是維護在一個CopyOnWriteArrayList中的&#xff0c;為了證明這一點&#xff0c;貼兩段代碼&#xff0c;第一段在com.mysql.jdbc.Driver下&#xff0…

科技的趨勢!AI將進軍了37%的企業

2019獨角獸企業重金招聘Python工程師標準>>> 市場研究機構Gartner調查了全球89個國家的逾3,000名信息長&#xff08;CIO&#xff09;&#xff0c;顯示有37%的企業已經或打算于近期內部署人工智能&#xff08;AI&#xff09;&#xff0c;在4年內成長270%。Gartner研究…

CMakeLists.txt編寫規則

在PROJECT_SOURCE_DIR下新建了src, include, lib, bin四個子文件夾。 src文件夾用來存放所有的.cpp文件&#xff0c;include文件夾用來存儲所有的.h文件&#xff0c; lib中存放生成的自己編寫的共享庫&#xff0c; bin中存放所有的可執行文件 用SET來設置.exe可執行文件和共享…