ORB特征点匹配,图片序列的特征匹配
文章目录
- 1.准备图片
- 2.创建文件
- 3.代码参考
- 4.编译运行
- 5..运行结果gif
- 1)ORB特征点(无连线匹配)
- 2)ORB特征点(连线匹配)
1.准备图片
2.创建文件
没有他会自动创建
gedit computeORB2.cpp
3.代码参考
#include <opencv2/opencv.hpp>#include <iostream>
#include <vector>
#include <string>
#include<sstream>
#include <fstream>
using namespace cv;
using namespace std;
// global variablesconst double pi = 3.1415926; // pi// TODO implement this function
/*** compute the angle for ORB descriptor* @param [in] image input image* @param [in|out] detected keypoints*/
void computeAngle(const cv::Mat &image, vector<cv::KeyPoint> &keypoints);// TODO implement this function
/*** compute ORB descriptor* @param [in] image the input image* @param [in] keypoints detected keypoints* @param [out] desc descriptor*/
typedef vector<bool> DescType; // type of descriptor, 256 bools
void computeORBDesc(const cv::Mat &image, vector<cv::KeyPoint> &keypoints, vector<DescType> &desc);// TODO implement this function
/*** brute-force match two sets of descriptors* @param desc1 the first descriptor* @param desc2 the second descriptor* @param matches matches of two images*/
void bfMatch(const vector<DescType> &desc1, const vector<DescType> &desc2, vector<cv::DMatch> &matches);int main(int argc, char **argv) {std::string pattern_jpg ="./kitti_Image/Kitti_image_2/*.png";std::vector<cv::String> image_files;cv::glob(pattern_jpg, image_files);for (unsigned int frame = 0; frame < image_files.size(); ++frame) {//image_file.size()代表文件中总共的图片个数//imshow("1", image);//imshow("2", image1);//waitKey(30);// load imagecv::Mat first_image = cv::imread(image_files[frame], 0); // load grayscale imagecv::Mat second_image = cv::imread(image_files[frame+1], 0); // load grayscale image// plot the image//cv::imshow("first image", first_image);//cv::imshow("second image", second_image);//cv::waitKey(0);// detect FAST keypoints using threshold=40vector<cv::KeyPoint> keypoints;cv::FAST(first_image, keypoints, 40);cout << "keypoints: " << keypoints.size() << endl;// compute angle for each keypointcomputeAngle(first_image, keypoints);// compute ORB descriptorsvector<DescType> descriptors;computeORBDesc(first_image, keypoints, descriptors);// plot the keypointscv::Mat image_show;cv::drawKeypoints(first_image, keypoints, image_show, cv::Scalar::all(-1),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);string a="feature";string b=".png";stringstream ss;ss<<a<<frame<<b;// cv::imshow(ss.str(), image_show);cv::imwrite(ss.str(), image_show);cv::waitKey(0);// we can also match descriptors between images// same for the secondvector<cv::KeyPoint> keypoints2;cv::FAST(second_image, keypoints2, 40);cout << "keypoints: " << keypoints2.size() << endl;// compute angle for each keypointcomputeAngle(second_image, keypoints2);// compute ORB descriptorsvector<DescType> descriptors2;computeORBDesc(second_image, keypoints2, descriptors2);// find matchesvector<cv::DMatch> matches;bfMatch(descriptors, descriptors2, matches);if (matches.size()<4){cout<<"匹配点过少!"<<endl;}cout << "matches: " << matches.size() << endl;// plot the matchescv::drawMatches(first_image, keypoints, second_image, keypoints2, matches, image_show);string c="matches";string d=".png";stringstream sb;sb<<c<<frame<<d;cv::imshow(sb.str(), image_show);cv::imwrite(sb.str(), image_show);cv::waitKey(0);cout << "done." << endl;cout<<endl;}return 0;
}// -------------------------------------------------------------------------------------------------- //// compute the angle
void computeAngle(const cv::Mat &image, vector<cv::KeyPoint> &keypoints) {int half_patch_size = 8;for (auto &kp : keypoints) {// START YOUR CODE HERE (~7 lines)
// kp.angle = 0; // compute kp.angledouble m10 = 0;double m01 = 0;int x =cvRound(kp.pt.x);int y =cvRound(kp.pt.y);if(x-half_patch_size<0||x+half_patch_size>image.cols||y-half_patch_size<0||y+half_patch_size>image.rows)continue;for(int u = x - half_patch_size;u<x + half_patch_size;++u){for(int v = y -half_patch_size;v< y + half_patch_size;++v){m10 += (u-x)*image.at<uchar>(v,u);m01 += (v-y)*image.at<uchar>(v,u);}}double theta = std::atan(m01/m10);kp.angle = theta * 180/pi;cout<<"kp.angel:"<<kp.angle<<endl;
// END YOUR CODE HERE}return;
}// -------------------------------------------------------------------------------------------------- //
// ORB pattern
int ORB_pattern[256 * 4] = {8, -3, 9, 5/*mean (0), correlation (0)*/,4, 2, 7, -12/*mean (1.12461e-05), correlation (0.0437584)*/,-11, 9, -8, 2/*mean (3.37382e-05), correlation (0.0617409)*/,7, -12, 12, -13/*mean (5.62303e-05), correlation (0.0636977)*/,2, -13, 2, 12/*mean (0.000134953), correlation (0.085099)*/,1, -7, 1, 6/*mean (0.000528565), correlation (0.0857175)*/,-2, -10, -2, -4/*mean (0.0188821), correlation (0.0985774)*/,-13, -13, -11, -8/*mean (0.0363135), correlation (0.0899616)*/,-13, -3, -12, -9/*mean (0.121806), correlation (0.099849)*/,10, 4, 11, 9/*mean (0.122065), correlation (0.093285)*/,-13, -8, -8, -9/*mean (0.162787), correlation (0.0942748)*/,-11, 7, -9, 12/*mean (0.21561), correlation (0.0974438)*/,7, 7, 12, 6/*mean (0.160583), correlation (0.130064)*/,-4, -5, -3, 0/*mean (0.228171), correlation (0.132998)*/,-13, 2, -12, -3/*mean (0.00997526), correlation (0.145926)*/,-9, 0, -7, 5/*mean (0.198234), correlation (0.143636)*/,12, -6, 12, -1/*mean (0.0676226), correlation (0.16689)*/,-3, 6, -2, 12/*mean (0.166847), correlation (0.171682)*/,-6, -13, -4, -8/*mean (0.101215), correlation (0.179716)*/,11, -13, 12, -8/*mean (0.200641), correlation (0.192279)*/,4, 7, 5, 1/*mean (0.205106), correlation (0.186848)*/,5, -3, 10, -3/*mean (0.234908), correlation (0.192319)*/,3, -7, 6, 12/*mean (0.0709964), correlation (0.210872)*/,-8, -7, -6, -2/*mean (0.0939834), correlation (0.212589)*/,-2, 11, -1, -10/*mean (0.127778), correlation (0.20866)*/,-13, 12, -8, 10/*mean (0.14783), correlation (0.206356)*/,-7, 3, -5, -3/*mean (0.182141), correlation (0.198942)*/,-4, 2, -3, 7/*mean (0.188237), correlation (0.21384)*/,-10, -12, -6, 11/*mean (0.14865), correlation (0.23571)*/,5, -12, 6, -7/*mean (0.222312), correlation (0.23324)*/,5, -6, 7, -1/*mean (0.229082), correlation (0.23389)*/,1, 0, 4, -5/*mean (0.241577), correlation (0.215286)*/,9, 11, 11, -13/*mean (0.00338507), correlation (0.251373)*/,4, 7, 4, 12/*mean (0.131005), correlation (0.257622)*/,2, -1, 4, 4/*mean (0.152755), correlation (0.255205)*/,-4, -12, -2, 7/*mean (0.182771), correlation (0.244867)*/,-8, -5, -7, -10/*mean (0.186898), correlation (0.23901)*/,4, 11, 9, 12/*mean (0.226226), correlation (0.258255)*/,0, -8, 1, -13/*mean (0.0897886), correlation (0.274827)*/,-13, -2, -8, 2/*mean (0.148774), correlation (0.28065)*/,-3, -2, -2, 3/*mean (0.153048), correlation (0.283063)*/,-6, 9, -4, -9/*mean (0.169523), correlation (0.278248)*/,8, 12, 10, 7/*mean (0.225337), correlation (0.282851)*/,0, 9, 1, 3/*mean (0.226687), correlation (0.278734)*/,7, -5, 11, -10/*mean (0.00693882), correlation (0.305161)*/,-13, -6, -11, 0/*mean (0.0227283), correlation (0.300181)*/,10, 7, 12, 1/*mean (0.125517), correlation (0.31089)*/,-6, -3, -6, 12/*mean (0.131748), correlation (0.312779)*/,10, -9, 12, -4/*mean (0.144827), correlation (0.292797)*/,-13, 8, -8, -12/*mean (0.149202), correlation (0.308918)*/,-13, 0, -8, -4/*mean (0.160909), correlation (0.310013)*/,3, 3, 7, 8/*mean (0.177755), correlation (0.309394)*/,5, 7, 10, -7/*mean (0.212337), correlation (0.310315)*/,-1, 7, 1, -12/*mean (0.214429), correlation (0.311933)*/,3, -10, 5, 6/*mean (0.235807), correlation (0.313104)*/,2, -4, 3, -10/*mean (0.00494827), correlation (0.344948)*/,-13, 0, -13, 5/*mean (0.0549145), correlation (0.344675)*/,-13, -7, -12, 12/*mean (0.103385), correlation (0.342715)*/,-13, 3, -11, 8/*mean (0.134222), correlation (0.322922)*/,-7, 12, -4, 7/*mean (0.153284), correlation (0.337061)*/,6, -10, 12, 8/*mean (0.154881), correlation (0.329257)*/,-9, -1, -7, -6/*mean (0.200967), correlation (0.33312)*/,-2, -5, 0, 12/*mean (0.201518), correlation (0.340635)*/,-12, 5, -7, 5/*mean (0.207805), correlation (0.335631)*/,3, -10, 8, -13/*mean (0.224438), correlation (0.34504)*/,-7, -7, -4, 5/*mean (0.239361), correlation (0.338053)*/,-3, -2, -1, -7/*mean (0.240744), correlation (0.344322)*/,2, 9, 5, -11/*mean (0.242949), correlation (0.34145)*/,-11, -13, -5, -13/*mean (0.244028), correlation (0.336861)*/,-1, 6, 0, -1/*mean (0.247571), correlation (0.343684)*/,5, -3, 5, 2/*mean (0.000697256), correlation (0.357265)*/,-4, -13, -4, 12/*mean (0.00213675), correlation (0.373827)*/,-9, -6, -9, 6/*mean (0.0126856), correlation (0.373938)*/,-12, -10, -8, -4/*mean (0.0152497), correlation (0.364237)*/,10, 2, 12, -3/*mean (0.0299933), correlation (0.345292)*/,7, 12, 12, 12/*mean (0.0307242), correlation (0.366299)*/,-7, -13, -6, 5/*mean (0.0534975), correlation (0.368357)*/,-4, 9, -3, 4/*mean (0.099865), correlation (0.372276)*/,7, -1, 12, 2/*mean (0.117083), correlation (0.364529)*/,-7, 6, -5, 1/*mean (0.126125), correlation (0.369606)*/,-13, 11, -12, 5/*mean (0.130364), correlation (0.358502)*/,-3, 7, -2, -6/*mean (0.131691), correlation (0.375531)*/,7, -8, 12, -7/*mean (0.160166), correlation (0.379508)*/,-13, -7, -11, -12/*mean (0.167848), correlation (0.353343)*/,1, -3, 12, 12/*mean (0.183378), correlation (0.371916)*/,2, -6, 3, 0/*mean (0.228711), correlation (0.371761)*/,-4, 3, -2, -13/*mean (0.247211), correlation (0.364063)*/,-1, -13, 1, 9/*mean (0.249325), correlation (0.378139)*/,7, 1, 8, -6/*mean (0.000652272), correlation (0.411682)*/,1, -1, 3, 12/*mean (0.00248538), correlation (0.392988)*/,9, 1, 12, 6/*mean (0.0206815), correlation (0.386106)*/,-1, -9, -1, 3/*mean (0.0364485), correlation (0.410752)*/,-13, -13, -10, 5/*mean (0.0376068), correlation (0.398374)*/,7, 7, 10, 12/*mean (0.0424202), correlation (0.405663)*/,12, -5, 12, 9/*mean (0.0942645), correlation (0.410422)*/,6, 3, 7, 11/*mean (0.1074), correlation (0.413224)*/,5, -13, 6, 10/*mean (0.109256), correlation (0.408646)*/,2, -12, 2, 3/*mean (0.131691), correlation (0.416076)*/,3, 8, 4, -6/*mean (0.165081), correlation (0.417569)*/,2, 6, 12, -13/*mean (0.171874), correlation (0.408471)*/,9, -12, 10, 3/*mean (0.175146), correlation (0.41296)*/,-8, 4, -7, 9/*mean (0.183682), correlation (0.402956)*/,-11, 12, -4, -6/*mean (0.184672), correlation (0.416125)*/,1, 12, 2, -8/*mean (0.191487), correlation (0.386696)*/,6, -9, 7, -4/*mean (0.192668), correlation (0.394771)*/,2, 3, 3, -2/*mean (0.200157), correlation (0.408303)*/,6, 3, 11, 0/*mean (0.204588), correlation (0.411762)*/,3, -3, 8, -8/*mean (0.205904), correlation (0.416294)*/,7, 8, 9, 3/*mean (0.213237), correlation (0.409306)*/,-11, -5, -6, -4/*mean (0.243444), correlation (0.395069)*/,-10, 11, -5, 10/*mean (0.247672), correlation (0.413392)*/,-5, -8, -3, 12/*mean (0.24774), correlation (0.411416)*/,-10, 5, -9, 0/*mean (0.00213675), correlation (0.454003)*/,8, -1, 12, -6/*mean (0.0293635), correlation (0.455368)*/,4, -6, 6, -11/*mean (0.0404971), correlation (0.457393)*/,-10, 12, -8, 7/*mean (0.0481107), correlation (0.448364)*/,4, -2, 6, 7/*mean (0.050641), correlation (0.455019)*/,-2, 0, -2, 12/*mean (0.0525978), correlation (0.44338)*/,-5, -8, -5, 2/*mean (0.0629667), correlation (0.457096)*/,7, -6, 10, 12/*mean (0.0653846), correlation (0.445623)*/,-9, -13, -8, -8/*mean (0.0858749), correlation (0.449789)*/,-5, -13, -5, -2/*mean (0.122402), correlation (0.450201)*/,8, -8, 9, -13/*mean (0.125416), correlation (0.453224)*/,-9, -11, -9, 0/*mean (0.130128), correlation (0.458724)*/,1, -8, 1, -2/*mean (0.132467), correlation (0.440133)*/,7, -4, 9, 1/*mean (0.132692), correlation (0.454)*/,-2, 1, -1, -4/*mean (0.135695), correlation (0.455739)*/,11, -6, 12, -11/*mean (0.142904), correlation (0.446114)*/,-12, -9, -6, 4/*mean (0.146165), correlation (0.451473)*/,3, 7, 7, 12/*mean (0.147627), correlation (0.456643)*/,5, 5, 10, 8/*mean (0.152901), correlation (0.455036)*/,0, -4, 2, 8/*mean (0.167083), correlation (0.459315)*/,-9, 12, -5, -13/*mean (0.173234), correlation (0.454706)*/,0, 7, 2, 12/*mean (0.18312), correlation (0.433855)*/,-1, 2, 1, 7/*mean (0.185504), correlation (0.443838)*/,5, 11, 7, -9/*mean (0.185706), correlation (0.451123)*/,3, 5, 6, -8/*mean (0.188968), correlation (0.455808)*/,-13, -4, -8, 9/*mean (0.191667), correlation (0.459128)*/,-5, 9, -3, -3/*mean (0.193196), correlation (0.458364)*/,-4, -7, -3, -12/*mean (0.196536), correlation (0.455782)*/,6, 5, 8, 0/*mean (0.1972), correlation (0.450481)*/,-7, 6, -6, 12/*mean (0.199438), correlation (0.458156)*/,-13, 6, -5, -2/*mean (0.211224), correlation (0.449548)*/,1, -10, 3, 10/*mean (0.211718), correlation (0.440606)*/,4, 1, 8, -4/*mean (0.213034), correlation (0.443177)*/,-2, -2, 2, -13/*mean (0.234334), correlation (0.455304)*/,2, -12, 12, 12/*mean (0.235684), correlation (0.443436)*/,-2, -13, 0, -6/*mean (0.237674), correlation (0.452525)*/,4, 1, 9, 3/*mean (0.23962), correlation (0.444824)*/,-6, -10, -3, -5/*mean (0.248459), correlation (0.439621)*/,-3, -13, -1, 1/*mean (0.249505), correlation (0.456666)*/,7, 5, 12, -11/*mean (0.00119208), correlation (0.495466)*/,4, -2, 5, -7/*mean (0.00372245), correlation (0.484214)*/,-13, 9, -9, -5/*mean (0.00741116), correlation (0.499854)*/,7, 1, 8, 6/*mean (0.0208952), correlation (0.499773)*/,7, -8, 7, 6/*mean (0.0220085), correlation (0.501609)*/,-7, -4, -7, 1/*mean (0.0233806), correlation (0.496568)*/,-8, 11, -7, -8/*mean (0.0236505), correlation (0.489719)*/,-13, 6, -12, -8/*mean (0.0268781), correlation (0.503487)*/,2, 4, 3, 9/*mean (0.0323324), correlation (0.501938)*/,10, -5, 12, 3/*mean (0.0399235), correlation (0.494029)*/,-6, -5, -6, 7/*mean (0.0420153), correlation (0.486579)*/,8, -3, 9, -8/*mean (0.0548021), correlation (0.484237)*/,2, -12, 2, 8/*mean (0.0616622), correlation (0.496642)*/,-11, -2, -10, 3/*mean (0.0627755), correlation (0.498563)*/,-12, -13, -7, -9/*mean (0.0829622), correlation (0.495491)*/,-11, 0, -10, -5/*mean (0.0843342), correlation (0.487146)*/,5, -3, 11, 8/*mean (0.0929937), correlation (0.502315)*/,-2, -13, -1, 12/*mean (0.113327), correlation (0.48941)*/,-1, -8, 0, 9/*mean (0.132119), correlation (0.467268)*/,-13, -11, -12, -5/*mean (0.136269), correlation (0.498771)*/,-10, -2, -10, 11/*mean (0.142173), correlation (0.498714)*/,-3, 9, -2, -13/*mean (0.144141), correlation (0.491973)*/,2, -3, 3, 2/*mean (0.14892), correlation (0.500782)*/,-9, -13, -4, 0/*mean (0.150371), correlation (0.498211)*/,-4, 6, -3, -10/*mean (0.152159), correlation (0.495547)*/,-4, 12, -2, -7/*mean (0.156152), correlation (0.496925)*/,-6, -11, -4, 9/*mean (0.15749), correlation (0.499222)*/,6, -3, 6, 11/*mean (0.159211), correlation (0.503821)*/,-13, 11, -5, 5/*mean (0.162427), correlation (0.501907)*/,11, 11, 12, 6/*mean (0.16652), correlation (0.497632)*/,7, -5, 12, -2/*mean (0.169141), correlation (0.484474)*/,-1, 12, 0, 7/*mean (0.169456), correlation (0.495339)*/,-4, -8, -3, -2/*mean (0.171457), correlation (0.487251)*/,-7, 1, -6, 7/*mean (0.175), correlation (0.500024)*/,-13, -12, -8, -13/*mean (0.175866), correlation (0.497523)*/,-7, -2, -6, -8/*mean (0.178273), correlation (0.501854)*/,-8, 5, -6, -9/*mean (0.181107), correlation (0.494888)*/,-5, -1, -4, 5/*mean (0.190227), correlation (0.482557)*/,-13, 7, -8, 10/*mean (0.196739), correlation (0.496503)*/,1, 5, 5, -13/*mean (0.19973), correlation (0.499759)*/,1, 0, 10, -13/*mean (0.204465), correlation (0.49873)*/,9, 12, 10, -1/*mean (0.209334), correlation (0.49063)*/,5, -8, 10, -9/*mean (0.211134), correlation (0.503011)*/,-1, 11, 1, -13/*mean (0.212), correlation (0.499414)*/,-9, -3, -6, 2/*mean (0.212168), correlation (0.480739)*/,-1, -10, 1, 12/*mean (0.212731), correlation (0.502523)*/,-13, 1, -8, -10/*mean (0.21327), correlation (0.489786)*/,8, -11, 10, -6/*mean (0.214159), correlation (0.488246)*/,2, -13, 3, -6/*mean (0.216993), correlation (0.50287)*/,7, -13, 12, -9/*mean (0.223639), correlation (0.470502)*/,-10, -10, -5, -7/*mean (0.224089), correlation (0.500852)*/,-10, -8, -8, -13/*mean (0.228666), correlation (0.502629)*/,4, -6, 8, 5/*mean (0.22906), correlation (0.498305)*/,3, 12, 8, -13/*mean (0.233378), correlation (0.503825)*/,-4, 2, -3, -3/*mean (0.234323), correlation (0.476692)*/,5, -13, 10, -12/*mean (0.236392), correlation (0.475462)*/,4, -13, 5, -1/*mean (0.236842), correlation (0.504132)*/,-9, 9, -4, 3/*mean (0.236977), correlation (0.497739)*/,0, 3, 3, -9/*mean (0.24314), correlation (0.499398)*/,-12, 1, -6, 1/*mean (0.243297), correlation (0.489447)*/,3, 2, 4, -8/*mean (0.00155196), correlation (0.553496)*/,-10, -10, -10, 9/*mean (0.00239541), correlation (0.54297)*/,8, -13, 12, 12/*mean (0.0034413), correlation (0.544361)*/,-8, -12, -6, -5/*mean (0.003565), correlation (0.551225)*/,2, 2, 3, 7/*mean (0.00835583), correlation (0.55285)*/,10, 6, 11, -8/*mean (0.00885065), correlation (0.540913)*/,6, 8, 8, -12/*mean (0.0101552), correlation (0.551085)*/,-7, 10, -6, 5/*mean (0.0102227), correlation (0.533635)*/,-3, -9, -3, 9/*mean (0.0110211), correlation (0.543121)*/,-1, -13, -1, 5/*mean (0.0113473), correlation (0.550173)*/,-3, -7, -3, 4/*mean (0.0140913), correlation (0.554774)*/,-8, -2, -8, 3/*mean (0.017049), correlation (0.55461)*/,4, 2, 12, 12/*mean (0.01778), correlation (0.546921)*/,2, -5, 3, 11/*mean (0.0224022), correlation (0.549667)*/,6, -9, 11, -13/*mean (0.029161), correlation (0.546295)*/,3, -1, 7, 12/*mean (0.0303081), correlation (0.548599)*/,11, -1, 12, 4/*mean (0.0355151), correlation (0.523943)*/,-3, 0, -3, 6/*mean (0.0417904), correlation (0.543395)*/,4, -11, 4, 12/*mean (0.0487292), correlation (0.542818)*/,2, -4, 2, 1/*mean (0.0575124), correlation (0.554888)*/,-10, -6, -8, 1/*mean (0.0594242), correlation (0.544026)*/,-13, 7, -11, 1/*mean (0.0597391), correlation (0.550524)*/,-13, 12, -11, -13/*mean (0.0608974), correlation (0.55383)*/,6, 0, 11, -13/*mean (0.065126), correlation (0.552006)*/,0, -1, 1, 4/*mean (0.074224), correlation (0.546372)*/,-13, 3, -9, -2/*mean (0.0808592), correlation (0.554875)*/,-9, 8, -6, -3/*mean (0.0883378), correlation (0.551178)*/,-13, -6, -8, -2/*mean (0.0901035), correlation (0.548446)*/,5, -9, 8, 10/*mean (0.0949843), correlation (0.554694)*/,2, 7, 3, -9/*mean (0.0994152), correlation (0.550979)*/,-1, -6, -1, -1/*mean (0.10045), correlation (0.552714)*/,9, 5, 11, -2/*mean (0.100686), correlation (0.552594)*/,11, -3, 12, -8/*mean (0.101091), correlation (0.532394)*/,3, 0, 3, 5/*mean (0.101147), correlation (0.525576)*/,-1, 4, 0, 10/*mean (0.105263), correlation (0.531498)*/,3, -6, 4, 5/*mean (0.110785), correlation (0.540491)*/,-13, 0, -10, 5/*mean (0.112798), correlation (0.536582)*/,5, 8, 12, 11/*mean (0.114181), correlation (0.555793)*/,8, 9, 9, -6/*mean (0.117431), correlation (0.553763)*/,7, -4, 8, -12/*mean (0.118522), correlation (0.553452)*/,-10, 4, -10, 9/*mean (0.12094), correlation (0.554785)*/,7, 3, 12, 4/*mean (0.122582), correlation (0.555825)*/,9, -7, 10, -2/*mean (0.124978), correlation (0.549846)*/,7, 0, 12, -2/*mean (0.127002), correlation (0.537452)*/,-1, -6, 0, -11/*mean (0.127148), correlation (0.547401)*/
};// compute the descriptor
void computeORBDesc(const cv::Mat &image, vector<cv::KeyPoint> &keypoints, vector<DescType> &desc) {for (auto &kp: keypoints) {DescType d(256, false);double un_up,un_vp,un_uq,un_vq; // 一对点;double up,vp,uq,vq; // 旋转后的点;for (int i = 0; i < 256; i++) {// START YOUR CODE HERE (~7 lines)d[i] = 0; // if kp goes outside, set d.clear()un_up = ORB_pattern[i*4];un_vp = ORB_pattern[i*4+1];un_uq = ORB_pattern[i*4+2];un_vq = ORB_pattern[i*4+3]; // 比较两组点的灰度值大小;// 旋转到主方向上;double angle = kp.angle * (pi/180);up =kp.pt.x+ cos(angle)*un_up-sin(angle)*un_vp;vp =kp.pt.y+ sin(angle)*un_up + cos(angle)*un_vp;uq =kp.pt.x+ cos(angle)*un_uq-sin(angle)*un_vq;vq =kp.pt.y+ sin(angle)*un_uq + cos(angle)*un_vq;//边界约束;if(up>image.cols||up<0 || vp <0||vp>image.rows||uq>image.cols||uq<0 || vq <0||vq>image.rows){d.clear();//超出边界,特征点描述子清零;break;}else if(image.at<uchar>(vp,up)<image.at<uchar>(vq,uq)){d[i]=1;}// END YOUR CODE HERE}desc.push_back(d);}int bad = 0;for (auto &d: desc) {if (d.empty()) bad++;}cout << "bad/total: " << bad << "/" << desc.size() << endl;return;
}
// brute-force matching
void bfMatch(const vector<DescType> &desc1, const vector<DescType> &desc2, vector<cv::DMatch> &matches) {int d_max = 50;int d = 0;int queryIdx,trainIdx;int dis;// START YOUR CODE HERE (~12 lines)// find matches between desc1 and desc2.for(int i =0;i<desc1.size();++i){if(desc1[i].empty())continue;d=0;dis = 0;for(int j =0;j<desc2.size();++j){if(desc2[j].empty())continue;d=0;for(int k = 0;k<256;++k){if(desc1[i][k] != desc2[j][k])d += 1;}
// cout<<"d: "<<d<<endl;if (d<d_max&&(dis==0||d<dis)){dis = d;queryIdx = i;trainIdx = j;}}if(dis != 0) //匹配到了;{matches.push_back(cv::DMatch(queryIdx,trainIdx,dis));}}// END YOUR CODE HEREfor (auto &m: matches) {cout << m.queryIdx << ", " << m.trainIdx << ", " << m.distance << endl;}return;
}
4.编译运行
编译:
g++ computeORB2.cpp -o computeORB2 `pkg-config --cflags --libs opencv` -std=c++11
运行:
sudo ./computeORB2
5…运行结果gif
1)ORB特征点(无连线匹配)
2)ORB特征点(连线匹配)
ORB特征点匹配,图片序列的特征匹配相关推荐
- CTR/CVR预测模型的特征怎么找?不同类型特征怎么处理?序列Embedding特征怎么用?
浅谈微视推荐系统中的特征工程 浅谈微视推荐系统中的特征工程浅谈不简单.https://mp.weixin.qq.com/s?__biz=MjM5ODYwMjI2MA==&mid=2649744 ...
- php 匹配图片路径_php正则匹配图片路径原理与方法
下面我来给大家介绍在php正则匹配图片路径原理与实现方法,有需要了解的朋友可进入参考参考. 提取src=里面的图片地址还不足够,因为不能保证那个地址一定是绝对地址,完全的地址,如果那是相对的呢?如果地 ...
- ORB SLAM学习--跑自己数据集图片序列或摄像头或视频(转)
转自:用ORB SLAM2跑自己的数据集 使用图片序列或摄像头或视频 实践篇_不二青衣的博客-CSDN博客_orbslam2运行自己的数据集 学习 做实验参考使用,侵权则删 用ORB SLAM2跑自己 ...
- 特征提取(Detect)、特征描述(Descriptor)、特征匹配(Match)的通俗解释
特征匹配(Feature Match)是计算机视觉中很多应用的基础,比如说图像配准,摄像机跟踪,三维重建,物体识别,人脸识别,所以花一些时间去深入理解这个概念是不为过的.本文希望通过一种通俗易懂的方式 ...
- 如何理解“特征提取(Detect)、特征描述(Descriptor)、特征匹配(Match)”
特征匹配(Feature Match) 是计算机视觉中很多应用的基础,比如说图像配准,摄像机跟踪,三维重建,物体识别,人脸识别. 首先通过几张图片来指出什么是特征匹配,以及特征匹配的过程. 图像一:彩 ...
- getvalue参数计数不匹配_OpenCV开发笔记(六十八):红胖子8分钟带你使用特征点Flann最邻近差值匹配识别...
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- 线特征LSD提取、LBD描述子匹配实现过程源码
使用opencv实现线特征LSD提取.LBD描述子匹配实现: 具体逻辑如下: 1.设置读图的路径 2. 加载图片 3. 创建mask掩代码 4.初始化参数 5.检测LSD线段 6. 计算尺度第一塔的描 ...
- ML之SIFT_FLANN:FLANN算法的简介、使用方法(对图片提取SIFT特征并利用FLANN方法实现计算图像相似度并可视化案例)之详细攻略
ML之SIFT_FLANN:FLANN算法的简介.使用方法(对图片提取SIFT特征并利用FLANN方法实现计算图像相似度并可视化案例)之详细攻略 目录 FLANN算法 1.flann的搜索步骤 (1) ...
- 【CTR预估】CTR模型如何加入稠密连续型和序列型特征?
" CTR预估任务中除了广泛使用的稀疏离散型特征外,还会用到稠密连续型以及一些序列类型的特征,本文为大家简要梳理几种特征的处理方式-" 稠密连续类型特征的处理 在点击率预估问题中, ...
最新文章
- java安装傻瓜_安装Java傻瓜式教程
- 实验: VMware使用快照间接备份原始VMDK文件
- 180 所高校新增“人工智能”专业,人工智能火到爆!
- 逆向工程 sql_mybatis逆向生成工具,真的很好用!
- YTU 2887: D--机器人Bill
- Linux 等待进程结束 wait() 和 waitpid()
- linq to sql 行转列_SQL 难题:行转列
- 07-windows下Elasticsearch安装-elasticsearch-service服务
- The Economist经济学人是如何使用Go语言构建内容平台微服务架构的?
- python serial_python_serial
- 错误代码: 1066 Not unique table/alias: #39;c#39;
- linux操作移动了根目录下的/lib和/lib64之后系统使用除了cd之外的任何命令都提示...
- python股票交易微信提醒_python实现秒杀商品的微信自动提醒功能(代码详解)
- WickedEngine 开源游戏引擎
- 关于java就业的简历模板,工作一年java简历模板
- 第119章 SQL函数 RIGHT
- 微软怎么设计Exchange 2003的体系结构
- php面试php数组变ahp,php实现把数组按指定的个数分隔
- 猜数字?我要王者荣耀
- 禁止acer care center开机自动启动