版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器视觉应用开发与项目案例教程
教程(一)
概述
2主要内容1.1
机器视觉的历史1.2机器视觉的研究范畴1.3机器视觉的发展和展望初级阶段为1990~1998年,期间真正的机器视觉系统市场销售额微乎其微。主要的国际机器视觉厂商还没有进入中国市场。1990年以前,仅仅在大学和研究所中有一些研究图像处理和模式识别的实验室。在20世纪90年代初,一些来自这些研究机构的工程师成立了他们自己的视觉公司,开发了第一代图像处理产品,人们能够做一些基本的图像处理和分析工作。尽管这些公司用视觉技术成功地解决了一些实际问题,例如多媒体处理,印刷品表面检测,车牌识别等,但由于产品本身软硬件方面的功能和可靠性还不够好,限制了他们在工业应用中的发展潜力。另外,一个重要的因素是市场需求不大,工业界的很多工程师对机器视觉没有概念,另外很多企业也没有认识到质量控制的重要性。31.1机器视觉的历史
第二阶段1998~2002年定义为机器视觉概念引入期。
自从1998年,越来越多的电子和半导体工厂,包括香港和台湾投资的工厂,落户广东和上海。带有机器视觉的整套的生产线和高级设备被引入中国。随着这股潮流,一些厂商和制造商开始希望发展自己的视觉检测设备,这是真正的机器视觉市场需求的开始。设备制造商或OEM厂商需要更多来自外部的技术开发支持和产品选型指导,一些自动化公司抓住了这个机遇,走了不同于上面提到的图像公司的发展道路——做国际机器视觉供应商的代理商和系统集成商。他们从美国和日本引入最先进的成熟产品,给终端用户提供专业培训咨询服务,有时也和他们的商业伙伴一起开发整套的视觉检测设备。41.1机器视觉的历史
第三阶段从2002年至今,我们称之为机器视觉发展期,从下面几点我们可以看到中国机器视觉的快速增长趋势:1、在各个行业,越来越多的客户开始寻求视觉检测方案,机器视觉可以解决精确的测量问题和更好地提高他们的产品质量,一些客户甚至建立了自己的视觉部门。2、越来越多的本地公司开始在他们的业务中引入机器视觉,一些是普通工控产品代理商,一些是自动化系统集成商,一些是新的视觉公司。虽然他们绝大多数尚没有充分的回报,但都一致认为机器视觉市场潜力很大。资深视觉工程师和实际项目经验的缺乏是他们面临的最主要的问题。3、一些有几年实际经验的公司逐渐给自己定位,以便更好的发展机器视觉业务。他们或者继续提高采集卡、图像软件开发能力,或者试图成为提供工业现场方案或视觉检查设备的领袖厂商。单纯的代理仍然是他们业务的一部分,但他们已经开始开发自己的技术或者诀窍,在元件和系统的层次上。4.经过几年寻找代理的过程,许多跨国公司开始在中国建立自己的分支机构。通常他们在北京、上海、广东、深圳等建立自己在中国的分支机构,来管理关键的客户以及向合作伙伴提供技术和商务支持。51.1机器视觉的历史目前,中国正处于经济和社会的高速发展期,随着我国城市化的快速进程及其大量配套工程的展开,如机场、港口、火车站、码头、停车场、客货运站场和枢纽公交站的重要部位,以及高速公路、城市快速干线、城市主干线、中心区各主要路口、城市各出入口、江河主航道、人行天桥、大型桥梁、隧道等重要交通设施、地铁营运线各站出入口、站台通道、旅客列车、地下商场等重要场合都要安装电子眼,并已明确提出了对智能化图像信息处理和分析的高端视觉装备的急需。机器视觉产业巨大的市场空间为企业开展创造了机遇,同时产业也面临着应用障碍,包括预算限制、不易使用、工程实施资源限制、操作人员的承受程度、视觉技术的了解、相对于其他自动化工程的优先级别不够高等。61.1机器视觉的历史
机器视觉是一种利用计算机算法和数学模型来处理数字图像的技术,其研究范畴包括图像获取、图像处理、特征提取以及目标检测与识别等方面。首先,图像获取是机器视觉技术中不可或缺的步骤,它涉及到摄像头、相机等设备,并需要对采集的图像进行预处理。其次,图像处理包括降噪、增强、分割、配准等子领域,主要涉及对图像进行去噪、增强、分隔和匹配等操作,以便更好地进行后续分析和处理。接着,特征提取是机器视觉领域的核心问题之一,其目的是从原始图像中提取出有意义的特征信息,以便进行目标检测、分类等任务。最后,目标检测与识别是机器视觉技术的重点研究领域,其任务是自动识别和定位图像中的物体实例,例如人脸、车辆、动物等。这些研究领域共同构成了机器视觉技术发展的核心,并在实践中得到广泛应用。71.2机器视觉的研究范畴
在机器视觉行业中备受关注的热门技术包括:深度学习,高光谱/多光谱成像,偏振,嵌入式视觉,3D成像和计算成像等。深度学习机器如何独立于人类交互来处理信息和对信息采取行动,是许多研究领域中的一个重要方向。深度学习的软件模型和硬件系统正在视觉世界的许多其他领域快速部署。高光谱/多光谱成像是一种可以同时获取物体表面多个波段光谱信息的成像技术。机器视觉偏振是一种利用偏振光学原理实现对物体表面特征分析的方法。嵌入式视觉是指将图像处理算法及相关硬件模块集成到单个嵌入式系统中,以实现对数字图像的实时处理和分析。3D成像指的是通过数字技术将物体或场景进行三维重建,并生成可以在计算机屏幕上显示的3D模型。计算成像是通过计算机图形学和数字信号处理技术,利用数学模型对现实世界中的三维物体进行建模、渲染和重构,生成二维或三维图像的过程。81.2机器视觉的研究范畴
随着全球制造中心向中国转移,中国机器视觉市场正在继北美、欧洲和日本之后,成为国际机器视觉厂商的重要目标市场。目前包括中国和日本在内的亚太地区占全球的比重突破20%已经超过欧洲,位居全球第二大区域市场。
从产业发展生命周期来看,国际机器视觉产业已经处于成熟期,在诸如工业4.0等市场热点的推动下,预期未来3~5年内,欧美日机器视觉技术仍将不断有创新,国际机器视觉市场有望保持现有市场规模,并继续增长。国内机器视觉产业目前还处于成长期,从2014、2015年情况来看,我国机器视觉产业已积累足够技术、市场、行业经验,已步入快速发展阶段。从全球市场角度来看,机器视觉行业已经走向成熟,近年来(2006-2015年)国外机器视觉市场专利数量逐年下降。全球机器视觉专利分布主要集中在美国、欧洲、日本等发达国家,欧美在机器视觉领域的技术处于统治地位。91.3机器视觉的发展和展望
随着人工智能技术的不断发展,AI芯片的出现使得机器视觉领域得到了空前的发展。相比于传统CPU,AI芯片具有较高的运算速度和低功耗的特点,能够快速处理海量的图像数据,为实时图像分析提供了基础支持。同时,算法的优化也是机器视觉发展的重要驱动力之一,例如深度学习、卷积神经网络等算法的不断优化与改进,使得机器视觉系统在分类、检测等任务中取得了更加精准的结果。此外,不断涌现的新算法和新技术,如强化学习、迁移学习、生成对抗网络等,也为机器视觉领域带来了新的思路和方法。因此,AI芯片和算法的优化将成为机器视觉发展的重要驱动力,推动机器视觉技术在各个领域的应用和发展。101.3机器视觉的发展和展望
近年来,随着数据集的增大和硬件设备的不断升级,机器视觉技术正在发生革命性变化,未来将有更多的应用场景和更高的性能需求。人工智能与机器视觉的结合将会更加紧密。机器视觉技术可以为人工智能提供更精确、更全面的视觉数据。图像、视频、三维模型等数据都是机器学习模型训练的重要输入,因此机器视觉将成为人工智能技术中的核心之一。同时,人工智能也将为机器视觉提供更丰富的思路和方法论,例如强化学习、元学习等新兴算法的应用将进一步推动机器视觉的发展。
更大规模的数据集也将是机器视觉未来的一个趋势。由于深度学习模型需要大量的训练数据来实现高质量的预测,未来的机器视觉技术将需要更多、更广泛的数据集来支撑。这包括从图像和视频到点云和三维重建等各种形式的数据,并且还需要考虑数据的多样性、复杂度和规模等问题。
更强大的计算资源也是机器视觉未来的一个关键趋势。随着深度学习模型的不断发展和扩展,模型的参数量正在急剧增长,对计算资源的需求也在不断提高。111.3机器视觉的发展和展望谢谢机器视觉应用开发与项目案例教程
教程(二)
机器视觉智能分拣系统概述
14主要内容2.1
智能分拣实训平台的基本介绍2.2了解实训平台的硬件设备2.3了解实训平台的软件系统2.4简单的系统演示智能分拣实训平台是一种基于人工智能技术的虚拟仿真教学系统,旨在为物流、快递、仓储等相关行业提供智能化分拣培训和实践操作的平台。32.1智能分拣实训平台的基本介绍
智能分拣机器人产品特性如下:基于嵌入式平台实现边缘计算智能;基于深度学习的目标物体识别;机械臂精准定位和目标拾取;机械臂控制算法可扩展,可采用强化学习控制机械臂;本书介绍该平台并提供图像分类、目标抓取两类多实训项目。智能分拣实训平台的主要应用场景是在物流、仓储和制造等领域中,用于提高货物分类、分拣的效率和准确性。162.1智能分拣实训平台的基本介绍
智能分拣实训平台的核心硬件由一款桌面级四轴迷你开源机械臂以及高性能的智能边缘计算网关GW3399组成,另外使用高清摄像头负责采集图像,图像传输到智能边缘计算网关,智能边缘计算网关运行神经网络模型对图片流进行分析,返回处理结果并能控制机械臂进行相关的追踪动作。智能边缘计算网关是一个硬件设备,它具有较强的计算处理能力和储存数据的能力。当摄像头捕捉到图像之后,这些图像会被传输到智能边缘计算网关中。智能边缘计算网关可以对这些图像进行初步的处理,例如图像压缩、去噪、亮度调整等处理172.2了解实训平台的硬件设备机械臂是一款四轴迷你的桌面级机械臂,4自由度铝合金机器臂,采用步进电机及减速器式驱动,12位磁编码器。一款基于开源硬件Arduino的开发板用于控制整个操作,最大的特点应该是底部转盘,所有动力装置都装在这个地方以减少机械臂部分的重量,从而减少惯性动作对稳定性的影响,同时也能增加机械臂的负载能力以提高效力。182.2了解实训平台的硬件设备智能边缘计算网关是一种基于嵌入式边缘计算技术的设备,它采用工业级铝合金一体屏设计,外观坚固耐用,适用于各种恶劣环境下的应用。该设备配备了最强的嵌入式边缘计算处理器RK3399,这是一款高性能、低功耗的处理器,能够提供出色的计算和处理能力。192.2了解实训平台的硬件设备高清摄像头采用1080P工业级AI宽动态摄像头,125度广角镜头焦距,支持自动聚焦,采用高品质CMOS传感器,传输速度快,成像效果好,传输稳定,AI视觉图像视频捕捉处理功能,支持USB免驱即插即用。202.2了解实训平台的硬件设备智能分拣平台内置丰富的软件资源,方便用户进行课程教学、项目开发、售后服务等,包括:智联平台、应用引擎、网络融合、远程协助、内网穿透等。
本系统采用PythonDjango框架编写,前端WEB系统界面简洁明了易于操作。软件系统中包含如下机器视觉功能:中文汉字识别:分别是中,智,讯,武,汉,科,技,公,司,如图所示212.3了解实训平台的软件系统
英文字母识别:分别是A,B,C,D,E,F,G,H,I,如图所示数字识别:分别是1,2,3,4,5,6,7,8,9,如图所示222.3了解实训平台的软件系统
汽车标志识别:分别是宝马,雪铁龙,大众,一汽,法拉利,福特,福田,本田,Mini的牌子车标,如图所示交通标志识别:分别是小心警告,小心滑到,限速80,道路维修,注意行人,注意野生动物出没,直行或转弯,停车,环岛这几类的图片标识232.3了解实训平台的软件系统
242.4简单的系统演示
简单的系统演示启动分拣程序
252.4简单的系统演示
简单的系统演示使用分拣程序谢谢机器视觉应用开发与项目案例教程
教程(三)
图像与机器视觉系统
28主要内容3.1
图像处理基础3.2机器视觉系统3.3机器视觉工具3.4环境部署与软件安装3.5OpenCV完成数据采集和存取3.6应用:图像数据采集图像处理是指对数字图像进行各种操作和处理的技术,包括色彩空间转换、图像滤波、图像分割、特征提取和目标识别等。色彩空间转换可将图像从一种颜色表示方式转换为另一种,以便更好地显示或分析图像。图像滤波则可以有效地去除噪声和增强图像的细节。图像分割可将图像分成若干个子区域,以便更好地分析和识别其中的信息。特征提取则是通过分析图像中的关键特征来描述和识别图像,而目标识别则是找出图像中与预先定义好的目标匹配的区域。293.1图像处理基础色彩空间(Colorspace)是对色彩的组织方式。借助色彩空间和针对物理设备的测试,可以得到色彩的固定模拟和数字表示。模式识别类的研究不可避免地会用到特征,或高阶特征,或低阶特征,或人为设计的特征,或神经网络自动学习的特征,而色彩空间就是一种有效的图像特征。我们经常用颜色直方图来作为我们的图像描述符,可以根据图像的色彩分布提取特征。303.1图像处理基础RGB色彩空间立方体图六角锥体模型图像滤波是图像处理中最基本的操作之一,其目的是消除图像中的噪声、平滑图像或者增强图像中的特定细节。在数字图像处理中,图像通常表示为一个二维矩阵。通过对这个矩阵进行滤波操作,可以改变每个像素值及其周围像素值的权重,从而影响整个图像的外观。
图像滤波操作的基本思想是:用一个称之为卷积核或滤波器的小型矩阵,在图像上做一个类似于“卷积”的操作,将每个像素点替换成该点周围像素的加权平均值,以此来达到平滑、去噪或其它目的的效果。
常见的图像滤波方法包括线性滤波、非线性滤波等。线性滤波的滤波器是由一组权重系数构成的矩阵,例如3x3的低通滤波器就是一种线性滤波器。非线性滤波器则不遵循线性原则,并且会根据像素值的大小和位置进行过滤。这些方法可以用来平滑图像、锐化图像、检测边缘或纹理等等。313.1图像处理基础图像分割是一个重要的领域,其目标是将图像中的不同区域或对象划分出来。为了实现这一目标,研究者们开发了各种不同类型的分割算法。这些算法通常被归为不同的类别,但它们具有相互关联的特征,近期的综述中,学者将图像分割简单地分为数据驱动和模型驱动两类。
基于阈值、区域、边缘、数学形态和特定理论的分割方法都是常见的技术,可以用于不同的应用场景。其中,基于阈值的分割是最简单的方法之一,其通过将图像灰度值与事先设定的阈值进行比较,将图像分为前景和背景。区域分割方法则通过将图像分成相邻的区域,并将区域内像素的属性合并来实现分割。边缘分割方法利用图像中的边缘信息来分割图像,而数学形态学方法则利用形态学运算对图像进行处理和分割。另外,还有一些基于特定理论的分割方法,如基于能量函数的分割方法和基于图论的分割方法等。
323.1图像处理基础特征提取是计算机视觉和图像处理中的重要概念。它可以用来将图像上的点分为不同的子集,这些子集可以是孤立的点、连续的曲线或者连续的区域。特征的精确定义往往由问题或者应用类型决定。
特征是许多计算机图像分析算法的起点,因此一个算法是否成功往往由它使用和定义的特征决定。特征提取在图像分类、目标检测、人脸识别等领域被广泛应用。但是,特征的定义和提取方法也需要根据具体问题和应用需求进行灵活调整和改进,保证特征的刻画能够准确且可重复地反映出图像的重要信息。
常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。
333.1图像处理基础目标识别是指通过计算机程序、算法等技术手段,将一种特殊目标或一类目标从其他目标或其他类型的目标中区分出来的过程。
通常情况下,目标识别需要通过预先训练模型和算法来实现。在进行目标识别时,首先需要收集并准备相关数据。然后,我们需要对这些数据进行预处理,包括去噪声,调整亮度、对比度等。接着,需要使用特征提取方法将数据转化为数学向量,以便计算机能够对其进行处理和分类。最后,可以使用分类器对这些数据进行分类和识别。
343.1图像处理基础图像运算是数字图像处理中非常重要的一部分,其中包括了加法运算、减法运算、乘法运算、除法运算和逻辑运算等。这些运算技术可以对图像进行各种处理和操作,如增强图像的亮度、对比度、色彩鲜艳度等,从而使图像更加清晰、生动、有趣。通过这些运算技术,可以更好地理解数字图像的本质,快速、高效地处理和优化图像,满足人们各种不同的需求和要求。
353.1图像处理基础视觉系统就是用机器代替人眼来做测量和判断。视觉系统是一种机器学习技术,用于将现实世界中的图像转换为数字化信息。这个过程涉及到多种硬件和软件组件,包括图像传感器(如CMOS或CCD),专门设计的图像处理器,和算法来分析图像数据。
图像处理的过程中,像素分布、亮度和颜色等信息起着非常重要的作用。例如,在图像分类任务中,图像处理系统会对每个像素进行分析,然后将它们分配到不同的类别中。而在物体检测任务中,图像处理系统需要分离出每个物体的轮廓,并将其与已知的物体模板进行比较,以确定它属于哪个物体类别。
图像系统是通过对数字信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。363.2机器视觉系统机器视觉系统的发展经历了图像处理、特征提取、统计学习和深度学习等多个阶段,每个阶段都有其独特的特点和局限性。
机器视觉系统的自动化程度和柔性非常高,这是因为它可以根据不同的产品类型、尺寸、形状和特征来执行相应的检测任务。
机器视觉系统可以通过学习和训练,自动识别和分析图像中的各种特征和缺陷,并采取相应的措施来修正或排除不良品。
机器视觉系统还具有很高的柔性,它可以根据要求随时调整检测任务和参数,可以对不同的产品类型和要求进行适应性调整。
机器视觉系统可以通过远程控制来实现对危险环境中的生产过程和产品进行实时监控和检测,从而不需要让操作员亲身进入到这些危险的环境中去。在一些场合中,人工视觉难以满足精度、速度或连续性的要求。例如,在高速流水线上需要快速地检测产品的缺陷,如果使用人工视觉来完成这项任务,则很难满足高速、高精度和连续性的要求。而机器视觉系统则可以有效地解决这些问题,实现高速、高精度的检测任务。373.2机器视觉系统一个典型的工业机器视觉系统包括:光源、镜头、
相机(包括CCD相机和COMS相机)、图像处理单元(或图像捕获卡)、图像处理软件、监视器、通讯和输入输出单元等。系统可再分为:主端电脑(HostComputer)、影像撷取卡(FrameGrabber)与影像处理器、影像摄影机、CCT镜头、显微镜头、照明设备、Halogen光源、LED光源、高周波萤光灯源、闪光灯源、其他特殊光源、影像显示器、LC机构及控制系统、PLC、PC-Base控制器、精密桌台、伺服运动机台。
本章采取的机器视觉系统可分为硬件和软件两部分,其中软件部分采用了OpenCV,硬件主要是高清摄像头。383.2机器视觉系统OpenCV
OpenCV(OpenSourceComputerVisionLibrary)是一个开源计算机视觉库,由Intel公司发起并维护。它最初发布于1999年,旨在为计算机视觉研究和开发提供一个通用、高效、易用的平台。NampyNumpy是非常常用的科学计算库,Numpy提供了高性能多维数组对象以及相关的工具,Numpy能将数组向量化,提升多维数组的运算速度。MatplotlibMatplotlib是非常强大的python画图工具,可以画图线图、散点图、等高线图、条形图、柱形图、3D图形、图形动画等。Matplotlib工具的配置参数非常多,如字体、默认颜色等等。393.3机器视觉工具图像数据结构多通道多维数组的示例如下所示,通道指定元素的尺寸,即最小单元,1*x或者x*1的数组,维度均为2,所以Mat的维度最小为2,Mat是一种通用的矩阵数据类型,可以用来表示图像、数组和其他类型的数据。Mat的维度是指其数组的行数和列数,也称为形状(shape),形状由大小(size)和通道数(channels)两部分组成:403.3机器视觉工具图像数据格式opencv-python图像存储的数据结构为numpy的格式,opencv其底层基于C++的Mat结构,在opencv1.0中,一般使用IplImage的C结构体CvMat在内存中存储图像,但是需要用户自己进行内存的分配和释放。在opencv2.0中,引入了新的C++结构Mat,具体存储结构如下所示。413.3机器视觉工具参照教材完成环境部署和软件安装安装python官网下载步骤:1)打开官方下载页面(/downloads/):2)选择与你的操作系统对应的下载链接,例如Windows、Mac或Linux。3)选择Python3的版本,例如Python3.x.x。4)点击“GetPython”按钮,选择你想要下载的文件类型和安装方式。5)下载完成后,双击下载的文件来安装Python。423.4环境部署与软件安装Pip下载步骤:1)打开终端或命令提示符。2)输入命令:pip3installpython-3.x.x其中x是你选择的Python3版本号,例如3.6。3)安装完成后,你可以使用以下命令检查Python3是否安装成功:python3--version如果成功安装,命令将输出Python3的版本信息。4)配置你的环境变量,使计算机能够找到Python3的安装目录。你可以使用以下命令配置环境变量:exportPYTHONHOME=/path/to/python3exportPATH=$PYTHONHOME/bin:$PATH其中,/path/to/python3是Python3的安装目录。可以将路径替换为自己的安装目录。433.4环境部署与软件安装安装pip(Python包管理器)pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。如果你在
下载最新版本的安装包,则是已经自带了该工具。pip官网:/project/pip/注:Python2.7.9+或Python3.4+以上版本都自带pip工具。 你可以通过以下命令来判断是否已安装:pip3--version#Python3.x版本命令如果你还未安装,则可以使用以下方法来安装:$curlhttps://bootstrap.pypa.io/get-pip.py-oget-pip.py#下载安装脚本$sudopython3get-pip.py#运行安装脚本443.4环境部署与软件安装安装Numpy边缘计算网关和Linux虚拟机默认已经安装好了numpy软件包。若在新的系统下安装,请在Linux终端输入下面命令安装:$pip3installnumpy==1.16.4453.4环境部署与软件安装安装OpenCV使用git下载源码包$cd/home/zonesion/Downloads$gitclone-b3.4.5/opencv/opencv$gitclone-b3.4.5/opencv/opencv_contrib安装依赖包$sudoapt-getinstallbuild-essential#编译$sudoapt-getinstallcmakegitlibgtk2.0-devpkg-configlibavcodec-devlibavformat-devlibswscale-dev#必须安装$sudoapt-getinstallpython3-devlibtbb2libtbb-devlibjpeg-devlibpng12-devlibtiff-devlibjasper-devlibdc1394-22-dev#可选安装编译$cd/home/zonesion/Downloads/opencv$mkdirbuild$cdbuild$cmake-DCMAKE_BUILD_TYPE=RELEASE-DCMAKE_INSTALL_PREFIX=/usr/local-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/-DBUILD_opencv_python3=ON-DPYTHON3_INCLUDE_PATH=/usr/include/python3.5m-DPYTHON3_LIBRARIES=/usr/lib/aarch64-linux-gnu/libpython3.5m.so-DPYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include-DBUILD_OPENCV_PYTHON3=ON..$make-j6$sudomakeinstall463.4环境部署与软件安装通过OpenCV录制视频VideoCapture类是OpenCV中的一个类,用于从视频文件、图像序列或摄像头捕获帧。构造函数:cv::VideoCapture::VideoCapture();cv::VideoCapture::VideoCapture(constString&filename);cv::VideoCapture::VideoCapture(intindex);第一个构造函数会创建一个空的VideoCapture对象,需要使用`open()`方法来打开视频源。第二个构造函数是打开指定的视频文件,并返回一个VideoCapture对象。第三个构造函数是打开指定索引的摄像头。473.5OpenCV完成数据采集和存取读取视频帧##逐帧获取画面#如果画面读取成功ret=True,frame是读取到的图片对象(numpy的ndarray格式)ret,frame=cap.read()根据ret我们可以知道图片有没有被正确读入。如果失败,我们可以选择跳过(也有可能是图片传输有损),或者直接退出程序。ifnotret:#如果图片没有读取成功
print("图像获取失败,请按照说明进行问题排查")break483.5OpenCV完成数据采集和存取图像读取与保存OpenCV提供了imread()函数来读取图像文件cv::imread(constString&filename,intflags=cv::IMREAD_COLOR);该函数接受两个参数:文件名和标志(可选)。其中,文件名是要读取的图像文件的路径和名称,而标志用于指定图像应如何读取。标志可以是以下常量之一:-`cv::IMREAD_COLOR`:默认值,读取一个彩色图像。如果图像是灰度图,则转换为彩色图像。-`cv::IMREAD_GRAYSCALE`:读取灰度图像。`cv::IMREAD_UNCHANGED`:读取原始图像,包括alpha通道。函数返回一个`Mat`对象,即读取的图像数据。如果无法读取指定的文件,则返回空的`Mat`对象。493.5OpenCV完成数据采集和存取图像读取与保存imread方法支持的文件格式如下所示:-Windowsbitmaps-*.bmp,*.dib(alwayssupported)-JPEGfiles-*.jpeg,*.jpg,*.jpe(seetheNotesection)-JPEG2000files-*.jp2(seetheNotesection)-PortableNetworkGraphics-*.png(seetheNotesection)-WebP-*.webp(seetheNotesection)-Portableimageformat-*.pbm,*.pgm,*.ppm*.pxm,*.pnm(alwayssupported)-Sunrasters-*.sr,*.ras(alwayssupported)-TIFFfiles-*.tiff,*.tif(seetheNotesection)-OpenEXRImagefiles-*.exr(seetheNotesection)-RadianceHDR-*.hdr,*.pic(alwayssupported)-RasterandVectorgeospatialdatasupportedbyGDAL(seetheNotesection)503.5OpenCV完成数据采集和存取图像读取与保存读取完图片后,可以通过cvtColor函数进行颜色域的转换,函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是从BGR向其他类型转换时,必须明确指出图像的颜色通道,在opencv中,其默认的颜色制式排列是BGR而非RGB。所以对于24位颜色图像来说,前8-bit是蓝色,中间8-bit是绿色,最后8-bit是红色。dst=cv.cvtColor(src,code[,dst[,dstCn]])src输入图像.code颜色空间转换码.dst输出图像.dstCn输出图像的通道数;如果参数为0,则直接根据输入图像推断输出图像的通道数.513.5OpenCV完成数据采集和存取图像读取与保存显示图片可以通过cv2的imshow函数显示图片#导入一张图像模式为彩色图片img=cv.imread('test.png,cv.IMREAD_COLOR)#“frame”窗口名#img是需要显示的图像cv.imshow(“frame”,img)523.5OpenCV完成数据采集和存取图像读取与保存打印图像属性以下代码可以打印出图像的属性信息。#导入一张图像模式为彩色图片img=cv.imread('test.png,cv.IMREAD_COLOR)print("================打印图像的属性================")print("图像对象的类型{}".format(type(img)))print("图像的尺寸",img.shape)print("图像高度:{}pixels".format(img.shape[0]))print("图像宽度:{}pixels".format(img.shape[1]))print("通道:{}".format(img.shape[2]))print("图像分辨率:{}*{}".format(img.shape[1],img.shape[0]))print("数据类型:{}".format(img.dtype))533.5OpenCV完成数据采集和存取图像读取与保存opencv提供了imwrite函数来保存图片。cv.imwrite(filename,img,params=None)#filename:保存文件的名称和路径,可以是绝对路径或相对路径。需要注意的是,文件后缀名应该与所保存的图像格式相匹配,否则会导致保存失败或者图像不能正常打开。#img:要保存的图像数据,可以是NumPy数组或Mat对象。如果是NumPy数组,则必须是8位无符号整型或32位浮点型;如果是Mat对象,则可以是任意类型的矩阵。#params:一个包含保存选项的字典或None。其中,键是字符串类型,值可以是数字或字符串类型,用于指定保存图像的格式和压缩等级。例如,可以通过params={'jpeg_quality':90}来指定JPEG格式的压缩质量为90。img=cv.imread('test.png,cv.IMREAD_COLOR)543.5OpenCV完成数据采集和存取图像采集利用边缘计算网关的摄像头实现图像数据采集,通过OpenCV视觉框架进行图像和视频的处理,并将采集的图片使用FlaskWeb框架推流到前端展示。553.6应用:图像数据采集谢谢机器视觉应用开发与项目案例教程
教程(四)
图像数据采集和标注58主要内容4.1
图像数据结构4.2图像文件处理4.3图像标注介绍4.4应用:智能分拣图像数据标注4.5应用:图像标记图像的数字化图像数字化是将连续的图像信号转换为离散的数字信号的过程。该过程包括采样、量化和编码三个步骤。1、采样是将连续的图像信号在空间和时间上进行采样,即将连续的空间或时间轴上的点取样成离散的点。这些离散的点被称为像素,它们是图像数字化的基本单位。采样速率决定了每秒采集多少个像素,也称为图像的分辨率。2、量化是将采样得到的连续信号转换为离散的数值。这涉及到确定一个幅度级别的有限集合,然后将采样到的像素值限制在此幅度级别集合内。量化过程通常使用均匀或非均匀量化来实现。3、编码是将量化后的数字信号转换为二进制码以便存储或传输。编码可以使用熵编码或者其他压缩算法来实现,以减小存储或传输所需的带宽和容量。594.1
图像数据结构604.1
图像数据结构数字图像的存储格式614.1
图像数据结构序号文件格式说明1bmpWindows位图,1位、8位和24位未压缩图像2jpeg/jpg联合图像专家组制定,包括8位、12位和16位基准3tif/tiff标记图像文件格式,包括1位、8位、16位、24位和48位未压缩以及采用Packbit、LZW或Deflate压缩的图像4gif图形交换格式,8位图像5png可移植网络图形,包括1位、2位、4位、8位和16位灰度图像;带有alpha通道的8位和16位灰度图像;1位、2位、4位和8位索引图像;24位和48位真彩色图像;带有alpha通道的24位和48位真彩色图像bmp格式bmp(bitmapfile)位图是windows系统采用的图形文件格式,也是windows内部各个跟图像绘制处理等相关操作的基础,因此受到windows平台下运行的所有图像处理软件的支持。624.1
图像数据结构序号结构组成数据结构名称大小(字节)1文件头BITMAPFILEHEADER142信息头BITMAPINFO403调色板RGBQUAD4N4图像数据BYTE图像实际数据大小jpeg/jpg格式JPEG格式是国际标准化组织(InternationalStandardizationOrganization,ISO)和国际电气技术委员会(InternationalElectrotechnicalCommisson,IEC)联合组建的联合图像专家小组(JointPhotographicExpertsGroup,JPEG)指定的一种静态图像数据的压缩编码标准。JPEG既适合灰度图像,也适合彩色图像。由专家组开发的JPEG压缩算法有两种,一种是基于离散余弦变换的有损压缩算法,另一种是基于预测的无损压缩算法。前者压缩了图像相邻行和列之间的多余信息,当压缩比在25:1时,压缩掉的颜色信息不会引起人眼视觉上的明显变化,人眼基本无法鉴别出压缩导致的颜色误差,是目前最好的图像压缩技术,得到了广泛的应用。JPEG推荐的编码算法也有两种,一种是顺序编码,另一种是渐进编码。634.1
图像数据结构tif/tiff格式TIF/TIFF是图形图像处理中常用的格式之一,由于它对图像信息的存放灵活多变,可以支持很多色彩系统,而且独立于操作系统,因此得到了广泛应用。TIF/TIFF全称是标记图像文件格式(TaggedImageFileFormat,TIFF),扩展名为TIF或者TIFF。它最初由Aldus公司与微软公司一起为PostScript打印开发。在刚开始的时候,桌面扫描仪功能比较单一,只能处理二值图像格式,随着扫描仪的功能逐渐强大,TIFF逐渐支持灰阶图像和彩色图像。如今,TIFF具有强大的数据描述能力,支持256色、48位、32位和24位等多种颜色深度,也支持RGB、CMYK和YCbCr颜色模式。TIFF是一种独立于操作系统和文件系统的图像存储格式,内部结构可以分成三个部分,分别是:文件头信息区(表头)、文件目录(标识信息区)和文件目录项(图像数据区)。644.1
图像数据结构gif格式GIF(GraphicsInterchangeFormat)格式是在1987年由CompuServe公司为了填补跨平台图像格式的空白而发展起来的一种公用的图像文件格式标准。GIF是一种位图,即图片由许多的像素组成,每一个像素都被指定了一种颜色,这些像素综合起来就构成了图片。GIF采用的是连续色调的Lempel-Zev-Welch(LZW)无损压缩算法,压缩效率在50%左右,支持8位256种颜色。GIF比较适用于色彩较少的图片,比如卡通造型、公司标志等等。如果碰到需要用真彩色的场合,那么GIF的表现力就有限了。GIF格式比较复杂,一般包括文件头、逻辑屏幕描述区、调色板、图像数据区和结束标志区,其中文件头和图像数据区是不可或缺的部分。654.1
图像数据结构png格式PNG即便携式网络图形(PortableNetworkGraphics),是一种采用无损压缩算法的位图格式,扩展名为png。PNG图像格式的文件由一个8字节的PNG文件署名和3个以上的后续数据块。所有PNG图片文件内容开头都有8字节文件署名,用于识别PNG格式。PNG定义了两种类型的数据块,一种是称为关键数据块(criticalchunk),这是必需的数据块,另一种叫做辅助数据块(ancillarychunks),这是可选的数据块。每个数据块都包含长度,数据块类型,数据块数据,循环冗余检测四个部分。关键数据块定义了4个标准数据块:文件头数据块IHDR,调色板数据块PLTE,图像数据块IDAT,图像结束数据块IEND。每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。664.1
图像数据结构图像的文件处理包括图像显示、图像读取和图像保存三个基本操作。OpenCV是计算机视觉和图像处理领域的专用库,支持多种平台和多种编程语言,功能强大,性能优越。而OpenCV-Python是OpenCV的Python语言接口;Matplotlib是Python语言的另一种图形图像处理库,也具备了简单的图像处理功能。674.2图像文件处理图像显示图像显示是将图像数据转换为可视化的图像过程。在计算机中,图像显示通常通过显示器进行。要显示一张图像,需要使用一个图像处理库或工具包来读取图像文件,并将其转换为特定格式的像素数组或位图。然后,这个像素数组会被传递给显示设备,例如屏幕或打印机,在屏幕上呈现出对应的图像。OpenCV提供了imshow函数在窗口显示图像,并会自适应调整窗口大小以适配图像尺寸,其函数原型为:cv2.imshow(window_name,img)Matplotlib提供了matplotlib.pyplot.imshow函数来显示图像,其函数原型为:matplotlib.pyplot.imshow(img)684.2图像文件处理
图像读取图像读取指的是从存储设备中获取图像数据并将其加载到内存中的过程。要读取一张图像,需要使用一个图像处理库或工具包,该工具包提供了读取不同文件格式的函数或API。当读取完成后,图像数据将以像素数组或位图的形式存储在内存中,可以进行后续处理或显示。OpenCV提供了imread函数从文件中读取图像数据,其函数原型为:cv2.imread(filename,flags)
另外,OpenCV提供cv2.cvtColor函数对颜色维度进行转换,函数原型是:cv2.cvtColor(img,color_change)Matplotlib提供matplotlib.pyplot.imread函数读取图像数据,函数原型是matplotlib.pyplot.imread(fname,format=None)694.2图像文件处理图像保存图像保存是将内存中的图像数据以某种格式保存到磁盘或其他存储介质中的过程。要保存一张图像,需要使用一个图像处理库或工具包提供的保存函数或API,该函数将接受将要保存的图像数据和保存格式作为参数。然后,图像数据将被编码并以指定格式写入磁盘。在保存过程中,可以选择不同的压缩比例和颜色模式等设置,以达到最佳的存储效果。OpenCV提供了cv2.imwrite函数来保存图像,函数原型为:cv2.imwrite(dir,img)matplotlib提供了matplotlib.pyplot.imsave函数来保存图像,函数原型为:matplotlib.pyplot.imsave(dir,img,**kwargs)704.2图像文件处理视频处理视频处理是指对一个或多个视频进行各种操作和修改的过程。这些操作可以包括剪辑、裁剪、合并、添加特效、改变颜色、调整音频等等,以满足不同需求和要求。视频处理在电影制作、电视广告、社交媒体、在线教育等领域都有广泛应用。随着互联网带宽的增加和技术的发展,视频处理也变得越来越普遍和重要。OpenCV提供了cv2.VideoCapture函数来获取摄像头序号,函数原型为:cv2.VideoCapture(intdecive)OpenCV提供VideoCapture.set函数和VideoCapture.get函数实现对摄像头对象的属性设置和访问,函数原型分别为:VideoCapture.set(propId,value)VideoCapture.get(propId)714.2图像文件处理
在机器学习的应用中,数据标注是至关重要的一个环节。它可以帮助机器学习模型更好地理解和识别数据,并提高模型的准确性和效率。而数据预处理则是对原始数据进行优化和处理的前置工作,以使其适应于机器学习模型的需求。图像数据标注则是机器学习中最常见的一种数据标注方式,通过对图像进行标注,可以帮助机器学习模型更好地理解和识别图像中的内容。724.3图像标注介绍数据预处理
数据预处理在机器学习中是非常重要的一环。它可以消除数据中的噪声和缺失值,提高数据质量,减少模型对于噪声的敏感度,从而提高模型的精确度和鲁棒性。1、数据来源数据集的获取也有几个主要渠道:开源数据集,商业数据集和网络数据。开源数据集。在计算机视觉、自然语言处理和语音识别等三大领域,都有大量的开源数据集提供给人们免费使用。商业数据集主要来自于各种商业机构收集的数据,其特点是具有较高的专业性,比如医疗影像数据,大型购物网站客户的商业行为数据等等。得益于手机等移动终端的性能升级和无线网速度的提高,人们在网络上留下大量数据。734.3图像标注介绍数据预处理2、数据采集数据采集是指从特定的数据源中获取、整理和处理数据的过程。一般来说,数据采集流程包括以下几个步骤:1)明确数据来源:在进行数据采集之前,需要明确数据的来源。2)确定数据范围与数量:在明确数据来源之后,需要根据特性行业与应用定位,确定需要采集的数据范围与数量。这个过程需要考虑到数据的关键性、可靠性以及使用场景等因素。3)选择合适的数据采集方法:根据数据来源和需要采集的数据类型,选择合适的数据采集方法。常用的数据采集方法包括爬虫技术、传感器数据采集、调查问卷、实验研究等。4)开展数据采集工作:根据确定的数据采集方法和范围,开展具体的数据采集工作。744.3图像标注介绍数据预处理3、数据清洗
采集到数据以后,需要对这些海量数据进行有效的管理,通常会把数据导入一个大型分布式数据库或者存储集群中,这需要针对原始数据中的缺失信息,冗余信息和非标信息进行相应的预处理工作,这个过程就是数据清洗。数据清洗主要有几种处理方式,包括缺失值处理、噪声过滤、和冗余合并。在具体的数据清洗过程中,一般依次遵循明确错误类型、识别错误实例、纠正发现错误和干净数据回流这四个步骤展开。754.3图像标注介绍数据预处理4、数据变换数据变换在数据预处理中的作用是非常重要的。通过对数据进行规范化、离散化、连续化、归一化等操作,可以使数据更适合进行置信区间分析或者可视化,得到符合人眼感知的图像,直观地展现数据之间的关系和趋势。同时,也可以降低数据的维度或复杂度,在保证数据完整性的前提下,去除某些无用的信息,压缩数据量,从而方便使用简单的回归模型进行建模。764.3图像标注介绍数据预处理5、数据降维数据降维的目的是通过减少数据的维度来优化模型、提高模型性能和减小计算开销。数据降维可以通过各种方法实现,其中最常用的方法包括特征选择和特征提取。特征选择是指从所有可用的特征中选择出最有用的一些特征,这些特征可以帮助我们更好地理解和预测数据。另一种常见的数据降维方法是特征提取,这是通过创建新的特征来减少数据的维度。774.3图像标注介绍图像数据标注数据标注是对采集到的原始数据(如图像、文本、语音和视频等)进行归类、整理、编辑、标记和批注的过程,其目标识给标注数据增加标签,生成满足机器学习模型训练要求的数据格式。其基本概念包括标签(Label),标注任务(AnnotationTask)、数据标注员(DataLabeler)和标注工具(AnnotationTool)。标签指的是表示数据的特征、类别和属性等;标注任务是指按照数据标注规范对数据集进行标注的过程;数据标注员是指负责完成对数据标注任务的人员;标注工具是指标注任务中所需的工具和软件,可分为手动标注工具,自动标注工具和半自动标注工具。784.3图像标注介绍数据标注管理标注数据是训练机器学习模型的重要保证,越精细的标注数据堆模型的训练就越有效。每一种类型的数据标注都应该受完整严格的规范约束,高质量的数据标注工作应该从人员和工程两方面入手,通过规范的管理制度管理标注人员和工程的质量,获取高精度的数据标注。794.3图像标注介绍4.4.1图像数据标注工具介绍1)LabelImg。LabelImg是一款非常优秀且使用率极高的图像标注工具。它基于Python语言开发,可以在Windows、Linux和MacOS平台下运行。LabelImg具有操作简单、快速、生成标注文件以XML格式保存、读取方便、格式标准等优点。2)VOTT。VOTT是一款由微软发布的基于JavaScript开发的图像目标检测标注工具。它使用React+Redux进行开发,并支持Windows和Linux平台运行。VOTT的主要功能是在图像中标注目标框,并将其导出为各种通用格式,如YOLO、PascalVOC和COCO等。3)Labelme。Labelme是一款基于Python语言和PyQt框架开发的图像标注软件。它支持多边形分割、语义分割、2D框、线标注、点标注等多种标注方式,与其他标注工具相比,Labelme的灵活性更高。4)VIA-VGGImageAnnotator。VIA-VGGImageAnnotator是一款开源的图像标注工具,可以离线使用,并且支持多种标注类型,包括矩形、圆、椭圆、多边形、点和线等。该工具的源代码也是开源的,用户可以根据自己的需要进行二次开发,比如增加鼠标十字线等功能。804.4应用:智能分拣图像数据标注4.4.2使用labelImg完成智能分拣图像数据标注1.下载labelImg$gitclone/tzutalin/labelImg.git2.安装依赖环境$sudoapt-getinstallqt4-dev-toolsqt4-docqt4-designerqt4-qtconfig$sudopip2installlxml$makeqt4py23.运行labelImg$python3labelImg.py814.4应用:智能分拣图像数据标注4.4.3图片数据预处理1边缘检测:对图片进行二值化处理,然后进行开运算闭运算,寻找轮廓,对轮廓面积进行排序,根据显示可知,取最大面积的轮廓即可,然后就可以将最大的边框检测出来。2.切分目标:将边框检测出来的图片进行切分,选择一张原始图片输入,会输出一张大边框检测图片,以及小目标分割的图片824.4应用:智能分拣图像数据标注图像标记是物体检测、目标分类的基础,当推理算法检测识别到目标物体在图片上的坐标之后,就需要使用OpenCV图像标记的相关接口画出图片中物体的识别框和分类标签。834.5应用:图像标记谢谢机器视觉应用开发与项目案例教程
教程(五)
图像特征提取86主要内容5.1
图像变换5.2图像边缘检测5.3图像分割5.4数学形态学5.5应用:图像变换、形态学变换、图像特征提取图像变换是指对一幅图像进行不同的几何、颜色或灰度变换,以达到某种特定的目的。在图像处理中,图像变换是非常重要的技术之一。在讨论图像变换的时候,我们经常会提到仿射变换和透视变换这两个概念。图像仿射变换是一种可以保持图像形状的变换,其包括平移、旋转、缩放等操作。这些操作可以通过矩阵运算来实现。在实际应用中,图像仿射变换被广泛应用于图像的校正和匹配等领域。而图像透视变换则是指将三维场景映射到二维图像平面上的变换,它可以模拟出近似真实的三维效果。透视变换包括了仿射变换的所有操作,同时还包括了投影变换等更为复杂的操作。875.1
图像变换图像仿射变换仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。维基百科的简介十分简单明了,仿射变换即“线性变换”+“平移”。仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。任意的仿射变换都能表示为乘以一个矩阵(线性变换),再加上一个向量(平移)的形式。885.1
图像变换图像透射变换透视变换(PerspectiveTransformation)是一种将图像从一个透视投影空间映射到另一个透视投影空间的技术。在计算机视觉和图形学中,透视变换常用于校正或重构具有透视畸变的图像或场景。它可以使图像或场景看起来更自然、更精确,并能够提高图像处理和模式识别的准确率。透视变换是将图片投影到一个新的视平面,也称作投影映射.它是二维(x,y)到三维(X,Y,Z),再到另一个二维(x’,y’)空间的映射。相对于仿射变换,它提供了更大的灵活性,将一个四边形区域映射到另一个四边形区域(不一定是平行四边形).它不止是线性变换.但也是通过矩阵乘法实现的,使用的是一个3x3的矩阵,矩阵的前两行与仿射矩阵相同(m11,m12,m13,m21,m22,m23),也实现了线性变换和平移,第三行用于实现透视变换。895.1
图像变换图像重映射变换图像重映射变换(Imageremapping)是将一幅图像从一个坐标系映射到另一个坐标系的过程。在计算机视觉中,它通常用于纠正图像畸变、校准摄像头、实现鱼眼矫正、图像缩放等任务。图像重映射变换可以看作是一种像素级别的操作,其基本思想是将源图像中的每个像素位置,按照指定的映射关系,对应到目标图像中的新位置,并从源图像中取出该位置的像素值,拷贝到目标图像的对应位置中。remap()函数的主要作用是将源图像的每个像素位置映射到目标图像的另一个位置上。905.1
图像变换remap()函数的语法如下:remap(InputArraysrc,//输入图像
OutputArraydst,//输出图像
InputArraymap1,//第一维映射表
InputArraymap2,//第二维映射表
intinterpolation=INTER_LINEAR,//插值方法
intborderMode=BORDER_CONSTANT,//处理边界的方式
constScalar&borderValue=Scalar()//边界值(如果borderMode=BORDER_CONSTANT)Hough变换霍夫变换是一种图像处理技术,最初由保罗·霍夫(PaulHough)在1962年提出。它的作用是在图像中检测出特定形状的对象,如直线、圆、曲线等,并且可以通过检测到的这些对象进行后续的图像分析和处理。以检测直线为例,假设将直线表示为y=kx+b的形式,那么它在参数空间中对应的点应该是(k,b)。遍历原图中每个边缘点,将每个点对应的所有(k,b)点都在参数空间中标记出来。如果有多条直线通过同一组(k,b)点,那么这些直线在原图中都会共线,因此在参数空间中就会形成一个峰值。915.1
图像变换边缘就是图像中包含的对象的边界所对应的位置。物体的边缘以图像局部特性的不连续性的形式出现的,例如,灰度值的突变,颜色的突变,纹理结构的突变等。边缘检测(edgedetection)在图像处理和对象识别领域中都是一个重要的基本问题。由于边缘的灰度不连续性,可以使用求导数的方法检测到。最早的边缘检测方法都是基于像素的数值导数的运算。目前已经有非常多的边缘检测算法,现有的边缘检测方法主要分为基于梯度的方法和基于机器学习的方法两类。基于梯度的方法通常使用一些特定的滤波器(如Sobel、Prewitt、Canny等)来检测不同方向上的梯度变化,并根据一些预设的阈值将梯度强度高于某一阈值的像素划分为边缘像素。这类方法简单易实现,但对于噪声敏感,而且在边缘连接处可能产生断裂或者多余的边缘。925.2图像边缘检测Prewitt边缘检测Prewitt边缘检测是一种常用的图像处理算法,用于检测图像中的边缘。它可以将图像中的像素点分类为边缘点、角点和平滑区域,并且可以自动识别噪声并消除。Prewitt边缘检测算法是基于卷积的方法,使用一个Prewitt卷积核对图像进行卷积运算,从而得到一个新的图像,其像素值表示原图像中每个像素点的边缘强度。Prewitt卷积核通常由两个3x3矩阵组成,分别用来计算像素点在水平和垂直方向上的变化强度。|-101||111|Px=|-101|Py=|-101||-101||-1-1-1|935.2图像边缘检测Sobel边缘检测Sobel算子是一种经典的边缘检测算法,它主要用于图像处理领域中的边缘提取。Sobel算子结合了高斯平滑和微分求导的思想,通过对图像进行卷积运算来计算图像中每个像素点的梯度值,并根据梯度值的大小来判断该像素点是否为边缘。
Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。计算公式为:检测水平边沿横向模板和检测垂直平边沿纵向模板:945.2图像边缘检测Scharr边缘检测Scharr算子与Sobel算子的不同点是在平滑部分,这里所用的平滑算子是1/16*[3,10,3],相比于1/4*[1,2,1],中心元素占的权重更重,这可能是相对于图像这种随机性较强的信号,领域相关性不大,所以邻域平滑应该使用相对较小的标准差的高斯函数,也就是更瘦高的模板。Scharr算子又称为Scharr滤波器,也是计算x或y方向上的图像差分,在OpenCV中主要配合Sobel算子的运算而存在的,下面对比一下Sobel算子和scharr算子的核函数对比:955.2图像边缘检测Canny边缘检测Canny是一种经典的边缘检测算法,旨在检测图像中的边缘和轮廓线。它由JohnF.Canny于1986年提出,并被广泛应用于计算机视觉、图像处理、模式识别等领域。Canny算法的主要思想是利用图像中灰度值的变化来检测边缘。该算法先对原始图像进行高斯滤波以平滑噪声,然后计算图像梯度的幅值和方向。接着,通过非极大值抑制(NMS)算法将梯度幅值进行极大化处理,保留具有最大梯度幅值的像素点。最后,采用双阈值算法(HysteresisThresholding)进行边缘二值化,将灰度值高于高阈值或低于低阈值的像素点标记为边缘或非边缘,同时根据像素点与边缘的连接情况确定是否保留某些非极大值点。965.2图像边缘检测高斯平滑滤波由于Canny算法主要涉及到的数学原理是基于导数(梯度计算),所以边缘检测结果对图像噪声非常敏感,因此需要去除噪声。这一步很简单,类似于LoG算子(LaplacianofGaussian)作高斯模糊一样。因为噪声也集中于高频信号,很容易被识别为伪边缘。应用高斯模糊去除噪声,降低伪边缘的识别。但是由于图像边缘信息也是高频信号,高斯模糊的半径选择很重要,过大的半径很容易让一些弱边缘检测不到。高斯滤波器的公式表示如下所示:975.2图像边缘检测
985.2图像边缘检测非极大值抑制非最大值抑制是一种边缘细化方法。通常得出来的梯度边缘不止一个像素宽,而是多个像素宽。从上面图片的结果可以看到检测到的边缘比较粗,而理想情况下边缘只要有一个精确的点宽度。非最大值抑制能帮助保留局部最大梯度而抑制所有其他梯度值。这意味着只保留了梯度变化中最锐利的位置。算法如下:• 比较当前点的梯度强度和正负梯度方向点的梯度强度。• 如果当前点的梯度强度和同方向的其他点的梯度强度相比较是最大,保留其值。否则抑制,即设为0。比如当前点的方向指向正上方90°方向,那它需要和垂直方向,它的正上方和正下方的像素比较。如下图所示,图图左上角的红色框表示正在处理的梯度强度矩阵的像素。对应的边缘方向由橙色箭头表示,其角度为(-)弧度(+/-180度)。
995.2图像边缘检测双阀值检测一般的边缘检测算法用一个阀值来滤除噪声或颜色变化引起的小的梯度值,而保留大的梯度值。Canny算法应用双阀值,即一个高阀值和一个低阀值来区分边缘像素。如果边缘像素点梯度值大于高阀值,则被认为是强边缘点。如果边缘梯度值小于高阀值,大于低阀值,则标记为弱边缘点。小于低阀值的点则被抑制掉。1005.2图像边缘检测滞后边缘检测滞后边缘检测(HysteresisEdgeDetection)是一种基于阈值的边缘检测技术,也是Canny算法中常用的一种策略。其主要思想是采用双阈值的方法来进一步提高边缘检测的准确性和稳定性。强边缘点可以认为是真的边缘。弱边缘点则可能是真的边缘,也可能是噪声或颜色变化引起的。为得到精确的结果,后者引起的弱边缘点应该去掉。通常认为真实边缘引起的弱边缘点和强边缘点是连通的,而又噪声引起的弱边缘点则不会。所谓的滞后边界跟踪算法,就是检查一个弱边缘点的8连通领域像素,只要有强边缘点存在,那么这个弱边缘点被认为是真是边缘保留下来。如下图所示,左边红框的像素周围没有强边缘点,均是弱边缘点,则直接将该点置为0,右边左下角有一个为强连通点,则保留该点。1015.2图像边缘检测Canny算子实现在OpenCV中,canny()函数原型如下所示:edges=Canny(image,threshold1,threshold2[,edges[,apertureSize[,L2gradient]]])image:表示输入图像(必须是单通道图像)它必须是灰度图像,因此如果需要,应先将其转换为灰度。输入图像应该是一个单通道8位图像。edges:表示输出的边缘图,其大小和类型与输入图像相同threshold1:表示第一个滞后性阈值,它指定Canny算法的低阈值。所有较弱的边缘都会被过滤掉,只有具有更强梯度的边缘才会被保留。 threshold2:表示第二个滞后性阈值,它指定Canny算法的低阈值。所有较弱的边缘都会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年黑龙江省富锦市高三数学下册期末考试模拟检测卷及答案【历年真题】
- 2026年黑龙江省尚志市高三数学下册期末考试模拟检测卷完整附答案
- 2026年黑龙江省海伦市高三数学下册期末考试模拟卷含答案(满分必刷)
- 2026年黑龙江省绥芬河市高三数学下册期末考试模拟试卷(典型题)附答案
- 2026年黑龙江省肇东市高三数学下册期末考试模拟试卷完整答案
- 2026年黑龙江省讷河市高三数学下册期末考试模拟测试卷附完整答案【夺冠】
- 2026年黑龙江省铁力市高三数学下册期末考试模拟测试卷带答案(基础题)
- 保险经纪人从业资格考试保险客户关系管理模拟试卷
- 保险经纪人保险业务管理与风险管理测试题
- 保险法律法规考点题库及模拟试卷
- 药事法规和药学知识培训课件
- 《管理学基础(第3版)》高职全套教学课件
- 安静的力量主题班会课件
- 《2025型钢采购合同》
- 保安大门岗培训
- 石油化工安装工程概算指标说明(2019版)
- 高等职业学校空中乘务专业 实训教学条件建设标准
- 雨季安全案例分享会
- 八年级数学学习探究诊断(上册)
- 《药事管理与法规》课件-项目六 药品生产质量管理
- 三子女协议书离婚协议书(2篇)
评论
0/150
提交评论