MRPT API 学习(二)——特征点获取,匹配,保存与上一次特征点相匹配的特征点
来源:互联网 发布:域名升级访问中大全 编辑:程序博客网 时间:2024/06/11 07:25
//过滤超出2D图像范围的特征点
void FiltInvalidFeats(CFeatureList&feats)
{CFeatureList::iterator itFeat = feats.begin();while (itFeat!=feats.end()){const TFeatureTrackStatus status = (*itFeat)->track_status;bool eras = (status_TRACKED!=status && status_IDLE!=status);if (!eras){// Also, check if it's too close to the image border:const float x= (*itFeat)->x;const float y= (*itFeat)->y;static const float MIN_DIST_MARGIN_TO_STOP_TRACKING = 10;if (x<MIN_DIST_MARGIN_TO_STOP_TRACKING || y<MIN_DIST_MARGIN_TO_STOP_TRACKING ||x>(COL-MIN_DIST_MARGIN_TO_STOP_TRACKING) ||y>(ROW-MIN_DIST_MARGIN_TO_STOP_TRACKING)){eras = true;}}if (eras)// Erase or keep?itFeat = feats.erase(itFeat);else ++itFeat;}}
//获得当前帧的3D特征点map<TFeatureID, TPoint3D> GetCur3DFeats(CFeatureList feats,CObservation3DRangeScanPtr obs){map<TFeatureID, TPoint3D> curVisibleFeats;for (CFeatureList::iterator itFeat = feats.begin();itFeat!=feats.end();++itFeat){// Pixel coordinates in the intensity image:const int int_x= (*itFeat)->x;const int int_y= (*itFeat)->y;// Convert to pixel coords in the range image:// APPROXIMATION: Assume coordinates are equal (that's not exact!!)const int x = int_x;const int y = int_y;// Does this (x,y) have valid range data?const float d = obs->rangeImage(y,x);
//过滤深度不在范围内的点if (d>0.05 && d<10.0){ASSERT_( size_t(obs->rangeImage.cols()*obs->rangeImage.rows()) == obs->points3D_x.size() )const size_t nPt = obs->rangeImage.cols() * y + x;curVisibleFeats[(*itFeat)->ID] = TPoint3D( obs->points3D_x[nPt],obs->points3D_y[nPt],obs->points3D_z[nPt] );}}return curVisibleFeats;}
//将与上一次特征点相匹配的特征点到历史特征点,由于隔帧处理,相匹配的特征点可以认为是静止的,也可以看作是landmarkvoid AddValidFeaturesToHistory(map<TFeatureID, TPoint3D>& historyVisibleFeats,map<TFeatureID, TPoint3D> preVisibleFeats,map<TFeatureID, TPoint3D> curVisibleFeats){static TFeatureID featureID = 0;for (map<TFeatureID, TPoint3D>::const_iterator itCur= curVisibleFeats.begin();itCur!=curVisibleFeats.end();++itCur){map<TFeatureID, TPoint3D>::const_iterator itFound = preVisibleFeats.find(itCur->first);if (itFound!=preVisibleFeats.end()){historyVisibleFeats.insert(make_pair(featureID,itFound->second));featureID++;}}}
//特征点获取,匹配,保存与上一次特征点相匹配的特征点全过程,隔帧处理void ImageProcess(ImageData &imagedata){CFeatureListtrackedFeats;map<TFeatureID, TPoint3D> preVisibleFeats,curVisibleFeats,historyVisibleFeats;CObservation3DRangeScanPtr obs;int frm_index = 0;CGenericFeatureTrackerAutoPtr tracker = CGenericFeatureTrackerAutoPtr( new CFeatureTracker_KL );CImage preImg;tracker->extra_params["add_new_features"] = 1;while(imagedata.isRun){if(imagedata.is_obs){if (frm_index%FRAMERATE_5==0){obs = imagedata.obs;if (frm_index>0){tracker->trackFeatures(preImg,imagedata.image,trackedFeats);FiltInvalidFeats(trackedFeats);curVisibleFeats = GetCur3DFeats(trackedFeats,obs);if (!preVisibleFeats.empty()){AddValidFeaturesToHistory(historyVisibleFeats,preVisibleFeats,curVisibleFeats);}preVisibleFeats = curVisibleFeats;}else{preImg = imagedata.image;COL = obs->cameraParamsIntensity.ncols;ROW = obs->cameraParamsIntensity.nrows;}}frm_index++;}}}
0 0
- MRPT API 学习(二)——特征点获取,匹配,保存与上一次特征点相匹配的特征点
- 【OpenCV学习笔记】三十七、特征检测与匹配(二)——SIFT特征点匹配
- 2维特征Feature2D—特征点的图像匹配
- 特征点匹配——FAST特征点检测
- 特征点提取与匹配
- opencv 特征点提取、匹配(二)
- 特征点匹配
- 特征点匹配
- 什么是特征点、特征描述、特征匹配
- 特征点的提取与匹配
- 获取图象匹配中的未匹配的特征点
- 【OpenCV学习笔记】三十八、特征检测与匹配(三)——SURF特征点检测与匹配
- 图像特征点检测与匹配评价——量化
- opencv上gpu版surf特征点与orb特征点提取及匹配实例
- opencv上gpu版surf特征点与orb特征点提取及匹配实例
- OpenCV--特征点检测与图像匹配
- Surf特征点检测与匹配
- OpenCV:特征点检测与图像匹配
- .net程序反编译工具(ILSpy)
- DOS和Linux换行符
- 【Qt】Windows7 和 Ubuntu11 下安装配置 Qt 5.2.0
- http协议 ②
- python 写的扫雷游戏
- MRPT API 学习(二)——特征点获取,匹配,保存与上一次特征点相匹配的特征点
- COM线程模型详解(了解这个对于线程还是有点帮助的)
- C#网络编程(接收文件) - Part.5
- 练习
- java 播放 wav格式的声音
- 高手速成android开源项目【developer篇】
- jquery $(window).height()和$(window).width()指的是什么
- Java JNI学习(一)
- 高阶SVD