平面的凹槽深度可以使用视觉检测技术进行测量。通常采用视频检测的方法,也就是对被测物体进行高速拍摄,然后利用计算机视觉技术对图像进行处理和分析,从而测量凹槽的深度。
具体实现过程如下:先安装合适的摄像头或显微镜,然后将被测物体放置在检测平台上,并保证相机与物体之间垂直、光线均匀。使用软件对所获取的图像进行图像增强、滤波、分割等处理,以减小背景干扰并识别出凹槽边缘位置。在确定凹槽边缘后,根据图像中的凹槽形状信息,可以计算得到凹槽的深度。
需要注意的是,在测量凹槽深度时,还应确定测量的参考基准,一般选取封底厚度作为参考基准,以消除测量误差。同时,还要根据检测精度及所需求精度,选择合适的设备和软件,优化其参数和配置,以获得更好的效果。
不难。双目成像技术是利用机器视觉,通过两个相机同时同步对进行采集,获取两相机对一幅图像的对应点成像的像素差获取深度信息,进而获取三维信息,来实现对物体的重建。该技术在现有阶段只能对短距离的物体进行测距与三维重建。难度较低。
Arnold 渲染Z通道AOV,可以自动计算出场景的距离信息并保存到图像的alpha信息中。
Shuffle节点提取图像的alpha通道转换成RGB信息(如果Z通道和color在一个exr里,提取depth通道)
Grade 降低gain的值,这时候图像的深度信息已经出来了,为了便于使用,再给连一个Invert反转节点
这样就可以按照传统Z通道的用法对图像进行修改了
如果只想用这个Z通道制作景深模糊这些,还有下边这种用法。
ShuffleCopy节点拷贝Z通道图像的alpha通道给color的depth通道(如如果Z通道和color在一个exr里,这一步可省略)
ZBlur节点调节focus plane焦点平面,depth of field景深以及模糊程度
上边的方法都是用arnold自带的AOV预设渲染Z通道,下边这个方法是传统的Z通道,也就是一张rgb数据类型的黑白图
下边是材质球的连接方法
新建层赋给物体,或者建一个AOV连上去,通过设定old mix 场景离摄像机最近距离,old max场景离摄像机最远距离,便可以渲出一张黑白信息的深度通道。
Arnold 默认AOV _Z
优点:自动测算场景距离,如果场景物体带有透明贴图,无需多设置自会计算透明
Z通道(有时候计算的不是很理想)
缺点:在nuke里使用方式多数人觉得不习惯,如转成传统使用方法,需要连接几个节点,还有就是无法在maya里预览,只能使用exr格式
材质球连接的Z通道
优点:和传统使用方法一样,无需熟悉,上手即用
缺点:需要根据场景大小自己去给数值,如果遇到场景中有带有透明贴图的物体,还需要再修改材质球的连接。
在机器人和计算机视觉领域,微软的游戏外设 Kinect 是非常流行的感知设备。它可以同时提供普通的 RGB 图像,红外图像、深度图像以及 RGB图像与深度图像的点集匹配 (point set registration 或者称为 point matching)。
Kinect 有两个比较常见的版本:
在本项目中我们选用 Kinect v2。
为了将 Kinect 的图像信息发布到 ROS 中,需要做两方面的工作
本文主要参考了下边的文章,并对其中的部分内容做了修改、更新
>
论文名:Graph Structure-Based Simultaneous Localization and Mapping Using a Hybrid Method of 2D Laser Scan and Monocular Camera Image in Environments with Laser Scan Ambiguity
定位是机器人导航的基本问题,允许机器人自主执行任务。然而,在具有激光扫描模糊的环境中,例如长走廊,利用激光扫描仪的传统SLAM(同时定位和映射)算法可能无法鲁棒地估计机器人姿态。为了解决这个问题,我们提出了一种基于混合方法的新型定位方法,该方法在基于图形结构的SLAM的框架中结合了2D激光扫描仪和单目相机。通过混合方法获取图像特征点的3D坐标, 假设墙壁垂直于地面并且垂直平坦。然而,这种假设可以减轻,因为随后的特征匹配过程拒绝倾斜或非平坦壁上的异常值。 通过利用混合方法生成的约束的图优化,估计最终的机器人姿势。为了验证所提方法的有效性,在具有长走廊的室内环境中进行了真实的实验。将实验结果与传统的GMapping方法进行了比较。结果表明,可以在具有激光扫描模糊性的环境中实时定位机器人,并且该方法的性能优于传统方法。
本文提出了一种基于图形结构(graph structure-based)的SLAM,它使用2D激光扫描仪和单目相机来解决上述问题。 从相机获取图像特征数据,并且从激光扫描仪获取深度信息。 通过使用融合所获得的传感器数据的图形结构来补偿每个传感器的缺点。这种融合激光扫描仪和相机的混合方法使我们能够在激光扫描模糊的环境中估计机器人姿态,其中仅使用激光扫描仪时位姿估计是困难的。这样的环境是长的走廊或非常大的空间,其中激光扫描仪只能检测周围的一侧,因为从机器人到墙壁的范围大于激光扫描仪的最大可检测范围。混合方法可以克服每个传感器的缺点。通过使用这些方法,可以在具有激光扫描模糊的环境中准确地估计机器人的位姿。
本文的其余部分安排如下。 第2节描述了室内机器人使用来自多传感器的基于图形结构的SLAM来最小化机器人姿态误差的整体方法。 为了验证所提方法的优越性,我们描述了实验环境和整个系统以及在第3节中使用我们的方法获得的实验结果。在第4节中,讨论了结论和未来的工作。
本节详细介绍了我们的方法。 首先,简要介绍了GMapping [4],基于网格的SLAM和Rao-Blackwellized粒子滤波器以及基于图形的SLAM的制定。 然后,我们详细解释如何融合从单目相机中提取的特征数据和来自激光扫描仪的深度数据,以进行机器人定位。 最后,我们描述了位姿图生成和优化的方法。
GMapping是使用Rao-Blackwellized粒子滤波器的基于网格的SLAM。通过在GMapping中使用自适应重新采样来解决粒子耗尽,即基于粒子滤波器的SLAM的长期问题。通过采用称为改进的提议分布的方法,GMapping降低了机器人姿势的不确定性。该方法基于最近的传感器测量产生提议分布,假设激光扫描比测距更准确。这是用于估计机器人姿势的概率方法,并且可以通过使用激光扫描仪的深度数据来估计机器人在2D平面上的姿势。当连续激光扫描可以匹配而没有模糊时,可以使用GMapping算法。但是,如果在具有激光扫描模糊的环境中利用GMapping算法,则可能发生机器人位姿错误。因此有必要应对这种情况,并在下一小节中描述用于多传感器融合的基于图形的SLAM。
在该子部分中,描述了用于融合相机的特征数据和激光扫描仪的深度信息的方法。 使用混合方法预测3D机器人姿势,并且该信息用作基于图形的SLAM的约束。 整体算法和概念分别如图1和图2所示。 在执行激光扫描仪和单目相机的混合方法之前,必须进行固有校准以确定相机的固有参数。 还需要知道相机和激光扫描仪之间的相对姿势,以融合来自它们的数据。 因此, 通过外部校准获得两个传感器之间的相对姿势信息。
在机器人上安装多传感器后,使用相应的传感器估算机器人的位姿,然后,混合算法融合各自的结果,如图4所示。使用协方差值和每个传感器的测量值用于生成图结构的约束。通过使用所生成的约束信息组织图形结构,通过图优化来获得最终校正的机器人姿势。测距仪生成测距信息,该信息用于生成位姿约束。 使用来自2D激光扫描仪的深度数据制作2D网格图。然后使用GMapping从2D网格图和ICP匹配生成2D机器人姿势约束[4]。在通过相机图像的SURF(加速鲁棒特征)[29]算法提取特征点之后,通过增加来自2D激光扫描仪的深度信息来获得每个特征点的3D坐标。然后从特征点的3D坐标生成3D机器人位姿约束。在前面的小节中详细描述了使用单目相机和激光扫描仪获得机器人姿势的混合方法。
前面讲到的都是基于知识的图像特征提取方法,除此之外还有另一条技术路线——基于深度学习的图像特征提取。
人在认知图像时是分层抽象的,首先理解的是颜色和亮度,然后是边缘、角点、直线等局部细节特征,接下来是纹理、几何形状等更复杂的信息和结构,最后形成整个物体的概念。
视觉神经科学(Visual Neuroscience)对于视觉机理的研究验证了这一结论,动物大脑的视觉皮层具有分层结构。眼睛将看到的景象成像在视网膜上,视网膜把光学信号转换成电信号,传递到大脑的视觉皮层(Visual cortex),视觉皮层是大脑中负责处理视觉信号的部分。1959年,David和Wiesel进行了一次实验,他们在猫的大脑初级视觉皮层内插入电极,在猫的眼前展示各种形状、空间位置、角度的光带,然后测量猫大脑神经元放出的电信号。实验发现,不同的神经元对各种空间位置和方向偏好不同。这一成果后来让他们获得了诺贝尔奖。
目前已经证明,视觉皮层具有层次结构。从视网膜传来的信号首先到达初级视觉皮层(primary visual cortex),即V1皮层。V1皮层简单神经元对一些细节、特定方向的图像信号敏感。V1皮层处理之后,将信号传导到V2皮层。V2皮层将边缘和轮廓信息表示成简单形状,然后由V4皮层中的神经元进行处理,它颜色信息敏感。复杂物体最终在IT皮层(inferior temporal cortex)被表示出来。
卷积神经网络可以看成是上面这种机制的简单模仿。它由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示。
顾名思义,卷积层由一组卷积单元(又称"卷积核")组成,可以把这些卷积单元理解为过滤器,每个过滤器都会提取一种特定的特征,方法参见 图像卷积 。
卷积层的过滤器负责从图像中查找规律,过滤器越多则参数越多,这意味着卷积层的维度可能很庞大。我们需要一种方法来降低维数,这就是卷积网络中的池化层(又名"下采样层")所扮的角色。
池化主要有3种形式:一般池化,重叠池化和金字塔池化。
池化窗口的尺寸为nn,一般情况下池化窗口都是正方形的。步长(stride)等于n。此时池化窗口之间是没有重叠的。对于超出数字矩阵范围的,只计算范围内的或者范围外的用0填充再计算。又可以分为最大值池化,均值池化。
池化窗口范围内的最大值作为采样的输出值。
假如输入是一个4×4矩阵,执行最大池化是一个2×2矩阵,每次滑动2步。执行过程非常简单,把4×4的输入拆分成不同的区域,把这些区域用不同颜色来标记。对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。
普通均值池化就是将池化窗口范围内的平均值作为采样的输出值。这种池化不如最大池化常用。
池化窗口之间有重叠。也就是步长大于等于1小于n,计算和一般池化是一样的。
空间金字塔池化(Spatial Pyramid Pooling,简称SPP)可以将尺寸大小不一样的转换为同样的尺寸。
SPP首先把看成1块,对这1块进行最大值池化,得到1个值,分成4块,对这4块分别进行最大值池化,得到4个值;分成16块,对这16块分别进行最大值池化,得到16个值,以此类推。这样就可以保证对于不同尺寸的而言,最终得到的值的个数是一样的。因为是最大值池化,超出范围的用不用0填充不会影响结果。
直接对原始图像做卷积,会存在两个问题。一是每次卷积后图像(特征图)都会缩小,这样卷不了几次就没了; 二是相比于中间的点,边缘的点在卷积中被计算的次数很少,导致边缘的信息易于丢失。
为了解决这个问题,我们可以采用填充的方法。我们每次卷积前,先给周围都补一圈空白,让卷积之后跟原来一样大,同时,原来的边缘也被计算了更多次。
比如,我们把(8,8)的给补成(10,10),那么经过(3,3)的filter之后,就是(8,8),没有变。
能够保证输入的数据和输出的数据具有相同的空间尺寸,假设零填充个数为p,卷积核为f f,卷积核滑动步长为s,则p应设置为
假设原始输入图像为m m,输出图像为n n,零填充个数为p,卷积核为f f,卷积核滑动步长为s,则输出尺寸为
假设输入图像为(m,m,d),其中d为图像深度(通道数),卷积核为f f,卷积核个数为n,则weight个数为
bias个数:
池化层很少使用零填充。假设原始输入图像为m m,输出图像为n n,卷积核为f f,卷积核滑动步长为s,则输出尺寸为
如果先绘制离观察者远的物体,再绘制近的物体,但观察者只看到近处的物体,远处的会被遮挡,不用呈现在屏幕上,这样做了不必要渲染和绘制, 如果先绘制离观察者近的物体,再绘制远的物体,因为远的物体后绘制,会把近的物体覆盖掉,因此OpenGL使用了个值来记录这个离观察者的距离,即 深度 ,这样绘制的顺序就可以任意,只绘制近的物体,
深度与Z坐标的关系如下:
图一观察者在Z轴的正方向,Z值越大则越靠近观察者,当物体的Z值大于观察者的Z值时,物体超出视野,不能显示
图二 观察者在Z轴的负方向,Z值越小则越靠近观察者,当物体的Z值小于观察者的Z值时,物体超出视野,不能显示
当观察者处于z=0的平面时,z值就是深度值。
深度值⼀般由16位,24位,32位值表示通常是24位位数越高,深度精确度越好。
图像的所有像素点,对应的深度值,显存开辟一块内存区域来保存,这个内存区域叫做 深度缓冲区
在显存中,深度缓冲区(DepthBuffer)和颜色缓冲区(ColorBuffer)一一对应的,颜色缓冲区存储像素的颜色信息,而深度缓冲区存储像素的深度信息 在开启深度测试后,默认深度比较规则的情况下,决定是否绘制一个物体表面和具体绘制什么颜色时,只显示距离观察者较近(深度值小)的像素点,
在渲染开始前,我们会将颜色缓冲区和深度缓冲区清空,深度缓冲区值全部清空为10,表示最大深度值(深度缓冲区值的取值范围是(0,1)),
渲染时首先将物体表面对应像素的深度值与当前深度缓冲区中的值进⾏比较 如果⼤于深度缓冲区中的值,则表示距离观察者较远,这样的像素点不用显示在屏幕上,因此深度缓冲区和颜色缓冲区的数据保持不变,像素点被忽略;如果表面对应的像素值小于深度缓冲区中的值,表示表面距离观察者更近,用物体表面这个像素的深度值和颜色值更新深度缓冲区和颜色缓冲区中的值 这个过程称为 深度测试
mode可以选以下参数,默认GL_LESS,
由于深度缓冲区精度的限制,两个图形几乎在一个z平面时,深度缓冲没有足够的精度来决定两个形状距离较近(深度较小),导致这两个图形不断地在切换前后顺序,屏幕闪烁。这个现象叫做深度冲突(Z-fighting) ,如下图所示
glPolygonOffset 需要2个参数: factor , units。每个Fragment的深度值都会增加如下所示的偏移量:
Offset = ( m factor ) + ( r units); m是指多边形的深度的斜率的最大值,一个多边形越是与近裁剪⾯平⾏,m就越接近于0 r是指能产⽣于窗⼝坐标系的深度值中可分辨的差异最⼩值,它是由具体OpenGL平台指定的一个常量一个大于0的Offset 会把模型推到离你(摄像机)更远的位置,相应的一个小于0的Offset会把模型拉近。一般而言,只需要将-10 和 -1 这样简单赋值给glPolygonOffset 基本可以满足需求
以上就是关于什么视觉可以检测出平面的凹槽深度全部的内容,包括:什么视觉可以检测出平面的凹槽深度、双目图像采集难吗、如何从rgb32的图像中快速提取alpha通道等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)