KAZE匹配算法源码

本文深入探讨了一种改进的A-KAZE算法,并详细阐述了其在图像配准过程中的具体应用,揭示了该算法在提高匹配精度和效率上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一种改进的A-KAZE算法在图像配准中的应用

#include<iostream>

//#include <opencv2/xfeatures2d.hpp>
#include <opencv2/opencv.hpp>


using namespace std;
using namespace cv;

void main()
{
    double start, duration_ms;
    cv::Mat mask1, mask2, imgshowcanny;
    cv::Mat imgShow1, imgShow2, imgShow3, imgShow4;
    // 声明并从data文件夹里读取两个rgb与深度图
    cv::Mat rgb1 = cv::imread("F:/study work/Visual Odometry dev/VO_practice_2016.4/算法测试/KAZE算法/data/000030.jpg", 0);
    cv::Mat rgb2 = cv::imread("F:/study work/Visual Odometry dev/VO_practice_2016.4/算法测试/KAZE算法/data/000087.jpg", 0);
    vector< cv::KeyPoint > kp1, kp2, kp3, kp4; //关键点
    mask1 = rgb1.clone();
    //边缘检测
    //cout << "Canny edge detection" << endl;
    //mask1 = Mat::zeros(rgb1.size(), CV_8UC1);
    //mask2 = Mat::zeros(rgb2.size(), CV_8UC1);
    cv::Canny(mask1, mask1, 50, 200, 3);
    //cv::Canny(rgb2, mask2, 50, 150, 3);
    cv::Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
    dilate(mask1, mask1, element);
    cv::imwrite("F:/study work/Visual Odometry dev/VO_practice_2016.4/算法测试/KAZE算法/data/mask1.jpg", mask1);
    imgshowcanny = mask1.clone();
    cv::resize(imgshowcanny, imgshowcanny, cv::Size(imgshowcanny.cols / 2, imgshowcanny.rows / 2));
    cv::imshow("mask", imgshowcanny);


    //特征检测算法:AKAZE、ORB
    cv::Ptr<cv::AKAZE> akaze = AKAZE::create(AKAZE::DESCRIPTOR_MLDB, 0, 3, 0.001f, 4, 4, KAZE::DIFF_PM_G2);
    cv::Ptr<cv::ORB> orb = ORB::create(2000, 1.2f, 8, 31, 0, 2, ORB::FAST_SCORE, 31, 20);
    Mat descriptors_1, descriptors_2, descriptors_3, descriptors_4;


    start = double(getTickCount());
    akaze->detectAndCompute(rgb1, mask1, kp1, descriptors_1, false);
    duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();//计时
    std::cout << "It took " << duration_ms << " ms to detect features in pic1 using AKAZE." << std::endl;

    start = double(getTickCount());
    akaze->detectAndCompute(rgb2, cv::Mat(), kp2, descriptors_2, false);
    duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();//计时
    std::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值