我想从短距离检测物体(飞机门)。该算法应该非常强大,因此可以通过任何平面(具有许多不同的绘画,徽标)和任何天气条件(太阳,雨,白天和黑夜)来实现。
我在OpenCV中搜索并实现了一些特征提取算法,如SURF,SIFT和ORB,但结果并不是那么好。
这里是使用ORB特征检测器的代码
#include "opencv2/opencv_modules.hpp"
#include <stdio.h>
#ifndef HAVE_OPENCV_NONFREE
int main(int, char**)
{
printf("The sample requires nonfree module that is not available in your OpenCV distribution.\n");
return -1;
}
#else
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdlib.h>
using namespace cv;
using namespace std;
static void help()
{
printf("\nThis program demonstrates using features2d detector, descriptor extractor and simple matcher\n"
"Using the SURF desriptor:\n"
"\n"
"Usage:\n matcher_simple <image1> <image2>\n");
}
Mat src;Mat src_gray;
int thresh = 5;
int max_thresh = 600;
RNG rng(12345);
void thresh_callback(int, void* );
int main(int argc, char** argv)
{
Mat img1;
Mat img2;
img1= imread("a350_1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
resize(img1, img1, Size(700,500), 0, 0, INTER_CUBIC);
img2= imread("a350_1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
resize(img2, img2, Size(680,480), 0, 0, INTER_CUBIC);
Mat image;
if(! img1.data || ! img1.data)
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
// detecting keypoints
OrbFeatureDetector detector(1500);
vector<KeyPoint> keypoints1, keypoints2;
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2);
// computing descriptors
OrbDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(img1, keypoints1, descriptors1);
extractor.compute(img2, keypoints2, descriptors2);
// matching descriptors
BFMatcher matcher(NORM_HAMMING);
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);
// drawing the results
namedWindow("matches", CV_WINDOW_AUTOSIZE);
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
imshow("matches", img_matches);
waitKey(0);
return 0;
}
#endif
我想提高算法在功能正确匹配方面的稳健性。因此,为了物体识别和检测的目的,更可靠的特征匹配更加稳健可靠。例如,可以包括窗户和门框之间的距离(在每个飞机模型中固定),然后是门框的厚度等。
我想提取一些海关功能,以便该算法适用于任何有任何绘画和徽标的飞机。意味着算法应该是健壮的,可以通过任何类型的平面检测门。某些航空公司和绘画的标志等特征不应该是关键点/特征。
因此,我喜欢提取像窗户和门框之间的距离一般的特征(因为这个特征对于给定的飞机模型总是相同的)。例如,空中客车A350中门框与最近窗口之间的最小距离让我们说1米。所以我想在我的算法中使用这个功能。有关如何提取此类功能的任何建议吗?
我应该在这种情况下使用模式识别和机器学习技术,如深度神经网络还是KNN?
答案 0 :(得分:0)
如果你可以制作多种类型对象(门)的数据集,你可以使用像SIFT输出这样的功能来训练SVM(在opencv中你可以找到几个例子)。