/*
* Struct for matching: query descriptor index, train descriptor index, train image index and distance between descriptors.
*/
/*
* DMatch主要用來儲存匹配信息的結構體,query是要匹配的描述子,train是被匹配的描述子,在Opencv中進行匹配時
* void DescriptorMatcher::match( const Mat& queryDescriptors, const Mat& trainDescriptors, vector<DMatch>& matches, const Mat& mask ) const
* match函數的參數中位置在前面的為query descriptor,後面的是 train descriptor
* 例如:query descriptor的數目為20,train descriptor數目為30,則DescriptorMatcher::match後的vector<DMatch>的size為20
* 若反過來,則vector<DMatch>的size為30
*
*/
struct CV_EXPORTS_W_SIMPLE DMatch
{
//默認構造函數,FLT_MAX是無窮大
//#define FLT_MAX 3.402823466e+38F /* max value */
CV_WRAP DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {}
//DMatch構造函數
CV_WRAP DMatch( int _queryIdx, int _trainIdx, float _distance ) :
queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {}
//DMatch構造函數
CV_WRAP DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) :
queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {}
//queryIdx為query描述子的索引,match函數中前面的那個描述子
CV_PROP_RW int queryIdx; // query descriptor index
//trainIdx為train描述子的索引,match函數中後面的那個描述子
CV_PROP_RW int trainIdx; // train descriptor index
//imgIdx為進行匹配圖像的索引
//例如已知一幅圖像的sift描述子,與其他十幅圖像的描述子進行匹配,找最相似的圖像,則imgIdx此時就有用了。
CV_PROP_RW int imgIdx; // train image index
//distance為兩個描述子之間的距離
CV_PROP_RW float distance;
//DMatch比較運算符重載,比較的是DMatch中的distance,小於為true,否則為false
// less is better
bool operator<( const DMatch &m ) const
{
return distance < m.distance;
}
};
KeyPoint這數據結構中有如下數據結構(http://docs.opencv.org/3.3.0/d2/d29/classcv_1_1KeyPoint.html):
angle:角度,表示關鍵點的方向,通過Lowe大神的論文可以知道,為了保證方向不變形,SIFT算法通過對關鍵點周圍鄰域進行梯度運算,求得該點方向。-1為初值。
class_id:當要對圖片進行分類時,我們可以用class_id對每個特徵點進行區分,未設定時為-1,需要靠自己設定
octave:代表是從金字塔哪一層提取的得到的數據。
pt:關鍵點點的座標
response:響應程度,代表該點強壯大小—response代表着該關鍵點how good,更確切的説,是該點角點的程度。
size:該點直徑的大小
转载自:
https://hk.saowen.com/a/8447b1a35c4f073bc22a0aa315ea01363d3d249e4982782006f26c8f689554b0