AGAST(Adaptive and Generic Accelerated Segment Test)角点域的特征匹配算法是一种计算二元决策树(角检测器)的技术, 通过组合两棵树,角点检测器自动适应环境,并为图像区域提供最有效的决策树,只有一个像素延迟。因此,它产生了一个角检测器,该检测器速度更快且无需进行训练,同时保持与(完整)FAST 角检测器相同的角响应和可重复性。我们将此检测器称为 AGAST。
API介绍
static Ptr<AgastFeatureDetector> create( int threshold=10,bool nonmaxSuppression=true,AgastFeatureDetector::DetectorType type = AgastFeatureDetector::OAST_9_16);
/*******************************************************************
* threshold: 响应阈值
* nonmaxSuppression: 是否做非最大抑制
* type: 邻域类型
*********************************************************************/
virtual void detect( InputArray image,std::vector<KeyPoint>& keypoints,InputArray mask=noArray());
/*******************************************************************
* image: 输入图
* keypoints: 角点信息
* mask: 计算亚像素角点区域大小
*********************************************************************/
void drawKeypoints( InputArray image, const std::vector<KeyPoint>& keypoints, InputOutputArray outImage,const Scalar& color=Scalar::all(-1), DrawMatchesFlags flags=DrawMatchesFlags::DEFAULT );
/*******************************************************************
* image: 输入图
* keypoints: 角点信息
* outImage: 计算亚像素角点区域大小
* color: 颜色
* flags: 标记
*********************************************************************/
综合代码
#include <iostream>
#include <map>
#include <new>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
class AGASTFeature
{
public:
AGASTFeature() :img(imread("mm.jpg"))
{
result["img"] = img;
}
void TestAGAST()
{
Ptr<AgastFeatureDetector> agast = AgastFeatureDetector::create();
agast->detect(img, point);
drawKeypoints(img, point, result["agast"], Scalar(255, 0, 255));
}
void Show()
{
for (auto& v : result)
{
imshow(v.first, v.second);
}
waitKey(0);
}
protected:
Mat img;
vector<KeyPoint> point;
map<string, Mat> result;
};
int main()
{
unique_ptr<AGASTFeature> p(new AGASTFeature);
p->TestAGAST();
p->Show();
return 0;
}