【ORB-SLAM2】探索之旅 第 3 天 : 深入解析影像金字塔 ( Image Pyramid ) 的實作與應用

類別 ImagePyramid 的 Function 介紹

花費好大的力氣,終於把成員變數的部分介紹完,最瑣碎的事情不外乎就是介紹變數的命名規則。但是為什麼一定要介紹呢 ? 因為在不懂命名規則之前,看到這種風格的變數名稱絕對會產生極大的厭惡感,所以才要趕緊介紹一下 ~

接下來,我會介紹這個影像金字塔的 Functions :

  • void setImage(const Mat &image) :
    顧名思義,這個 Function 的用途就是把一張影像,設定到影像金字塔中,如圖(四)所示 ! 先說明一下 Function 前面的 void 關鍵字,有這個關鍵字代表該函式不會回傳 ( Return ) 任何資料;至於輸入參數,const 代表「在函式內,你不能修改這個傳進來的參數」;Mat image 表示我們想要設定到金字塔中的影像。

    那你可能會好奇 :「為什麼 image 前面要加一個 & 符號 ? 」。在 C++ 中,參數在傳入 Function 時,預設情況下會先把數據複製一份,然後才傳給 Function。而 & 符號表示程式不會把來源影像數據複製到參數 image,然後才傳入 Function,這代表我可以減少幾毫秒,甚至是幾微秒的影像複製時間。

    而前面提到的 const 關鍵字其實也不是必需的,它只是我增加的一道安全機制而已。如果你有自信 Function 中不會竄改到原本的影像數據,那把 const 拿掉也可以 !

  • void info() :
    輸出影像金字塔相關資訊。這個 Function 很單純,只是簡單地打印出關於影像金字塔的相關資訊。當我們建構完一個影像金字塔的物件時,會使用這個 Function 把它的內部參數打印出來,查看是否符合我們的預期。

    假設今天我們設定了影像金字塔的「層數為 3 層」、「縮放係數為 1.2 倍」、「欲提取特徵數為2000 個」,那使用 info() 後,會打印出以下資訊 :
Image Pyramid Information:
 - Levels: 3
 - Scale Factor: 1.200000
 - Number of Features: 2000

 - Features Per Level:
 { 791, 659, 550 }

 - Scale Factors:
 { 1.000000, 1.200000, 1.440000 }

 - Inv Scale Factors:
 { 1.000000, 0.833333, 0.694444 }

類別 ImagePyramid 的建/解構子介紹

/*
@brief 影像金字塔
        
@param[in] nLevels 影像金字塔的層數
@param[in] fScaleFactor 每層之間的縮放因子 (例如 1.2) 
@param[in] nFeatures 總共需要提取的特徵點數量 */
ImagePyramid (int nLevels, float fScaleFactor, int nFeatures);
~ImagePyramid () {};

前面基本的成員變數與 Function 已經說明完畢,在 Header 檔的最後,我們要介紹的是「 ImagePyramid 類別的建構子、解構子 」解構子其實沒甚麼好說的,因為它是空的,我沒有要它在物件的生命週期結束後,做任何事情。

相反地,建構子就需要稍微說明一下了。其輸入參數「 nLevels、fScaleFactor、nFeatures 」的涵義可以說是非常好理解的,分別代表影像金字塔的層數、每層之間的縮放因子、總共需要提取的特徵點數量。你只要按照這個建構子的定義,正確輸入參數給它,就能夠順利配置出一個影像金字塔,如圖(四)所示 !

影像金字塔
圖(五)、把一張在日本的咖啡廳影像,設定到影像金字塔中。

到目前為止,我們已經完整介紹了影像金字塔的 Header 檔內容。接下來只剩下如何實踐這些功能而已,我們將會提供你影像金字塔類別的 Source 檔程式碼,其中包括影像金字塔的建構子、Functions 的具體實踐方式 !

1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *