首页 > 编程知识 正文

测量系统分析五大特性,算法的主要特征有哪些

时间:2023-05-04 23:45:03 阅读:39614 作者:1799

Camera系列文章传感器融合是指对多个传感器采集到的数据进行融合处理,以更好地感知周围环境,首先包括摄像头和图像知识的基本介绍、OpenCV图像识别(特征提取、目标分类等),以及摄像头和图像的相关内容

系列文章目录

1 .摄像机基础和校准

2. Lidar TTC的估计

3. Camera TTC报价

4. OpenCV图像特征提取

5 .常见特征检测算法介绍

6 .常见特征描述符介绍

7. YOLOv3物体检测

文章目录介绍Camera系列文章亮度和几何变化不变性自动大小选择常用的特征点检测算法

Harris检测算法可以很好地检测角点,但对图像的某些变化(如旋转、调整大小和透视变换)效果不大。 本节首先熟悉这些图像变换,然后介绍目前的几种密钥检测算法。

亮度和几何变化不变性目前有很多特征检测算法可供选择,包括Harris检测算法,根据需要检测的关键类型和图像特性,需要考虑相关算法对亮度和几何变化的鲁棒性。

下图是前后不同时间帧的图像,可见有比较严重的失真(变换)。

主要需要考虑以下四种转换类型:

旋转旋转;

调整大小比例更改;

强度变化智能更改;

仿射变换仿射变换

自动大小选择为了以最佳大小检测特征点,必须找到图像中他们的大小,并选择合适的结实奇异果窗w(x,y ) w(x ) x,y ) w(x,y )。 无法获取特征点的尺寸时,需要进行一定程度的尺寸转换。 这里,密钥检测算法需要以不同的大小进行密钥检测。 目前大多数特征点检测算法都可以自动选择特性尺度因子,可以很好地解决这个问题。

介绍一种常用的特征点检测算法目前在物体识别、跟踪、图像匹配、机器人构造图和3D建模等领域使用了很多特征点检测算法,不仅具备以上图像变换的处理能力,而且可以直接比较其检测性能和处理能力

Harris和以下比较传统的检测算子主要关注识别性能,计算复杂度相对较低。 一种算法如下:

HarrisCornerdetector(Harris,步骤)主要用于角点的检测。 1996地理位置测量跟踪(Shi,Tomasi ) 1999 scaleinvariantfeaturetransform (Lowe )主要是斑点检测(blob ) 2006 speededuduprobustferetransform

近年来,有很多实时APP应用可以在手机上运行。 以下是这样的算法。 2006 featuresfromacceleratedsegmenttest (fast ) ) Rosten, Drummond ) 2010 binaryrobustindependentelementaryfeatures (brief ) ) Calonder,et al.) 2011 orientedfastandrotatedbrief (orb ) ) rublee et al.(2011 binaryrobustinvariantscalablekeypoints ) leuter sieg wart (2012快速Ortiz,Vandergheynst ) 2012kaze(Alcantarilla,Bartoli,Davidson )以下

void detKeypoints1()//loadimagefromfileandconverttograyscalecv :3360 matimgggray; cv : matimg=cv :3360 im read (./images/img1. png ); cv:cvtcolor(img,imgGray,cv:COLOR_BGR2GRAY ); //Shi-tomasi检测器//prepareparametersintblocksize=6; //sizeofablockforcomputingaderivativecovariationmatrixovereachpixelneighborhooddoublema

xOverlap = 0.0; // max. permissible overlap between two features in % double minDistance = (1.0 - maxOverlap) * blockSize; int maxCorners = img.rows * img.cols / max(1.0, minDistance); // max. num. of keypoints double qualityLevel = 0.01; // minimal accepted quality of image corners double k = 0.04; bool useHarris = false; vector<cv::KeyPoint> kptsShiTomasi; vector<cv::Point2f> corners; // output data structure double t = (double)cv::getTickCount(); cv::goodFeaturesToTrack(imgGray, corners, maxCorners, qualityLevel, minDistance, cv::Mat(), blockSize, useHarris, k); t = ((double)cv::getTickCount() - t) / cv::getTickFrequency(); cout << "Shi-Tomasi with n= " << corners.size() << " keypoints in " << 1000 * t / 1.0 << " ms" << endl; for (auto it = corners.begin(); it != corners.end(); ++it) { // add corners to result vector cv::KeyPoint newKeyPoint; newKeyPoint.pt = cv::Point2f((*it).x, (*it).y); newKeyPoint.size = blockSize; kptsShiTomasi.push_back(newKeyPoint); } // visualize results cv::Mat visImage = img.clone(); cv::drawKeypoints(img, kptsShiTomasi, visImage, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS); string windowName = "Shi-Tomasi Results"; cv::namedWindow(windowName, 1); imshow(windowName, visImage); // STUDENT CODE int threshold = 30; // difference between intensity of the central pixel and pixels of a circle around this pixel bool bNMS = true; // perform non-maxima suppression on keypoints cv::FastFeatureDetector::DetectorType type = cv::FastFeatureDetector::TYPE_9_16; // TYPE_9_16, TYPE_7_12, TYPE_5_8 cv::Ptr<cv::FeatureDetector> detector = cv::FastFeatureDetector::create(threshold, bNMS, type); vector<cv::KeyPoint> kptsFAST; t = (double)cv::getTickCount(); detector->detect(imgGray, kptsFAST); t = ((double)cv::getTickCount() - t) / cv::getTickFrequency(); cout << "FAST with n= " << kptsFAST.size() << " keypoints in " << 1000 * t / 1.0 << " ms" << endl; visImage = img.clone(); cv::drawKeypoints(img, kptsFAST, visImage, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS); windowName = "FAST Results"; cv::namedWindow(windowName, 2); imshow(windowName, visImage); cv::waitKey(0); // EOF STUDENT CODE}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。