打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
毕业设计-基于机器视觉的双目立体视觉系统定标与三维重构技术研究- OpenCV

目录

前言

课题背景和意义

实现技术思路

一、图像三维重构体系结构及关键技术分析

 二、特征提取与立体匹配

三、基于OpenCV的立体匹配及三维重建

​编辑​编辑

 代码部分

实现效果图样例

最后


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯基于机器视觉的双目立体视觉系统定标与三维重构技术研究- OpenCV 

课题背景和意义

人类对其周边环境信息的判断主要依靠视觉,通过人眼与大脑的协调工作,人类实现了对环境信息的识别和判断。计算机视觉是机器设备对生物视觉系统的模仿,其工作目的是将机器视觉中的图片和视频等信息恢复为三维场景信息,并由此重建和识别物体"。从尽可能多的实现仿生和实用的观点来看,双目视觉最能够实现机器视觉向人类视觉的仿生。我们身处于一个具有三维立体结构的世界中,视觉功能可以帮助我们对周边环境中所有物体的三维结构加以辨识,然而大多数的摄像机其获取的仅仅只是物体的表象信息。计算机视觉的主旨工作就是对终像、视频等二维信息进行分析和理解,从而使机器能够像人类一样可以识别三维结构的物体。计算机识别三维结构物体的关键问题就是终像的三维重建,而研究如何能够恢复一维表象信息的三维场景坐标便是实现三维重建的重中之重。纵观该领域的研究现状,人们已经提出如结构光视觉、光度立体视觉以及双目视觉等多种三维重建方法。然而众多重建算法中,人们发现双目视觉更接近人类视觉的工作模式,它可以在多种情境下获取景物的深度信息,与其他机器视觉方法相比其优点是显而易见的。所谓双目立体视觉就是利用摄像机从不同位置采集同一场景的双目图像,通过三维重构过程,还原物体的三维信息,从而使人感到真实三维场景的立体感。

实现技术思路

一、图像三体系术分析

双目图像的采集方法是利用两台摄像机从两个视点观察同一物体,通常两台摄像机的摆放位置是左右平行对齐的,也可以是上下竖直对齐的,采集同一场量在不同的观察视角下的图像,然后利用三角测量的方法,将双目图像中物体表象信息的匹配点对的视差转换为深度信息进行表达。该过程模拟的是人类视觉对空间物体的理解过程,因而比较,直观和易于理解。利用双目视觉系统实现图像信息三维重构的流程如图:

键技难点
1)摄像 标定
技 术 类:传统 像机标 方法 像机 方法。
  2)立体匹  
觉系统 节 ,特征 点匹 寻找到匹 配 系。

 二、特征提取与立体匹配

特征提取
作为三维重构中的核心环节,特征提取的结果直接与场景重构的精确度息息相关。

1)边缘检测

图像边缘是图像极其重要的特征之一。由干图像的边缘是图像特征中极其具有代表性和重
要意义的一部分信息,相对于整个图像冗杂的信息来说,图像的边缘用极少的数据量反映出极其重要的图像信息,这些正符合特征提取对选取特征提取对象的要求。从提取精度的要求上来说,

通常在对数字图像进行处理时,会将一阶微分用一阶差分形式进行替换:

 通常使用二者的绝对值之和来近似的表示求解梯度时的平方和和开方计算;

 Sobel梯度算子首先做成加权平均,其次进行微分,最后求梯度,即:

Sobel算子完成与图像中每一个像素点的卷积运算的途径是在图像中移动两个3x3的卷积核,因此实现该算法的核心是这两个3x3的卷积核。

 cvSobel函数只适用对单通道图像的变换,如果需要对彩色图像进行evSobel处理,则可以RGB通道的图像分别进行cvSobe1处理,而后转化为彩色图像。下图中,(a)为lena的彩色图像,终b)是该图的灰度图像,图(c)为图(b)经过Sobel算子处理后的效果图。

①Laplace算子
Laplace算子是一个能够进行各项同性运算的二阶微分标量算子,它的一个重要的性质就是具有各向同性。定义一个具有连续区域的图像函数 f(x.v)的边缘拉普拉斯算子如式所示:

 LOG边缘检测方法是为了针对解决在具有明显噪声的图像中Laplace算子的实现,该检测算法通过用Laplace算子对经过高斯处理后的图像进行运算来实现。图(a)所示是原始图像的灰度图,图4(b)是经过Laplace算子处理后的结果图。

②Canny算子
Canny算子进行边缘检测基本原理:第一步对图像进行高斯平滑处理,然后利用一阶偏导的有限差分对梯度的幅值及方向进行计算,下一步对梯度的幅值进行非极大值抑制操作,最后用双阈值算法对边缘进行检测与连接。

 2)角点检测方法

任何一个物体都具有许多特征,其中比较明显的特征有对比度、交汇特征、方向等,物体的诸多可用信息都可以经由它们来提取。

Harris 角点检测方法是用使一个高斯窗或者矩形窗在图像上进行移动,由模板窗口获得原始图像衍生出2x2的局部结构 M 矩阵,如下式所示:

为了能够更好地检测到物体的基本特征,也可以使用圆形的标记点,而提取的主要目标就是圆的圆心。Hough变换就是常见的以圆形作为特征标记点的检测方法。

 3)特征提取效果对比分析

使用Canny边缘检测算子和Harris及SUSAN角检测算子对课题实现过程中使用的图像进行特征提取,以选取最合适的检测算子进行特征提取。三种算子特征提取到的结果分别如图所示:

Har s 算子 特征:

 采用 特征:

 Ca特征:

立体匹配

立体匹配是三维重构中极其重要同时也是实现难度最大的一步,当其他的因素已经确定的前提下,实现三维重构的重构精度及效果与立体几配的结果是息息相关的。

1)基于区域的立体匹配算法

基干区域相关匹配的核心思想是:把待匹配图像中的一点作为基准点构建出一个窗口窗口的模板为基准点的邻域灰度值,当另一幅图像中有一点与其具有相同或者相近的灰度值分布则二者构成一个匹配点对。

2)基于特征的立体匹配算法

该算法的设计思想是:对能够反映景物固有信息的特征点(角点、边缘、轮廓点等)进行针对性的匹配,由于基于特征的匹配算法更关注的是物体的本质结松信息,所以可以较好的对误匹配的问题进行克服。

3)基于相位 配算

与之前所述的匹配方法相比,基于相位的匹配算法其选取的匹配基元本身就是信号固有的结
构信息,因而其低通特性对图像的高频噪声有极大的抑制作用。除此之外,该算法还具有视差精度较高、稳定性好、可以并行计算等优点。

基于特征的立体匹配算法

与基于区域的匹配算法不同,该算法的设计思想是:对能够反映景物固有信息的特征点(角点、边缘、轮廓点等)进行针对性的匹配,由于基于特征的匹配算法更关注的是物体的本质结松信息,所以可以较好的对误匹配的问题进行克服。该方法评判是否匹配的主要依据是通过对特征

三、基于OpenCV的立体匹配及三维重建

基于OpenCV的特征点匹配原理

特征点优配是双目视觉系统的核心环节同时也是需要重点进行研究的领域,该阶段是为了在
双目图像中尽最大可能寻找匹配点对。

1)特征点匹配简介

为了有效地实现特征匹配,学者们阐述了多种多样的匹配算法,然而纵观这些匹配算法,主要可以分为两种,即稀疏点几配和密集点匹配。

 2)基于窗口的灰度匹配原则

由于一幅场景是由材质各异的物体综合构成的,因此整个场景对光的反射特性也相对复杂,定义纯漫反射表面为在光线下灰度值均为一致的表面,该表面也称作Lamberl表面:还有的物体能够实现对光源的镜面反射,将这一类表面定义为镜面表面;然而客观世界中的物体表面是以上两种表面特性的综合体。

向量v与v的夹角大小是判断匹配度的度量标注,p和p的匹配度越高,夹角就越小,相反亦然。也可以用两个向量的夹角进行计算:

 其中,θ为两向量的夹角。当cos0=1时,向量v与v的匹配最佳,反之,若cos0=0则向量v与v,匹配最差,如图:

 3)基于窗口的稀疏点匹配

基于稀疏点的匹配选取能够明显反映图像本质属性的特征点作为匹配对象,特征点的数量越多,匹配的结果就越可靠其精度也就越高,因此可靠地特征点的数量对匹配效果具有决定作用。匹配效果是通过视差图来体现的。视差图为单通道灰度图,首先初始化图像上的所有像素为黑色,即将其灰度值设定为0,下一步,将左视图作为基准图像,p=(xy1)为左视图中的已匹配点,其视差为d。d 是左视图内全部匹配点的最大视差,d 是左视图内全部匹配点的最小视差。那么视差图内的对应点,即p=(x y1)的灰度值为:

 4)基于窗口的密集点匹配

为了缩短匹配耗时,需要在对图像进行密集点匹配之前,对图像进行一定的预处理。

基于OpenCV的双目图像三维信息重构

1)重构系统简述

假定空间任意点P的世界坐标为:(XY,Z),点P在两幅图像上的像点分别为P和P,P和 P在像素坐标系中的坐标分别为:(u,v)和(uv),由相机的成像模型可以得到:

将式联立组成方程组,消去z和z,可以求得空间点P的坐标(XY.Z),从而确定空间点的位置,就可由空间点的几何关系获取物体的三维信息,重建三维场景。  

2)重构效果和分析

为实现对双目图像的三维信息重构,需要先对双目摄像机进行标定,以获取其内部参数及畸变系数。基于CVUT的摄像机标定方法,标定结果如表所示,由标定结果可以看出由于选用同一型号的摄像机,双目摄像机参数虽有差异但差别不大基本可以满足视觉系统进一步研究的需要。

在使用cvCanny函数对轮廓进行提取时,需要进行多次试验以确定参数中需要输入的阈值,从而达到最好的效果。在得到轮廓图后,为达到更好的效果,还要对图像进行一定的预处理(膨胀后进行腐蚀),方能得到图所示的轮廓效果图。 

 经多次试验验证,设置canny算子的第一阈值为16,第二阈值为26,Sobe1算子内核为3。从下图可以看出,尽管检测的轮廓图边缘还存在一些噪声信息。

函数cvcanny采用Canny算法将图像的边缘选取为特征进行特征提取。函数中的threshold1和threshold2两个参数中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。

 

 函数cvDilate对输入图像使用指定的结构元素进行膨胀,膨胀可以重复进行。函数cvErode对输入图像使用指定的结构元素进行腐蚀,腐蚀也可以重复进行。

 从下图得到的轮廓深度图可以看出,该系统可以比较好的恢复二维图像的深度信息,

 图所得到的三角剖分效果图可以看出,剖分显示部分的效果比较完整,实验验证了该系统可以有效实现对双目图像三维信息的重构。

 代码部分

重构部分代码:

  1. pls = [np.array(i) for i in cal_data.imgpoints_l]
  2. prs = [np.array(i) for i in cal_data.imgpoints_r]

  3. # 取一对图像的二维坐标点
  4. ptl, ptr = pls[0], prs[0]
  5. P1 = rectify_model.get('P1')
  6. P2 = rectify_model.get('P2')

  7. points = cv2.triangulatePoints(P1,P2,ptl,ptr)
  8. coodinates_x = points[0] / points[-1]
  9. coodinates_y = points[1] / points[-1]
  10. coodinates_z = points[2] / points[-1]

  11. # 转换成三维坐标的形式,直接reshape结果不对
  12. coodinates = np.array([[i,j,k] for i,j,k in zip(coodinates_x, coodinates_y, coodinates_z)])

  13. fig = plt.figure(figsize=(12,12))
  14. ax = fig.add_subplot(111, projection='3d')

  15. plt.cla()
  16. coodinates_x, coodinates_y, coodinates_z
  17. ax.scatter(coodinates[:, 0], coodinates[:, 1], coodinates[:, 2], color='red')
  18. plt.draw()
  19. plt.show()

实现效果图样例

 双目立体视觉:

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
双目视觉测量中点特征提取及匹配算法评估
《HALCON机器视觉与算法原理编程实践》第13章 相机标定与三维重建
AGV机器人(1)基于视觉避障的理论基础
SIFT算法详解
真的,关于深度学习与计算机视觉,看这一篇就够了 | 硬创公开课
焊接机器人轨迹跟踪研究现状
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服