1、基于边缘与角点检测的基于边缘与角点检测的图像匹配图像匹配人工智能开源硬件与人工智能开源硬件与python编程实践编程实践情境导入n无人机航拍得到的图像,往往需要进行图像比对、拼接、整合等图像配准工作;n图像配准技术的流程是:首先对两幅图像进行特征提取得到特征点,再通过进行相似性度量找到匹配的特征点对,然后通过匹配的特征点对得到图像空间坐标变换参数;n特征提取是配准技术中的关键,寻找准确性高的特征提取方法将为特征匹配的成功提供保障。任务与目标n了解图像特征检测与配准技术的基本原理、相关算法和应用框架;n掌握运用人工智能开源硬件设计智能应用系统的方法,掌握Python语言的编程方法;n应用人工智能
2、开源硬件和Python相关算法模块设计图像匹配功能;n针对生活应用场景,进一步开展创意设计,设计具有实用价值的图像匹配应用系统。知识拓展:图像特征匹配技术 n图像特征匹配技术包括特征检测、特征描述和特征匹配等方面;n特征检测过程主要是利用各种特征检测子提取出图像中比较明显的形状特征、纹理特征等;n特征描述则是确定表征图像特征信息的向量,也就是将从图像区域提取的特征信息,按照一定的计算、存储规则转换为特征描述子信息结构。n不同图像中的多个特征有着一定的关联,通过欧氏距离或者汉明距离进行特征匹配。知识拓展:图像特征提取 n图像特征包括颜色特征、纹理特征、形状特征以及局部特征点等;n斑点通常是指与周
3、围有着颜色和灰度差别的区域;n角点则是图像中一边物体的拐角或者线条之间的交叉部分;n特征检测过程常常利用各种特征检测子提取出图像中比较明显的形状特征、纹理特征等。知识拓展:角点检测过程 n提取检测子。在两张待匹配的图像中寻找那些最容易识别的像素点(角点),比如纹理丰富的物体边缘点等;n提取描述子。对于检测出的角点,用一些数学上的特征对其进行描述,如梯度直方图,局部随机二值特征等;n匹配。通过各个角点的描述子来判断它们在两张图像中的对应关系。常用方法如 flann;n去外点。去除错误匹配的外点,保留正确的内点。常用方法有Ransac,GTM。知识拓展:图像匹配基本方法 n不同图像的各个特征可能存
4、在着关联,通过欧氏距离或者汉明距离测度可以来比较这些特征,进而匹配这些特征;n高维度的图像特征一般通过欧氏距离作为评判参数;n二进制特征由于其结构简洁,一般都是使用汉明距离进行评判。知识拓展:欧氏距离 n指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离);nn维空间的欧氏距离计算公式是:知识拓展:汉明距离 n汉明距离表示两个(相同长度)字对应位不同的数量,以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。n汉明距在图像处理领域也有这广泛的应用,是比较二进制图像非常有效的手段。n汉明距离的本质是两个数异
5、或后字符1的个数,可以直接使用异或实现:def hammingDistance(self,x:int,y:int)-int:return bin(xy).count(1)设计与实践n特征提取的实现 n图像匹配的实现nPython综合编程n调试、验证及完善特征提取的实现(1)nimage.find_keypoints()方法,可以从ROI元组(x,y,w,h)中提取ORB键点;n可以使用image.match_descriptor函数来比较两组关键点,以获取匹配区域;nthreshold是控制提取的数量的参数(取值0-255)。对于默认的AGAST角点检测器,该值应在20左右。对于FAST角点检
6、测器,该值约为60-80。阈值越低,提取的角点会越多。特征提取的实现(2)nscale_factor参数介于1.35-1.5之间。较高的比例因子会使运行更快,但图像匹配相应较差。ncorner_detector 是从图像中提取特征点所使用的角点检测器算法,可以是image.CORNER_FAST 或 image.CORNER_AGAST。n设置好图形匹配应用的摄像头视频采集工作参数,即可在指定的图像区域内启动图像特征提取过程,Python编程方法如下:img.find_keypoints(max_keypoints=150,threshold=10,normalized=True)图像匹配的实
7、现 nimage.match_descriptor()方法,用于相似度的度量。这个测度值越接近0,LBPF特征点匹配得就越好。对于ORB描述符来说,函数返回的是kptmatch对象。nthreshold 是用来为ORB键点过滤不明确匹配服务的。filter_outliers是用来为ORB特征点过滤异常值服务的。特征提取模块#第一次找当前图像中心区域的特征点kpts1=img.find_keypoints(max_keypoints=150,threshold=10,scale_factor=1.25)draw_keypoints(img,kpts1)#color=(255,0,0)img.dr
8、aw_string(0,0,FPS:%.2f%(clock.fps()特征匹配模块 kpts2=img.find_keypoints(max_keypoints=150,threshold=10,normalized=True)if(kpts2):match=image.match_descriptor(kpts1,kpts2,threshold=100)#85 if(match.count()15):#10S led.red.on()led.green.on()led.blue.on()img.draw_rectangle(match.rect(),threshold=90)img.draw
9、_cross(match.cx(),match.cy(),size=10)print(kpts2,matched:%d dt:%d%(match.count(),match.theta()实验过程及程序运行结果 实验中用到的两支笔实验中用到的两支笔 对黑笔提取特征的情况对黑笔提取特征的情况图像匹配结果图像匹配结果分析与思考n比较欧氏距离与汉明距离的异同。自行编写一个Python函数,实现对二进制图像特征的匹配。n项目5中介绍了利用阈值编辑工具自行设置颜色模型参数的方法,可否利用本项目提取物体特征参数的方法,将某种物体的特征参数保存成特征模板文件,方便后续应用的使用?。n针对某种应用场景,例如,文具盒里的铅笔、橡皮、圆规、尺子等,可否利用事先存储的各种文具的特征模板,能够实时发现出现在视频场景中的多种文具?nfind_keypoints方法默认的是启用AGAST角点检测,请选用FAST角点检测方式,观察程序运行速度以及匹配准确度方面有何不同?