gus*_*a_w 0 android opencv matching threshold orb
我的项目是基于android的草药识别.我使用ORB来获取关键点,功能和匹配功能.
我想用这个算法:
{
for (j=MinID; j<=MaxID; j++){
MatOfDMatch matches = DetectUtility.match(features, matFromJson(DB.GetORBFitur(j)));
List<DMatch> matchesList = matches.toList();
Double max_dist = 0.0;
Double min_dist = 100.0;
for (int i = 0; i < matchesList.size(); i++){
Double dist = (double) matchesList.get(i).distance;
if (dist < min_dist && dist != 0){
min_dist = dist;
}
if (dist > max_dist){
max_dist = dist;
}
}
Run Code Online (Sandbox Code Playgroud)
从这个网站,我得到这个代码:
//-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist )
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors_object.rows; i++ )
{ if( matches[i].distance < 3*min_dist )
{ good_matches.push_back( matches[i]); }
}
Run Code Online (Sandbox Code Playgroud)
如何获得神奇的数字3?我必须对最大距离做些什么?
我想使用的algoritma,我之前使用过Invariant Moment,以及City Block Distance来匹配具有最小距离的图像.
我也不知道.距离是特征点相似度的度量,越少越好.的原始ORB纸(图5,下图)示出了距离为好的和坏的匹配分布.人们可以肯定地说,"良好"的距离阈值大约是64.

更正确的是:
double dist_th = 64;
for( int i = 0; i < descriptors_object.rows; i++ )
{ if( matches[i].distance < dist_th )
{ good_matches.push_back( matches[i]); }
}
Run Code Online (Sandbox Code Playgroud)
然后你仍然必须使用RANSAC来过滤不一致的匹配.因此,最简单的解决方案是将查询图像与所有4个数据库图像进行匹配.
但是我建议你使用一些分类器,而不仅仅是匹配.看到这个人的方法(它有效,我认识他) - http://cmp.felk.cvut.cz/~sulcmila/
| 归档时间: |
|
| 查看次数: |
4783 次 |
| 最近记录: |