计算机基础项目实战5_第1页
计算机基础项目实战5_第2页
计算机基础项目实战5_第3页
计算机基础项目实战5_第4页
计算机基础项目实战5_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机视觉项目开发实战

(微课版)项目五图像检索—特征提取与相似度匹配思维导图学习目标概览能够实现基础Harris角点检测、优化版Harris角点检测以及Shi-Tomasi角点检测算法知识目标学习目标素养目标技能目标培养安全意识与伦理素养培养文化传承与保护意识培养创新应用思维能够熟练应用FAST、SIFT、ORB等特征检测算法对图像进行特征提取能够使用暴力匹配器和FLANN匹配器实现特征点的匹配理解Harris角点检测、Shi-Tomasi角点检测的基本原理及其在图像处理中的应用,了解如何通过优化Harris角点检测算法来提高角点检测的准确性和效率掌握FAST、SIFT、ORB、LBP等特征检测算法的基本原理、特点及适用场景理解暴力匹配器和FLANN匹配器的工作原理,能够根据实际需求选择合适的匹配方法目录项目导入知识准备项目拓展项目实施项目巩固5.1角点检测5.2特征检测5.3特征匹配PART01项目导入项目导入在数字时代,图像不仅是信息的载体,更是文化传承与产业创新的核心资产。商汤的“书生”、百度的文心大模型、华为的盘古视觉模型等,正在重新定义视觉特征的提取方式。掌握Harris角点检测、SIFT特征检测等经典算法,理解其在工业系统中的基石作用;积极拥抱基于深度学习的特征学习新范式,认识国产核心技术的突破。把握技术演进与时代使命的交汇点,书写服务国家战略的深刻自觉PART02知识准备知识准备—角点检测角点检测是计算机视觉中的一种基础技术,专门用于识别图像中那些方向变化显著的特殊位置点。从视觉特征来看,角点代表了图像中最具辨识度的结构信息,比如建筑物的拐角、门窗的边角、物体的轮廓转折点等。角点检测的基本原理是基于图像灰度值的变化进行分析。在平坦的图像区域,任何方向的移动都不会引起灰度值的显著变化;在边缘区域,沿着水平边缘移动,灰度值变化很小,而沿着垂直边缘移动,灰度值变化很大;在角点区域,任何方向的移动都会导致灰度值剧烈变化。在计算机视觉领域,角点检测是目标匹配、图像拼接、三维重建、运动跟踪等高级任务的基础。知识准备—角点检测5.1.1Harris角点检测Harris角点检测是最著名、最经典的角点检测算法之一。它的核心思想是分析图像中一个小的局部窗口在各个方向上移动时,其内部像素灰度值的变化程度,通过数学方法量化这种“灰度值变化”,从而找出那些在任何方向上移动窗口都会导致巨大变化的点,也就是角点。可以通过数学推导过程来理解该算法。①将彩色图像转为灰度图像,减少计算量。②用Sobel或Scharr等算子计算每个像素在x轴方向和y轴方向的灰度梯度Ix和Iy。③对梯度Ix和Iy进行高斯加权,得到局部区域的协方差矩阵M。④计算角点响应值。⑤根据响应值R判断角点:在实际应用中,设定一个阈值,当R大于该阈值时认为该点是角点。知识准备—角点检测5.1.1Harris角点检测OpenCV提供cv2.cornerHarris()函数检测角点。其语法格式如下:其中各参数含义如下。src:输入图像,必须是8位或浮点型单通道图像。blockSize:邻域大小。ksize:Sobel算子的孔径参数,即卷积核大小。k:Harris检测器的自由参数,经验值在0.04~0.06之间。borderType:边界类型,像素外推方法,不支持BORDER_WRAP。dst:返回值。用于存储Harris检测器响应值的图像,其类型为CV_32FC1,且尺寸与输入图像相同。dst=cv2.cornerHarris(src,blockSize,ksize,k[,dst[,borderType]])知识准备—角点检测5.1.1Harris角点检测—案例

【例5-1】对图像进行Harris角点检测并标记。根据题目要求,编写代码如下:源代码地址文件

ex5-1.py见教材配套代码,路径如下:src/proj05/ex5-1.py知识准备—角点检测5.1.1Harris角点检测—案例

【例5-1】对图像进行Harris角点检测并标记。运行上述代码,结果如图5-1所示。图5-1例5-1代码运行结果知识准备—角点检测5.1.2优化Harris角点检测—案例基础Harris角点检测算法虽然经典,但在某些情况下存在对阈值敏感、边缘响应较强时会导致误检、角点聚集、定位精度有限等问题。

【例5-2】针对基础Harris角点检测算法的缺陷进行改进,并对比优化前后的效果。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-2.py见教材配套代码,路径如下:src/proj05/ex5-2.py知识准备—角点检测5.1.2优化Harris角点检测—案例基础Harris角点检测算法虽然经典,但在某些情况下存在对阈值敏感、边缘响应较强时会导致误检、角点聚集、定位精度有限等问题。

【例5-2】针对基础Harris角点检测算法的缺陷进行改进,并对比优化前后的效果。运行本例的代码,优化前后的结果如图5-2所示。图5-2例5-2代码运行结果知识准备—角点检测5.1.2优化Harris角点检测对基础Harris角点检测算法的主要优化点说明如下。梯度计算精度:使用Scharr算子提高梯度估计准确度。矩阵计算控制:显式计算结构张量,便于精细控制。平滑策略改进:高斯滤波替代简单平均,减少噪声影响。角点筛选机制:引入局部非极大值抑制,避免角点聚集。知识准备—角点检测5.1.3Shi-Tomasi角点检测Shi-Tomasi角点检测(也称为GoodFeaturestoTrack)是Harris角点检测的优化算法。它主要解决了Harris角点检测算法对阈值敏感、需要手动调整参数的问题。该算法修改了角点响应函数的取值:R=min(λ1,λ2),对应角点判断准则如下。如果min(λ1,λ2)大于阈值,该点是角点。如果min(λ1,λ2)小于等于阈值,该点不是角点。知识准备—角点检测5.1.3Shi-Tomasi角点检测在OpenCV中,Shi-Tomasi角点检测通过cv2.goodFeaturesToTrack()函数实现。其语法格式如下:其中各参数含义如下。image:输入图像,支持8位或32位浮点型单通道图像。maxCorners:返回的最大角点数量。qualityLevel:角点的质量阈值,通常取0.01~0.1。minDistance:返回角点之间的最小欧几里得距离。mask:用于指定感兴趣区域,可选项。blockSize:计算协方差矩阵的窗口大小,通常取3、5、7等奇数值。useHarrisDetector:是否使用Harris角点检测算法。默认值为False。k:Harris角点检测算法中的参数,仅当useHarrisDetector为True时有效。corners:返回值,输出格式为浮点型的坐标点向量。corners=cv2.goodFeaturesToTrack(image,maxCorners,qualityLevel,minDistance[,corners[,mask[,blockSize[,useHarrisDetector[,k]]]]])知识准备—角点检测5.1.3Shi-Tomasi角点检测—案例

【例5-3】使用Shi-Tomasi角点检测算法对图像进行角点检测并标记。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-3.py见教材配套代码,路径如下:src/proj05/ex5-3.py知识准备—角点检测5.1.3Shi-Tomasi角点检测—案例

【例5-3】使用Shi-Tomasi角点检测算法对图像进行角点检测并标记。运行本例的代码,结果如图5-3所示。图5-3例5-3代码运行结果知识准备—特征检测5.2.1FAST特征检测FAST(FeaturesfromAcceleratedSegmentTest)是一种基于机器学习的高速角点检测算法。FAST的核心是通过“像素灰度值差异测试”快速判断一个点是否为角点,只负责“检测”特征点,而不生成描述子。步骤如下。①候选点选择:遍历图像中的每个像素p,以p为中心,取半径为3的圆形区域。②灰度值差异判断:设I(p)为候选点p的灰度值,定义阈值t,通常取I(p)的10%~30%。若16个邻域像素中,至少有N个连续像素满足以下条件之一,则p是角点。

,说明像素比候选点暗很多。

,说明像素比候选点亮很多。③非极大值抑制:为避免角点聚集,对检测到的候选点进行非极大值抑制。知识准备—特征检测5.2.1FAST特征检测在OpenCV中,可通过cv2.FastFeatureDetector_create()函数创建FAST检测器对象。其语法格式如下:其中各参数含义如下。threshold:中心像素与邻域像素的强度差异阈值。默认值为10,值越小检测到的角点越多,但可能包含噪声。nonmaxSuppression:是否启用非极大值抑制,默认值为True。type:FAST检测版本。默认值为cv2.FAST_FEATURE_DETECTOR_TYPE_9_16,即连续9个点满足条件。retval=cv2.FastFeatureDetector_create([,threshold[,nonmaxSuppression[,type]]])知识准备—特征检测5.2.1FAST特征检测—案例

【例5-4】使用cv2.FastFeatureDetector_create()函数创建对象fast,配合调用fast.detect()和cv2.drawKeypoints()函数在图像中检测特征点并标记。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-4.py见教材配套代码,路径如下:src/proj05/ex5-4.py知识准备—特征检测5.2.1FAST特征检测—案例

【例5-4】使用cv2.FastFeatureDetector_create()函数创建对象fast,配合调用fast.detect()和cv2.drawKeypoints()函数在图像中检测特征点并标记。运行本例的代码,结果如图5-4所示。图5-4例5-4代码运行结果知识准备—特征检测5.2.2SIFT特征检测SIFT(Scale-InvariantFeatureTransform)由戴维·洛(DavidLowe)于1999年提出,是具有尺度不变性、旋转不变性、光照鲁棒性的全局特征检测算法。SIFT的核心是在多尺度空间中寻找“稳定的关键点”,并生成具有辨识度的描述子,步骤如下。①尺度空间构建。②关键点检测。③方向赋值。④描述子生成。知识准备—特征检测5.2.2SIFT特征检测在OpenCV中,通过cv2.SIFT_create()函数创建SIFT检测器对象。其语法格式如下:其中各参数含义如下。nfeatures:要保留的最佳特征点数量。默认值为0,建议值为500~5000。nOctaveLayers:金字塔的层数,影响尺度空间的精细程度。默认值为3。contrastThreshold:对比度阈值,用于过滤低对比度的特征点。默认值为0.04,建议值为0.02~0.06。edgeThreshold:边缘阈值,用于过滤边缘响应点。默认值为10。sigma:高斯模糊的初始标准差,影响金字塔底层的图像模糊程度。默认值为1.6。enable_precise_upscale:是否在尺度金字塔中启用精确上采样,有助于防止定位偏差,默认值为False。retval=cv2.SIFT_create([,nfeatures[,nOctaveLayers[,contrastThreshold[,edgeThreshold[,sigma[,enable_precise_upscale]]]]]])知识准备—特征检测5.2.2SIFT特征检测—案例

【例5-5】使用cv2.SIFT_create()函数创建对象sift,配合调用sift.detectAndCompute()和cv2.drawKeypoints()函数在图像中检测特征点、描述子并标记。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-5.py见教材配套代码,路径如下:src/proj05/ex5-5.py知识准备—特征检测5.2.2SIFT特征检测—案例

【例5-5】使用cv2.SIFT_create()函数创建对象sift,配合调用sift.detectAndCompute()和cv2.drawKeypoints()函数在图像中检测特征点、描述子并标记。运行本例的代码,结果如图5-5所示。图5-5例5-5代码运行结果知识准备—特征检测5.2.3ORB特征检测ORB(OrientedFASTandRotatedBRIEF)在2011年提出,综合了FAST特征检测和BRIEF描述子的优点,优化了旋转不变性和尺度不变性,速度快、鲁棒性强、无专利限制,适用于SLAM、实时目标跟踪、AR/VR特征匹配、移动端视觉应用等场景。ORB的核心是“高效检测+鲁棒描述”,步骤如下。①关键点检测(改进的FAST)。②描述子生成(改进的BRIEF):BRIEF是一种二进制描述子,原BRIEF无旋转不变性,ORB对其做了以下两点改进。③匹配优化:采用汉明距离(HammingDistance)计算描述子相似度,即二进制描述子的异或运算,速度极快。知识准备—特征检测5.2.3ORB特征检测在OpenCV中,cv2.ORB_create()函数创建ORB检测器对象。其语法格式如下:其中各参数含义如下。nfeatures:要保留的最佳特征点数量。默认值为0,建议值为500~5000。scaleFactor:金字塔缩放比例因子。默认值为1.2。典型值为1.1~1.5。nlevels:金字塔层级数。默认值为8。典型值为3~10。edgeThreshold:边缘阈值。默认值为31。firstLevel:金字塔的初始层索引。默认值为0。WTA_K:生成BRIEF描述子时使用的“赢家通吃”(Winner-Takes-All)策略中的点对数量。默认值为2。scoreType:关键点评分类型。默认值为HARRIS_SCORE。patchSize:用于计算描述子的邻域大小。默认值为31,应为奇数。fastThreshold:FAST特征检测的阈值。默认值为20。retval=cv2.ORB_create([,nfeatures[,scaleFactor[,nlevels[,edgeThreshold[,firstLevel[,WTA_K[,scoreType[,patchSize[,fastThreshold]]]]]]]]])知识准备—特征检测5.2.3ORB特征检测—案例

【例5-6】使用cv2.ORB_create()函数创建对象orb,配合调用orb.detectAndCompute()和cv2.drawKeypoints()函数在图像中检测关键点、描述子并标记。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-6.py见教材配套代码,路径如下:src/proj05/ex5-6.py知识准备—特征检测5.2.3ORB特征检测—案例

【例5-6】使用cv2.ORB_create()函数创建对象orb,配合调用orb.detectAndCompute()和cv2.drawKeypoints()函数在图像中检测关键点、描述子并标记。运行本例的代码,结果如图5-6所示。图5-6例5-6代码运行结果知识准备—特征检测5.2.4LBP特征检测LBP(LocalBinaryPatterns)是一种有效的局部二值纹理特征描述子,计算简单、对光线变化敏感,具有鲁棒性,适合人脸识别、纹理分类、表面缺陷检测和医学影像分析等场景。LBP的核心是将每个像素的“局部邻域灰度分布”编码为二进制特征,步骤如下。①局部邻域定义。②二进制编码。若,编码为1;若,编码为0;③纹理特征提取。OpenCV中并没有直接提供类似于cv2.SIFT_create()函数的LBP检测器,需通过编程实现基础的LBP算法来理解其工作原理。知识准备—特征检测5.2.4LBP特征检测—案例

【例5-7】实现LBP特征检测基础算法。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-7.py见教材配套代码,路径如下:src/proj05/ex5-7.py知识准备—特征检测5.2.4LBP特征检测—案例

【例5-7】实现LBP特征检测基础算法。运行本例的代码,结果如图5-7所示。图5-7例5-7代码运行结果知识准备—特征检测5.2.4LBP特征检测文中提到的各特征检测算法的特性对比如表5-1所示。知识准备—特征匹配特征匹配是计算机视觉中的一个核心任务,它的目标是在两幅或多幅图像中找到对应的特征点。这个过程通常分为以下两步。①特征提取。②特征匹配。关于描述子,通常是一个向量或一个二进制字符串。匹配的本质就是计算两个描述子之间的“距离”或“相似度”。距离越小,表示两个特征点越相似,越有可能是同一个场景点在不同图像中的投影。常用的距离度量方法包括以下两种。欧氏距离:适用于浮点型描述子(如SIFT、SURF)。汉明距离:适用于二进制描述子(如ORB、BRIEF)。它计算的是两个二进制字符串中不同位的数量。知识准备—特征匹配5.3.1暴力匹配器暴力匹配器是一种既简洁直观又性能稳定的特征匹配算法。在OpenCV中,暴力匹配器由cv2.BFMatcher类实现。其语法格式如下:其中各参数含义如下。normType:指定距离度量方法。常用值如下。cv2.NORM_L2:欧氏距离,适用于SIFT、SURF等浮点型描述子,为默认值。cv2.NORM_L1:曼哈顿距离。cv2.NORM_HAMMING:汉明距离,适用于二进制描述子,如ORB、BRIEF。cv2.NORM_HAMMING2:改进的汉明距离,适用于ORB中WTA_K取3或4的情况。crossCheck:布尔型参数,控制是否启用交叉检查。默认值为False。<BFMatcherobject>=cv2.BFMatcher([,normType[,crossCheck]])知识准备—特征匹配5.3.1暴力匹配器该类提供以下两种常用的匹配方法。1.一对一匹配:match()其中各参数含义如下。queryDescriptors:查询图像(第一幅图像)的描述子。trainDescriptors:训练图像(第二幅图像)的描述子。mask:指定允许匹配的特征点对,为可选项。match(queryDescriptors,trainDescriptors,mask=None)知识准备—特征匹配5.3.1暴力匹配器该类提供以下两种常用的匹配方法。2.k近邻匹配:knnMatch()其中,k为每个查询点返回的最佳匹配结果数量。返回一个列表,其中每个元素都是一个包含k个DMatch对象的列表。通常结合Lowe'sRatioTest(Lowe比率测试)来过滤错误匹配结果,效果极佳。knnMatch(queryDescriptors,trainDescriptors,k,mask=None)知识准备—特征匹配5.3.2FLANN匹配器FLANN(FastLibraryforApproximateNearestNeighbors)匹配器是一种基于近似最近邻搜索的高效匹配算法。其核心流程分为以下两步。①构建索引:在匹配前,对训练图像的所有描述子进行预处理,构建一个专用的索引数据结构。该结构能够帮助算法在搜索时快速排除大量不相关的候选点。②近似搜索:对于每个查询描述子,算法利用已构建的索引快速找到一个或多个近似最近邻,而非精确计算所有距离,从而在保证较高准确率的同时显著提升匹配效率。知识准备—特征匹配5.3.2FLANN匹配器在OpenCV中,FLANN匹配器由cv2.FlannBasedMatcher类实现。其语法格式如下:其中各参数含义如下。indexParams:字典类型,用于指定构建索引的算法和相关参数。常见配置如下。对于SIFT、SURF等浮点型描述子,通常使用KD-Tree索引对于ORB等二进制描述子,可使用局部敏感哈希(Locality-sensitiveHashing,LSH)索引:

searchParams:字典类型,用于控制搜索过程中的参数。默认值为空。常用设置如下。<FlannBasedMatcherobject>=cv.FlannBasedMatcher([,indexParams[,searchParams]])index_params=dict(algorithm=cv2.FLANN_INDEX_KDTREE,trees=5)index_params=dict(algorithm=cv2.FLANN_INDEX_LSH,table_number=6, #哈希表数量

key_size=12, #键大小

multi_probe_level=1 #多探针级别)search_params=dict(checks=50) #指定搜索时检查的节点数量知识准备—特征匹配5.3.2FLANN匹配器—案例

【例5-8】使用ORB检测器,分别用暴力匹配器和FLANN匹配器对两幅图像进行匹配,并展示结果。根据题目要求,编写程序的关键代码如下:源代码地址文件

ex5-8.py见教材配套代码,路径如下:src/proj05/ex5-8.py知识准备—特征匹配5.3.2FLANN匹配器—案例

【例5-8】使用ORB检测器,分别用暴力匹配器和FLANN匹配器对两幅图像进行匹配,并展示结果。运行本例的代码,输出如下结果;代码最终输出如图5-8所示。图5-8例5-8代码运行结果知识准备—特征匹配5.3.2FLANN匹配器在选择特征匹配器时,需根据具体应用场景进行权衡。暴力匹配器和FLANN匹配器的主要特性对比如表5-2所示。PART03项目实施项目实施项目任务给定一幅艺术画作,在画廊数据库中查找视觉风格与其最相似的画作。任务实现步骤1:初始化与参数设置首先创建ImageSimilarityFinder类作为整个图像检索系统的核心处理器,然后配置颜色特征权重为60%,纹理特征权重为40%,基于艺术画作的视觉特性赋予颜色特征更高的重要度,为后续的特征提取和相似度计算模块提供基础配置参数。关键代码如下:项目实施步骤2:图像预处理首先读取源图像文件,然后调整图像尺寸至统一规格以保证特征提取的一致性,最后将图像从BGR色彩空间转换到HSV色彩空间以便更好地分离色相、饱和度和亮度通道。关键代码如下:项目实施步骤3:特征提取首先在颜色特征提取中分别计算HSV图像的色相、饱和度和亮度3个通道的直方图分布并进行归一化处理,然后将其合并成一个综合的颜色特征向量;同时在纹理特征提取中先将源图像转换为灰度图像,接着通过遍历每个像素的8个邻域像素计算LBP编码以捕捉局部纹理模式,最后生成LBP直方图并归一化为纹理特征向量。关键代码如下:项目实施步骤4:相似度计算首先使用直方图交集方法计算两幅图像颜色特征的相似度,然后通过巴氏距离衡量纹理特征的差异并将其转换为相似度值,最后根据预设的权重比例对颜色和纹理相似度进行加权融合得出综合相似度评分。关键代码如下:项目实施步骤5:相似图像搜索首先对查询图像进行预处理并提取颜色和纹理特征作为匹配基准,然后遍历图库中的每幅图像并提取相同的特征集,接着逐一计算每幅图库图像与查询图像之间的综合相似度,最后将所有结果按相似度降序排列并返回前N个最相似的图像。关键代码如下:项目实施步骤6:结果可视化与保存首先创建多子图的复合可视化布局来展示查询图像、特征直方图以及最相似的图像,然后分别显示查询图像、HSV色彩空间的3个通道直方图和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论