C++ 基于surf描述符的静态手势识别&x2B;法兰匹配器
我正在尝试只对6个手势进行静态手势识别。因为手可能会转动一点,所以我尝试了surf+flann,因为它们是不变的。 这些图像是二进制的,当我比较它们时,我得到了不好的结果,我甚至不理解它们。例如,对于相等的图像,我得到1或2个好的关键点;对于不同的图像,我得到5或6个好的关键点 对于这种情况,您有什么建议来实现手势识别吗 列车和查询图像的结果:C++ 基于surf描述符的静态手势识别&x2B;法兰匹配器,c++,opencv,C++,Opencv,我正在尝试只对6个手势进行静态手势识别。因为手可能会转动一点,所以我尝试了surf+flann,因为它们是不变的。 这些图像是二进制的,当我比较它们时,我得到了不好的结果,我甚至不理解它们。例如,对于相等的图像,我得到1或2个好的关键点;对于不同的图像,我得到5或6个好的关键点 对于这种情况,您有什么建议来实现手势识别吗 列车和查询图像的结果: 双最大距离=0,最小距离=100; matcher.match(GestodeScript、T1Descriptor、matches); 对于(int
双最大距离=0,最小距离=100;
matcher.match(GestodeScript、T1Descriptor、matches);
对于(int i=0;i我没有广泛地使用SURF进行特征提取,但从我收集的信息来看,重要的是图像要合理地“表达”,因为存在具有独特属性的各种兴趣点。我认为你的主要问题是手的图像(特别是经过阈值处理以生成二值图像的图像)没有很多独特的兴趣点。特别是由于冲浪特征的比例和旋转不变性,您的图像中几乎没有特定手势的独特性
您可能想尝试使用二进制图像作为遮罩来移除背景,然后在全彩色(或灰度)手势上尝试SURF和FLANN逻辑
从长远来看,如果你真的想建立一个高质量的手势识别系统,我认为你最好还是研究卷积神经网络。CNN需要的图像预处理要少得多,特别适合这种应用。我没有广泛地使用SURF进行特征提取,但是m据我所知,重要的是图像要合理地“表达”,因为有各种具有独特属性的兴趣点。我认为你的主要问题是手的图像(特别是经过阈值处理以产生二值图像的图像)不要有太多独特的兴趣点。尤其是由于冲浪特征的比例和旋转不变性,在你的图像中几乎没有什么特定手势的独特性
您可能想尝试使用二进制图像作为遮罩来移除背景,然后在全彩色(或灰度)手势上尝试SURF和FLANN逻辑
从长远来看,如果你真的想建立一个高质量的手势识别系统,我认为你最好研究卷积神经网络。CNN对图像的预处理要少得多,特别适合这种应用。看看看
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 );