使用冲浪描述符+ flann匹配器的静态手势识别

时间:2016-04-10 10:20:27

标签: c++ opencv

我正在尝试仅为6个手势实现静态手势识别。因为手可以转动一点我尝试冲浪+ flann因为这些是不变的。 图像是二进制的,当我比较它们时,我得到不好的结果,我甚至不理解它们。例如,对于相等的图像,我得到1或2个好的关键点,对于不同的图像,我得到5或6个好的关键点。

对于这种情况,您是否有任何消息来实现手势识别?

火车和查询图片的结果:

enter image description here

double max_dist = 0, min_dist = 100; 

matcher.match(gestoDescriptors,t1descriptors,matches);

for (int i=0; i<gestoDescriptors.rows; i++){
  double dist =  matches[i].distance;
  if (dist<min_dist)
    min_dist = dist;
  if (dist>max_dist)
    max_dist=dist;
}

vector<DMatch>t1_good_matches;
for (int i=0; i<gestoDescriptors.rows; i++){
  if (matches[i].distance<=max(2*min_dist,0.02)){
    t1_good_matches.push_back(matches[i]);
  }
}

//-- Draw only "good" matches
Mat img_matches;
drawMatches(gestoImage,gestoKeypoints,train1,t1keypoints,t1_good_matches,
img_matches, Scalar::all(-1), Scalar::all(-1),
           vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );

1 个答案:

答案 0 :(得分:0)

我还没有广泛使用SURF来进行特征提取,但是从我可以收集到的信息来看,图像合理地表现出来是非常重要的。从某种意义上说,存在具有独特属性的各种兴趣点。我认为你遇到的主要问题是手的图像(特别是已经过阈值处理产生二进制图像的图像)没有许多独特的兴趣点。特别是由于SURF特征的比例和旋转不变特性,您的图像中几乎没有特定于特定手势的特性。

您可能想尝试使用二进制图像作为遮罩来移除背景,然后在全彩色(或可能是灰度)手势上尝试使用SURF和FLANN逻辑。

从长远来看,如果您认真考虑构建高质量的手势识别系统,我认为您最好不要研究卷积神经网络。 CNN对图像的预处理要求要少得多,特别适合这种应用。