日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ORB_SLAM2帧Frame

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORB_SLAM2帧Frame 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??在追蹤線程的一開始就會創建一個幀

cv::Mat Tracking::GrabImageMonocular(const cv::Mat &im,const double &timestamp)

構造函數

在構造函數中,會對特征點進行提取。

ExtractORB(0,imGray);

特征點分配至網格

將圖像劃分為48*64的網格,然后將特征點放入每個網格中。

    if(mbInitialComputations){// 計算去畸變后圖像的邊界ComputeImageBounds(imGray);// 表示一個圖像像素相當于多少個圖像網格列(寬)mfGridElementWidthInv=static_cast<float>(FRAME_GRID_COLS)/static_cast<float>(mnMaxX-mnMinX);// 表示一個圖像像素相當于多少個圖像網格行(高)mfGridElementHeightInv=static_cast<float>(FRAME_GRID_ROWS)/static_cast<float>(mnMaxY-mnMinY);//給類的靜態成員變量復制fx = K.at<float>(0,0);fy = K.at<float>(1,1);cx = K.at<float>(0,2);cy = K.at<float>(1,2);// 猜測是因為這種除法計算需要的時間略長,所以這里直接存儲了這個中間計算結果invfx = 1.0f/fx;invfy = 1.0f/fy;//特殊的初始化過程完成,標志復位mbInitialComputations=false;}//計算 baslinemb = mbf/fx;// 將特征點分配到圖像網格中 AssignFeaturesToGrid();

?
?

將特征點分配到網格中

void Frame::AssignFeaturesToGrid()

?
?

判斷路標點是否在當前幀的視野中

(1)相機坐標系下,其深度應大于0

    // Step 2 關卡一:檢查這個地圖點在當前幀的相機坐標系下,是否有正的深度.如果是負的,表示出錯,直接返回falseif(PcZ<0.0f)return false;

(2)投影到圖像后不能越界

    if(u<mnMinX || u>mnMaxX)return false;if(v<mnMinY || v>mnMaxY)return false;

(3)相機光心----路標點間的長度要在范圍內

    // Step 4 關卡三:計算MapPoint到相機中心的距離, 并判斷是否在尺度變化的距離內// 得到認為的可靠距離范圍:[0.8f*mfMinDistance, 1.2f*mfMaxDistance]const float maxDistance = pMP->GetMaxDistanceInvariance();const float minDistance = pMP->GetMinDistanceInvariance();// 得到當前地圖點距離當前幀相機光心的距離,注意P,mOw都是在同一坐標系下才可以//  mOw:當前相機光心在世界坐標系下坐標const cv::Mat PO = P-mOw;//取模就得到了距離const float dist = cv::norm(PO);//如果不在允許的尺度變化范圍內,認為重投影不可靠if(dist<minDistance || dist>maxDistance)return false;

(4)當前的觀測方向和路標點的平均方向夾角過大

	// 計算當前相機指向地圖點向量和地圖點的平均觀測方向夾角的余弦值,注意平均觀測方向為單位向量const float viewCos = PO.dot(Pn)/dist;//如果大于給定的閾值 cos(60°)=0.5,認為這個點方向太偏了,重投影不可靠,返回falseif(viewCos<viewingCosLimit)return false;

(5)設置該路標點的屬性:估測的尺度、路標點投影到當前幀的像素坐標
?
?

尋找領域內的特征點

vector<size_t> Frame::GetFeaturesInArea(const float &x, const float  &y, const float  &r, const int minLevel, const int maxLevel) const

??遍歷路標點投影位置周圍的像素框,然后遍歷像素框中的特征點,計算其和投影位置間的長度,如果小于r即為候選特征點。
?
?

總結

以上是生活随笔為你收集整理的ORB_SLAM2帧Frame的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。