一种改进的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::