[英]kdtree training in opencv for ORB feature detector
我正在使用Opancv4android進行實時對象識別,我能夠使用ORB檢測器和描述符提取器從使用相機捕獲的圖像中進行檢測,提取特征點。 現在,我想構建一個Kdtree並用這些特征點訓練它們,然后我將樹中的這些特征點與相機實時檢測到的特征點進行匹配,從而識別出物體。 請幫助我如何在opencv中構建KD樹,或者在openCv的KDtree上使用任何指針或引用/教程將非常有幫助。
實現方法,一旦完成,將發布代碼
捕獲要訓練的所有圖像並將其存儲在android的SDcard /外部目錄中,並具有xml / txt文件,其中包含已捕獲圖像的所有名稱。
從相機捕獲幀並將其傳遞到Mat對象,您可以從中提取特征以獲取查詢描述符集。 為了從訓練集中提取特征,需要從存儲位置讀取文件,以獲取文件中的圖像列表,並將所有存儲的圖像傳遞到Mat對象的向量中,然后提取特征點以獲得訓練描述符集。
同樣,您需要傳遞查詢描述符和訓練描述符的向量,並在獲得正確匹配的結果后獲得Dmatches向量的輸出,您可以在圖像之間繪制匹配或使用單應性在已識別的圖像上繪制矩形賓語。
static void detectKeypoints( const Mat& queryImage, vector<KeyPoint>& queryKeypoints,
const vector<Mat>& trainImages, vector<vector<KeyPoint> >& trainKeypoints,
Ptr<FeatureDetector>& featureDetector )
{
featureDetector->detect( queryImage, queryKeypoints );
featureDetector->detect( trainImages, trainKeypoints );
}
static void computeDescriptors( const Mat& queryImage, vector<KeyPoint>& queryKeypoints, Mat& queryDescriptors,
const vector<Mat>& trainImages, vector<vector<KeyPoint> >& trainKeypoints, vector<Mat>& trainDescriptors,
Ptr<DescriptorExtractor>& descriptorExtractor )
{
descriptorExtractor->compute( queryImage, queryKeypoints, queryDescriptors );
descriptorExtractor->compute( trainImages, trainKeypoints, trainDescriptors );
}
static void matchDescriptors( const Mat& queryDescriptors, const vector<Mat>& trainDescriptors,
vector<DMatch>& matches, Ptr<DescriptorMatcher>& descriptorMatcher )
{
descriptorMatcher->add( trainDescriptors );
descriptorMatcher->train();
descriptorMatcher->match( queryDescriptors, matches );
CV_Assert( queryDescriptors.rows == (int)matches.size() || matches.empty() );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.