cod*_*er9 6 opencv image-processing image-recognition matching
我尝试使用cvMatchShapes()
匹配两个标记模式.正如您在OpenCV 2.3.0中以阈值IplImage计算"白色Blob"数量的最佳方式所示,源的图像质量较差.
我对该函数返回的结果不满意,大多数时候它给出了不正确的匹配.如何使用此功能(或一些合适的功能)进行有效匹配?
注意:我的后备解决方案是将标记图案更改为具有相当大/清晰可见的形状.请访问上面的链接,查看我当前的标记模式.
编辑
我发现了OpenCV中实现的各种特征检测算法的综合比较.http://computer-vision-talks.com/2011/01/comparison-of-the-opencvs-feature-detection-algorithms-2.据说FAST似乎是个不错的选择.
我会给那些可以在OpenCV中分享实施FAST(其他STAR/SURF/SIFT)的好教程的人给+1.我无法谷歌认为,快如速度 :(
这是FAST发明者的网站。FAST 代表加速分段测试的功能。这是一个关于基于 AST 算法的简短维基百科条目。另外,这里是对目前使用的不同特征检测器的一个很好的调查。
如果您想使用 OpenCV 的实现,FAST实际上已经由 OpenCV 实现了。
编辑:这是我创建的简短示例,向您展示如何使用 FAST 检测器:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat far = imread("far.jpg", 0);
Mat near = imread("near.jpg", 0);
Ptr<FeatureDetector> detector = FeatureDetector::create("FAST");
vector<KeyPoint> farPoints;
detector->detect(far, farPoints);
Mat farColor;
cvtColor(far, farColor, CV_GRAY2BGR);
drawKeypoints(farColor, farPoints, farColor, Scalar(255, 0, 0), DrawMatchesFlags::DRAW_OVER_OUTIMG);
imshow("farColor", farColor);
imwrite("farPoints.jpg", farColor);
vector<KeyPoint> nearPoints;
detector->detect(near, nearPoints);
Mat nearColor;
cvtColor(near, nearColor, CV_GRAY2BGR);
drawKeypoints(nearColor, nearPoints, nearColor, Scalar(0, 255, 0), DrawMatchesFlags::DRAW_OVER_OUTIMG);
imshow("nearColor", nearColor);
imwrite("nearPoints.jpg", nearColor);
waitKey();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码找到远近图像的以下特征点:
正如您所看到的,近处图像具有更多特征,但看起来远处图像检测到了相同的基本结构。所以,你应该能够匹配这些。查看descriptor_extractor_matcher.cpp。这应该可以帮助你开始。
希望有帮助!
归档时间: |
|
查看次数: |
6251 次 |
最近记录: |