F R E A K 特 征 点 匹 配 算 法 介 绍 ( 2 0 2 0 )
- 格式:pdf
- 大小:218.33 KB
- 文档页数:8
近似匹配公式(二)近似匹配公式1. Levenshtein距离(编辑距离)公式•描述:Levenshtein距离用于衡量两个字符串之间的差异程度,即通过添加、删除和替换字符将一个字符串转换为另一个字符串的最小操作次数。
•公式:d[i,j] = min(d[i-1,j]+1, d[i,j-1]+1, d[i-1,j-1]+(s[i]!=t[j]))•例子:比如字符串s为“kitten”,字符串t为“sitting”,计算Levenshtein距离时,最小编辑次数为3次,即将”i”替换为”i”,“e”替换为”i”,“n”替换为”g”。
2. 欧几里得距离公式•描述:欧几里得距离用于衡量两个向量之间的差异程度,即两个向量的欧式距离。
•公式:d = sqrt((x2-x1)^2 + (y2-y1)^2)•例子:比如有两个二维向量A(1, 2)和B(4, 6),计算欧几里得距离时,即d = sqrt((4-1)^2 + (6-2)^2) = sqrt(9+16) = 5。
3. Jaccard相似性系数公式•描述:Jaccard相似性系数用于衡量两个集合之间的相似程度,即两个集合的交集与并集的比值。
•公式:J(A,B) = |A ∩ B| / |A ∪ B|•例子:比如有两个集合A={1, 2, 3}和B={2, 3, 4},计算Jaccard相似性系数时,即J(A,B) = |{2, 3}| / |{1, 2, 3,4}| = 2 / 4 = 。
4. 余弦相似度公式•描述:余弦相似度用于衡量两个向量之间的夹角余弦值,范围在-1到1之间,数值越接近1表示越相似。
•公式:similarity = cos(θ) = (A·B) / (||A|| ||B||)•例子:比如有两个向量A(1, 2)和B(3, 4),计算余弦相似度时,即similarity = (13 + 24) / (sqrt(1^2 + 2^2) * sqrt(3^2 + 4^2)) = (3+8) / (sqrt(5) * sqrt(25)) ≈ 。
Sklearn_工具--2SKlearn介绍SKlearn介绍一.Python科学计算环境Final二.SKlearn算法库的顶层设计 1.SKlearn包含哪些模块 2.SKlearn六大板块统一API2.1API2.2sklearn监督学习工作流程2.2sklearn无监督学习工作流程2.3sklearn数据预处理工作流程 2.4SKlearn算法模块的学习顺序三.SKlearn数据集操作API1.自带小数据集1.1鸢尾花数据集1.2手写数字数据集:load_digits()1.3乳腺癌数据集:load_breast_cancer()1.4糖尿病数据集:load_diabetes()1.4波士顿房价数据集:load_boston()1.5体能训练数据集:load_linnerud()1.6图像数据集:load_sample_image(name)2.svmlight-libsvm格式的数据集3.可在线下载的数据集(Downloadable Dataset)3.1 20类新闻文本数据集3.2 野外带标记人脸数据集:fetch_lfw_people()-fetch_lfw_pairs()3.3Olivetti人脸数据集:fetch_olivetti_faces()3.4rcv1多标签数据集:fetch_rcv1()3.5Forest covertypes:预测森林表面植被类型4计算机生成的数据集 4.1用于分类任务和聚类任务的4.2make_multilabel_classification,多标签随机样本4.3用于回归任务的4.4用于流形学习的4.4用于因子分解的一.Py【现场实操追-女教-程】thon科学计算环境FinalScik【QQ】it-Image是专门用来处理图像的机器学习接口处理图【1】像的还有OpenCV,OpenCV使用c和c++写的,但是提供了py【О】thon接口,可以用python去调用二.SK【⒈】learn算法库的顶层设计科学包【6】是如何架构起来的1.S【⒐】Klearn包含哪些模块SKl【⒌】earn监督学习模块有15种SKle【2】arn无监督学习模块SKle【б】arn数据变换模块管道流pipline严格来说不是数据变换模块,pipline负责输出重定向,sklearn通过pipline可以将train,test,得分估计连成一个一长串的,方便整理代码。
第42卷第5期 激光杂志Vol.42,No.5 2021 年5 月 LASER JOURNAL M a y,2021大数据挖掘技术的光流场图像匹配方法设计黄凯宁\郭有强、杨静2'蚌埠学院计算机工程学院,安徽蚌埠232000;2安徽理工大学数学与大数据学院,安徽淮南232001摘要:光流场图像匹配可以提高图像的质量,便于后继的光流场图像处理,而当前光流场图像匹配方法存在一些不足,如匹配耗时间长,错误率较高等,为了获得更优的光流场图像匹配结果,提出了大数据挖掘技术的光流场图像匹配方法。
首先采集大量的光流场图像,并对图像预处理,消除干扰因素,从中提取边缘信息,幅 值特征,角度特征等特征向量,并引入大数据挖掘技术根据对提取到的特征向量进行光流场图像匹配,最后对比其它图像匹配方法。
实验结果表明,大数据挖掘技术的光流场图像匹配方法用时较短,提高光流场图像匹配效率,而且光流场图像匹配精度超过95%,大幅度减少了光流场图像匹配错误率,错误率仅为3%,具有广泛的应用范围。
关键词:大数据挖掘;边缘特征;光流场图像;图像方法设计;匹配效率中图分类号:TN29 文献标识码:A d o i:10. 14016/j. cnki.jgzz. 2021. 05. 107Design of image matching method of optical flow fieldbased on big data mining technologyH U A N G Kaining1,G U O Youqiang1,Y A N G Jing~1School o f Com puter E n g in eerin g,B engbu U niversity,B engbu A n h u iy232000,C hina;2 School o f M athem atics a n d B ig D a ta,A n h u i University o f Science &T echnology,H u a inan A n h u i,232001 ,C hinaAbstract:Image matching of optical flow f i e l d can improve the image quality and f a c i l i t a t e the subsequent image processing of optical flow field.However,there are some shortcomings in the current image matching methods of the optical flow field,such as long matching time and high error rate.In order t o obtain better image matching results of the optical flow field,an image matching method o f optical flow f i e l d based on big data mining technology i s proposed. Firstly,many optical flow f i e l d images are collected,and image preprocessing i s carried out t o eliminate interference factors,and feature vectors such as edge information,amplitude feature and angle feature are extracted from them.Big data mining technology i s then introduced t o match optical flow f i e l d images according t o the multi-extracted feature vectors.Finally,other image matching methods are compared.The experimental results show that the optical flow f i e l d image matching method of big data mining technology in this paper takes less time,improves the efficiency of optical flow f i e l d image matching,and the accuracy of optical flow f i e l d image matching i s more than95%.I t dramatically reduces the error rate of optical flow f i e l d image matching.The error rate i s only 3%and has a wide range of applications.Key words:big data mining;edge features;laser image;image method design;matching efficiency收稿日期:2020-10-26基金项目:国家自然科学基金项目(No.617020008);国家自然科学基金项目(No.61672001)作者简介:黄凯宁( 1982-),女,硕士,高级工程师,研究方向:数据挖掘,大数据收集和存储技术研究。
【原创】我的KM算法详解0.二分图二分图的概念二分图又称作二部图,是图论中的一种特殊模型。
设G=(V, E)是一个无向图。
如果顶点集V可分割为两个互不相交的子集X和Y,并且图中每条边连接的两个顶点一个在X中,另一个在Y中,则称图G为二分图。
可以得到线上的driver与order之间的匹配关系既是一个二分图。
二分图的判定无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。
判断无向连通图是不是二分图,可以使用深度优先遍历算法(又名交叉染色法)。
下面着重介绍下交叉染色法的定义与原理首先任意取出一个顶点进行染色,和该节点相邻的点有三种情况:1.如果节点没有染过色,就染上与它相反的颜色,推入队列,2.如果节点染过色且相反,忽视掉,3.如果节点染过色且与父节点相同,证明不是二分图,return二分图博客推荐交叉染色法博客推荐:交叉染色法判断二分图另外附上二分图的性质博客:二分图的一些性质1.KM算法初步KM算法全称是Kuhn-Munkras,是这两个人在1957年提出的,有趣的是,匈牙利算法是在1965年提出的。
?增广路径增广路径定义:若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M 的一条增广路径(举例来说,有A、B集合,增广路由A中一个点通向B中一个点,再由B中这个点通向A中一个点……交替进行)增广路径有如下特性:?1. 有奇数条边?2. 起点在二分图的X边,终点在二分图的Y边?3. 路径上的点一定是一个在X边,一个在Y边,交错出现。
?4. 整条路径上没有重复的点?5. 起点和终点都是目前还没有配对的点,其他的点都已经出现在匹配子图中?6. 路径上的所有第奇数条边都是目前还没有进入目前的匹配子图的边,而所有第偶数条边都已经进入目前的匹配子图。
奇数边比偶数边多一条边?7. 于是当我们把所有第奇数条边都加到匹配子图并把条偶数条边都删除,匹配数增加了1.例如下图,蓝色的是当前的匹配子图,红色表示未匹配的路径,目前只有边x0y0,然后通过x1找到了增广路径:x1y0-y0x0-x0y2?增广路径有两种寻径方法,一个是深搜,一个是宽搜。
三个描述符的比较:SURF,FREAK和BRISK=================分割线=================我认为从事对象识别,图像注册和使用关键点提取的其他领域的开发人员和研究人员可以发现这个帖子很有用。
最近(从2.4.2),一个新的特征描述符算法被添加到OpenCV库中。
据称FREAK描述符优于ORB和SURF描述符,但速度非常快(与ORB相当)。
也有人在我的博客上的评论提到BRISK描述符,这是比SURF更新,更高效。
那么,最后我找到一个时间来比较他们,并发表我的研究成果。
这篇文章与我过去的OpenCV比较报告非常相似。
虽然这些报告是多年前发表的,但它们还是有些实际的。
对于这个测试,我决定从头开始重写整个测试框架。
源代码即将可用。
但现在,让我解释我做了什么来找到最好的三种算法。
将图像转换为描述符的主要目标是什么?从像素域移动到更紧凑的表示形式相同的数据。
此外,我们希望我们的表示是旋转和比例不变的(例如,当源图像旋转或缩放时,表示保持不变或略微变化)。
SURF,FREAK和BRISK描述符宣称它们是旋转和尺度不变的。
========================分割线==============================就像在OpenCV比较报告中一样,测试应用程序与测试模式图像一起工作。
我们有四个基本的转换:旋转,缩放,模糊和亮度调整。
这里是如何旋转转换类看起来像:class ImageRotationTransformation : public ImageTransformationImageRotationTransformation(float startAngleInDeg, float endAngleInDeg, float step, cv::Point2f rotationCenterInUnitSpace): ImageTransformation("Rotation"), m_startAngleInDeg(startAngleInDeg), m_endAngleInDeg(endAngleInDeg), m_step(step),m_rotationCenterInUnitSpace(rotationCenterInUnitSpace) -- Fill the argumentsfor (float arg = startAngleInDeg; arg = endAngleInDeg; arg += step)m_args.push_back(arg);virtual std::vector getX() constreturn m_args;virtual void transform(float t, const cv::Mat source, cv::Mat result) constcv::Point2f center(source.cols * m_rotationCenterInUnitSpace.x, source.cols * m_rotationCenterInUnitSpace.y);cv::Mat rotationMat = cv::getRotationMatrix2D(center, t, 1);cv::warpAffine(source, result, rotationMat, source.size());private:float m_startAngleInDeg;float m_endAngleInDeg;float m_step;cv::Point2f m_rotationCenterInUnitSpace;std::vector m_args;其他类型的转换看起来相似。
但它显示了这个想法。
========================分割线==============================FeatureAlgorithm正如你可能知道的,当处理描述符时我们需要三个组件:特征检测器 - 从cv :: FeatureDetector派生的类,实现特定的检测算法。
例如,cv :: SurfFeatureDetector实现SURF文件中描述的检测算法。
描述符提取器 - 从cv :: DescriptorExtractor派生的类。
它从传递的关键点计算描述符。
cv :: SurfDescriptorExtractor将计算机的SURF描述符。
描述符匹配器 - cv :: FlannBasedMatcher类的cv :: BFMatcher的一个实例用于匹配两组描述符。
我们将这三个对象存储在FeatureAlgorithm类中:?class FeatureAlgorithmFeatureAlgorithm(std::string name, cv::FeatureDetector* d, cv::DescriptorExtractor* e, cv::DescriptorMatcher* m);std::string name;bool knMatchSupported;bool extractFeatures(const cv::Mat image, Keypoints kp, Descriptors desc) const;void matchFeatures(const Descriptors train, const Descriptors query, Matches matches) const;void matchFeatures(const Descriptors train, const Descriptors query, int k, std::vector matches) const;private:cv::FeatureDetector* detector;cv::DescriptorExtractor* extractor;cv::DescriptorMatcher* matcher;========================分割线==============================测试程序主要测试功能采用FeatureAlgorithm,Transformation和测试图像。
作为输出,我们返回每个运行的匹配统计信息列表。
这是一个简短的序列:将输入图像转换为灰度检测关键点并从输入灰度图像中提取描述符使用传递的转换算法生成所有变换的图像对于每个变换的图像:检测关键点并提取描述符匹配列车描述符和查询使用单应性估计将分段匹配到内点和外点计算统计数据(消耗时间,匹配百分比,正确匹配的百分比等)主循环使用OpenMP并行,在我的四核酷睿i5上,在测试的同时加载100%的所有内核。
特征算法:?algorithms.push_back(FeatureAlgorithm("SURF-BRISK-BF", new cv::SurfFeatureDetector(),new cv::BriskDescriptorExtractor(),new cv::BFMatcher(cv::NORM_HAMMING, true)));algorithms.push_back(FeatureAlgorithm("SURF-FREAK-BF", new cv::SurfFeatureDetector(),new cv::FREAK(),new cv::BFMatcher(cv::NORM_HAMMING, true)));algorithms.push_back(FeatureAlgorithm("SURF-SURF-BF", new cv::SurfFeatureDetector(),new cv::SurfDescriptorExtractor(),new cv::BFMatcher(cv::NORM_L2, true)));图像转换:transformations.push_back(new GaussianBlurTransform(9));transformations.push_back(newBrightnessImageTransform(-127, +127, 10));transformations.push_back(new ImageRotationTransformation(0, 360, 10, cv::Point2f(0.5f,0.5f)));transformations.push_back(new ImageScalingTransformation(0.25f, 2.0f, 0.1f));========================分割线==============================计算以下指标:匹配百分比?- 分割匹配的商数计算关键点的最小值,以两个百分数计算。
正确匹配的百分比?- 分配正确匹配的商数以百分比计总匹配数。
匹配比例?-匹配百分比*正确匹配百分比。
在所有图表中,我将使用Y轴的“匹配比率”(百分比)值。
========================分割线==============================运行所有测试后,我们收集每个转换和算法的统计信息。
特定转换算法的报表如下所示:Argument SURF-BRISK-BF SURF-FREAK-BF SURF-SURF-BF1 100 88.5965 82.67522 100 86.9608 79.16893 100 85.6069 70.67314 100 85.0897 64.90575 100 83.1528 59.47766 100 85.1648 58.97637 100 88.6447 59.30668 100 94.9109 64.80199 100 95.9707 69.1154为了制作图表,我使用Google Spreadsheets导入CSV表格并生成图表。
您可以在这里找到这个电子表格:?OpenCV2.4.9功能比较报告。
========================分割线=======================================================分割线==============================说明:原博文打开慢,请耐心等待,可能话需要翻墙。
===========================END========================== ==δmax=9.75δ,δmin=13.67δ,其中δ为特征点的尺度。