類別 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 的具體實踐方式 !



[…] 如同我們在《 第 3 天 : 深入解析影像金字塔 ( Image Pyramid ) 的實作與應用 》這篇文章提到的,關鍵點 ( 或稱角點 ) 其實就是指影像中,顯著的角落處,這些地方被認為是比較具有辨識度的。 […]