AKAZE是KAZE的加速版

与SIFT、SURF相比,AKAZE更稳定,速度更快。

AKAZE特征检测示例:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{Mat src = imread("D:/cv400/data/lena.jpg", 0);if (src.empty()){cout<<"Load image error..."<<endl;return -1;}imshow("input image", src);// kaze detectionPtr<AKAZE> detector = AKAZE::create();vector<KeyPoint> keypoints;double t1 = getTickCount();detector->detect(src, keypoints, Mat());double t2 = getTickCount();double t = (t2 - t1) / getTickFrequency();cout << "spend time : " << t<<" s" << endl;Mat keypointImg;drawKeypoints(src, keypoints, keypointImg, Scalar::all(-1), DrawMatchesFlags::DEFAULT);imshow("kaze keypoints", keypointImg);waitKey(0);return 0;
}

运行截图:

速度很快,65ms

接下来做匹配,在自然场景中找出目标

代码示范:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{Mat img1 = imread("D:/cv400/data/box.png", IMREAD_GRAYSCALE);Mat img2 = imread("D:/cv400/data/box_in_scene.png", IMREAD_GRAYSCALE);if (img1.empty() || img2.empty()) {cout << "Load image error..." << endl;return -1;}imshow("object image", img1);imshow("object in scene", img2);// surf featurs extractiondouble t1 = (double)getTickCount();//int minHessian = 400;Ptr<AKAZE> detector = AKAZE::create();vector<KeyPoint> keypoints_obj;vector<KeyPoint> keypoints_scene;Mat descriptor_obj, descriptor_scene;detector->detectAndCompute(img1, Mat(), keypoints_obj, descriptor_obj);detector->detectAndCompute(img2, Mat(), keypoints_scene, descriptor_scene);// matchingFlannBasedMatcher matcher(new flann::LshIndexParams(20, 10, 2));vector<DMatch> matches;matcher.match(descriptor_obj, descriptor_scene, matches);double t2 = (double)getTickCount();double t = (t2 - t1) / getTickFrequency();cout << "spend time : " << t << "s" << endl;//求匹配点最近距离double minDist = 1000;for (int i = 0; i < descriptor_obj.rows; i++){double dist = matches[i].distance;if (dist < minDist) minDist = dist;    }cout<<"min distance : "<< minDist<<endl;//距离较近即匹配较好的点vector<DMatch> goodMatches;for (int i = 0; i < descriptor_obj.rows; i++){double dist = matches[i].distance;if (dist < max(3 * minDist, 0.02)) goodMatches.push_back(matches[i]);  }//寻找匹配上的关键点的变换vector<Point2f> obj;  //目标特征点vector<Point2f> objInScene;  //场景中目标特征点for (size_t t = 0; t < goodMatches.size(); t++) {obj.push_back(keypoints_obj[goodMatches[t].queryIdx].pt);objInScene.push_back(keypoints_scene[goodMatches[t].trainIdx].pt);}Mat imgBH = findHomography(obj, objInScene, RANSAC);//映射点vector<Point2f> obj_corners(4);vector<Point2f> scene_corners(4);obj_corners[0] = Point(0, 0);obj_corners[1] = Point(img1.cols, 0);obj_corners[2] = Point(img1.cols, img1.rows);obj_corners[3] = Point(0, img1.rows);perspectiveTransform(obj_corners, scene_corners, imgBH);//四个点之间画线Mat dst;cvtColor(img2, dst, COLOR_GRAY2BGR);line(dst, scene_corners[0], scene_corners[1], Scalar(0, 0, 255), 2, 8, 0);line(dst, scene_corners[1], scene_corners[2], Scalar(0, 0, 255), 2, 8, 0);line(dst, scene_corners[2], scene_corners[3], Scalar(0, 0, 255), 2, 8, 0);line(dst, scene_corners[3], scene_corners[0], Scalar(0, 0, 255), 2, 8, 0);imshow("find object in sence", dst);waitKey(0);return 0;
}

运行截图:

比SURF快一点

AKAZE/KAZE局部特征相关推荐

  1. 全面综述:图像特征提取与匹配技术

    作者:William 来源:自动驾驶全栈工程师知乎专栏,https://www.zhihu.com/people/william.hyin/columns 特征提取和匹配是许多计算机视觉应用中的一个重 ...

  2. 过年也学(nei)习 (juan)| 图像特征提取与匹配技术

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:william 链接:https://zhuanlan.zh ...

  3. 自动驾驶汽车视觉- 图像特征提取与匹配技术

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:william 链接:https://zhuanlan.zhihu.com/p/13330196 ...

  4. 目标检测 - 特征检测器比较

    定量比较表明,特征检测器描述符检测大量特征的能力的一般顺序为: ORB>BRISK>SURF>SIFT>AKAZE>KAZE 每个特征点的特征检测描述计算效率的算法顺序为 ...

  5. OpenCV3 和 Qt5 计算机视觉:6~10

    原文:Computer Vision with OpenCV 3 and Qt5 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MT ...

  6. python识别几何图形拼成的图案_自动驾驶汽车视觉- 图像特征提取与匹配技术

    Feature detection and matching Email: williamhyin@outlook.com 特征提取和匹配是许多计算机视觉应用中的一个重要任务,广泛运用在运动结构.图像 ...

  7. OpenCv-C++-KAZE(AKAZE)局部特征匹配(二)

    上一篇已经做出了KAZE(AKAZE)局部特征的检测,就差匹配没有做到. 那么,现在来实现一下: 放上代码: #include<opencv2/opencv.hpp> #include&l ...

  8. opencv AKAZE 局部特征匹配算法

    AKAZE 局部特征匹配 级联分类器使用 等比例缩放图片 给图片加logo 鱼眼校正 智能答卷识别 opencv滤镜效果 灰度图像增强方式 基础知识点 AKAZE特征提取算法是局部特征描述子算法,是S ...

  9. OpenCV每日函数 特征检测和描述模块(5) KAZE类/AKAZE类(提取关键点和计算描述符)

    一.概述 PF Alcantarilla等人2012 年提出 KAZE 特征,通过非线性扩散滤波利用非线性尺度空间.这使得图像中的模糊局部适应特征点,从而减少噪声并同时保留主题图像中区域的边界.KAZ ...

最新文章

  1. Django 分页和使用Ajax5.3
  2. could not load inserted library: /usr/lib/libgmalloc.dylib
  3. 远程方法调用简单实现
  4. python编程入门书-清华大学出版社-图书详情-《Python编程入门与案例详解》
  5. Android 的 dex2jar 和 jd-gui 反编译 apk 源代码
  6. 密码方法三层三级联动
  7. UI设计素材|弹窗设计技巧,快get
  8. left+right /2_在C / C ++中使用Left Shift和Right Shift运算符
  9. linux 路由表(转)
  10. linux虚拟主机用织梦,织梦程序用什么虚拟主机很服务器好
  11. notion函数_Notion 常见问题一览
  12. STM8(STM8S003F3) Bootloader (IAP) 升级程序
  13. 雷神911air 装黑苹果
  14. Sematic库系列一
  15. java中的example_GitHub - lilei644/spring-java-example: 记录开发以及学习过程中Spring、Java相关的示例...
  16. 微信小程序 wx.setstoragesync和wx.setstorage 区别
  17. 【Python】用pyecharts绘制我国人口分布和迁移地图
  18. 高校借助电子签章推动学生入网缴费凭证、科研项目拨款单在线签
  19. 今天为什么还要阅读经典
  20. 多家银行同城跨行取款手续费上涨到4元

热门文章

  1. 论文阅读——A Comprehensive Study on Deep Learning-Based 3D Hand Pose Estimation Methods综述阅读2
  2. vue 展开全文,收起全文
  3. GetMACAddress 在java查询中获取 MACA 地址
  4. Android 应用快捷方式 Shortcuts(一)
  5. 前端面试中的自我介绍
  6. Jni native java.lang.UnsatisfiedLinkError:No implementation found for boolean com.xxx.xxx.jni.init()
  7. UOJ147 斗地主
  8. unity弹幕功能实现
  9. GPG对文件加解密的简单实现
  10. 每天一道面试题 浏览器输入URL到页面呈现详细过程