最近做一些特征检测方面的东西,用的opencv自带的一些算法surf++knn+ransac等,进行指定区域的识别和扣取。然而,对这个检测算子的理解一致不太深入。于是的于是呢,参考了《计算机视觉:算法与应用》后,决定对这个方向了解一下。第一个自然是前人最经典的杰作:moravec corner;
moravec corner 首先提取了8个以45°为步长的局部差方之和,然后在8个中选取最小的一个作为当前的特征值,具有一定程度上的旋转不变性。然会对这个特征值进行阈值判断,提取出角点。8个模板可以采用3*3 5*5 或者7*7;这里采用5*5的方法进行测试。
代码稍后奉上(只实现了大概流程,代码没有经过优化)
#pragma once #include"opencv2/opencv.hpp" #include <vector> class CMoravecCorner { private: int winsize; int threshold; std::vector <cv::Point> corners; public: CMoravecCorner(void); ~CMoravecCorner(void); void set