首页 > 文章中心 > 计算机视觉教程

计算机视觉教程

开篇:润墨网以专业的文秘视角,为您筛选了八篇计算机视觉教程范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

计算机视觉教程范文第1篇

[关键词]数字图像处理 OpenCV 实验教学 项目教学

[中图分类号] G642.423 [文献标识码] A [文章编号] 2095-3437(2013)09-0042-02

一、引言

目前,大多数高校的数字图像处理课程都是在引入Matlab集成的工具箱及其自带函数的基础上进行实验教学[1]。由于Matlab程序的移植性较差,学生学习完成后不能直接面对实际的软件开发和应用,难以真正提高学生的工程实践动手能力。

为了让学生既能掌握基本理论和技术,又能较容易编写算法的程序,我们在数字图像处理的教学中引入了开源的计算机视觉库OpenCV(Open Source Computer Vision Library)。该软件是以C 函数和C++类的形式实现大量图像处理算法,学生可以方便地利用OpenCV 进行图像处理算法的编程和验证,进而在VC中开发功能更强大的应用程序。相对于Matlab而言,学生不仅可以利用OpenCV 开放的源代码,以函数进行图像处理,而且可以查看算法的代码实现,更好地培养学生的编程能力[2]。

二、OpenCV概述

OpenCV是Intel公司资助的面向广大研究人员和学生的开源计算机视觉库,它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面很多通用算法,同时提供了MatLab等语言的接口,因此极大地方便了图像处理和视频技术的二次开发[3]。

OpenCV主要包含六大模块,其具体功能分别是[3]:(1) CV模块:包含基本的图形处理函数和高级的计算机视觉算法;(2) CVAUX模块:包含辅助的OpenCV函数,一般存放一些被淘汰的算法和函数,同时也包含一些新出现的实验性的算法和函数;(3) CXCORE模块:包含OpenCV的基本数据结构和线性代数支持;(4) HIGHGUI模块包含图像和视频的界面函数;(5) ML模块:包含一些基于统计的分类和聚类工具,模式识别算法和回归分析等;(6) CVCAM模块:负责读取摄像头数据的模块。

利用OpenCV进行程序开发具有以下几个特点[4]:(1) 独立性。OpenCV中大量的函数和类库既可以独立运行,也可以在加入其它外部库的情况下运行;(2) 跨平台性。构成OpenCV的API函数具有跨平台性,不仅能很好的支持各种不同的操作系统,也可以很好地在不同公司的C/C++编译器下工作;(3) 功能强大。OpenCV包含了线性表、树、图等基本数据结构,也包含图像滤波、边缘检测和数字形态学等数字图像处理的基本操作以及一些图像高级处理功能;(4) 高效性。OpenCV的算法都是基于动态数据结构,使用Intel处理器指令集开发的优化代码,运行速度快,处理效率高;(5) 开放性。OpenCV的源代码是开放的,程序设计者可以直接修改它的源代码,也可以将新的函数或类集成到它的库中。

三、数字图像处理的实验设置

实验是理论教学的有效辅助,对于数字图像处理这类实践性很强的课程就更加重要。通过阅读和调试算法源代码、体验算法的处理效果,学生可以加深对基础理论的理解。根据理论教学的重点难点内容,我们设计了相应的实验项目,每个项目都要求学生运用OpenCV和Visual C++编程语言框架来编写数字图像处理基本算法。

项目教学法是针对课程体系结构设计出一系列学习单元项目,项目设计围绕着具有典型性、启发性的关键问题,学生通过参与项目完成的全过程实现对课程内容系统而深入的掌握[5]。项目教学法真正实现了以学生为中心、以教学目标为中心,实现理论方法学习与实践动手能力培养的紧密结合。

本文基于项目教学法的研究,针对“数字图像处理”课程教学体系结构,并结合教学大纲与教学目标要求,同时参考国外大学的相关课程,设置了以下实验项目:

(1) 图像变换。

(2) 图像直方图均衡化。

(3) 频域图像增强。

(4) 图像边缘检测。

(5) 图像分割。

(6) 人脸检测。

通常,学生完成一个项目需要4个过程[6]:(1) 项目原理分析;(2) 项目具体流程设计;(3) 基于OpenCV的软件设计;(4) 结果展示与分析。以上每个阶段都要求学生提交阶段报告,根据学生报告反映出的问题,老师有针对性地进行指导,在解决问题中帮助学生真正掌握所学的知识,并提高动手能力。在项目法教学过程中,我们特别要注意克服项目无法完全覆盖全部知识点的局限,因此,要在项目选择与设计中综合考虑,并结合项目原理研究建立对教学体系框架和全部知识点的整体把握。

四、OpenCV处理图像的应用实例

(一)图像变换

OpenCV提供多个图像变换函数。函数cvWarpAffine利用指定的矩阵对输入图像进行仿射变换,这类变换可以用一个3×3的矩阵来表示,其最后一行为(0, 0, 1)。典型的仿射变换包括平移变换、缩放变换、剪切变换、旋转变换等。此外,函数cvWarpPerspective对图像进行透视变换,函数cvLogPolar将图像从直角坐标映射到极坐标,核心代码如下:

IplImage* dst = cvCreateImage( cvSize(256,256), 8, 3 );

cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), 40 );

图1给出了图像映射到极坐标的结果实例。

(二)图像边缘检测

图像的边缘是图像最基本的特征,是灰度不连续的结果,因而边缘检测是图像处理中的重要问题。OpenCV提供了cvSobel函数、cvLaplace函数和cvCanny等函数进行边缘检测,下面以cvLaplace函数进行举例,其边缘检测的代码为:

IplImage *result_img = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_8U, 1);

cvLaplace (img, result_img);

cvNamedWindow(“Result”, 0);

cvShowImage(“Result”, result_img);

第一句是创建一幅与原始图像img同样大小的通道数为1的图像result_img;第二句是使用Laplace算子对图像进行边缘检测,并将结果存放在result_img中,后面两句是在窗口中显示result_img。程序的处理结果如图2 所示。

五、结束语

OpenCV中的函数几乎能够覆盖到所有的数字图像处理的基本功能,而且其代码又是免费的和开放的。实践证明,通过将OpenCV引入数字图像处理的实验教学中,既能简化图像处理的编程,又能切实地提高学生的实践能力,使学生深入理解图像处理的基础理论和典型算法,获得了良好的实验教学效果。

[ 参 考 文 献 ]

[1] 赵敏.Matlab用于数字图像处理的教学实践研究[J].电脑知识与技术,2012,8(31):75397540.

[2] 李树涛,胡秋伟.OpenCV在“数字图像处理”课程教学中的应用[J].电气电子教学学报,2010,32(6):2628.

[3] 刘瑞祯,于仕琪.OpenCV教程[M].北京:北京航空航天大学出版社,2008.

[4] 方玫.OpenCV技术在数字图像处理中的应用[J].北京教育学院学报(自然科学版),2011,6(1):711.

计算机视觉教程范文第2篇

关键词 柑橘质量;机器视觉;检测;支持向量机

中图分类号TP39 文献标识码A 文章编号 1674-6708(2014)112-0140-02

1系统原理与结构

柑橘自动检测系统分为硬件和软件部分组成。硬件部分包括:光照箱、LED光源、CCD彩色摄像机、图像采集卡、计算机、水果传输系统、PLC等。软件部分包括:Visual Studio 2010、OpenCV等,通过Visual Studio 2010开发上位机平台,OpenCV处理图像[5]。系统对传输带上的柑橘进行图像采集、图像处理、分类分级和分拣操作。CCD摄像机安装在光照箱内,当传输带运动一定距离时,就会通过电感式接近开关触发CCD采集一帧柑橘的图像,然后计算机及其软件系统针对该图像进行处理识别,并将结果发送给PLC,最后通过旋转电磁铁动作分拣柑橘。

2 图像处理与识别

2.1 图像预处理

CCD采集到的柑橘图像以RGB位图的形式储存在PC上,为了方便后续图像处理,备份原图。图像预处理的目的是找到柑橘单果目标,而柑橘和背景的亮度差别很大,这有利于分割目标。首先将彩色图像灰度化,并增强对比度,然后采用大津法将图像二值化,得到带毛边的二值图像,可以利用中值滤波去掉毛刺。接着对二值图像进行边缘检测,采用Canny 算子效果较好。然后通过形态学处理,比如膨胀连通边缘小区域,得到完整的柑橘轮廓。

设为输入图像,是结构元素,用b对函数 f进行膨胀运算,定义为 ⑴

其中 和 分别是 f和 b 的定义域。若结构元素为正,则输出图像变亮,暗的细节被消除或者减少。

最后利用轮廓搜索算法找到柑橘的外部轮廓。保留轮廓区域内的彩色图像,而将轮廓区域外的区域填充为白色,也就得到了柑橘的单果图像。

2.2 图像分割

通过观察水果彩色图像可知,水果缺陷处的颜色一般较深,与果皮正常颜色反差较大。由于HIS色彩空间用色调H、饱和度S和亮度I来描述色彩信息,更符合人类的视觉特性,所以这里将其中一幅RGB位图转换为HIS位图,使用如下公式进行转换。

(2)

(3)

(4)

(5)

重点分析亮度分量I的图像,将其灰度图二值化,得到了了带有缺陷纹理和柑橘边缘的黑白图像,为了去掉边缘,将该黑白图像与柑橘轮廓图像求和,得到了只剩黑色缺陷区域的二值图像。保留缺陷区域内的彩色图像,而将缺陷区域外的区域填充为白色,分别为腐烂、干疤(褐斑)、日灼和网纹。

2.3 特征提取

为了后续的柑橘损伤识别工作,要对损伤图像提取特征值。彩色图像常用的特征一般包括:颜色特征、纹理特征、形状特征和空间关系特征。这里不涉及对空间关系的研究,只考虑前三种图像特征信息。

1)颜色特征

通过提取颜色和灰度特征,如缺陷位置颜色平均值 R、G、B、H、S、I ,以及灰度平均值 Gray 等都可以获得。

2)纹理特征

描述纹理的名词有平滑、粗糙、精细、粒度、规律性和方向性等,但将这些描述转变为数学模型比较困难,因此这里运用了统计方法中的灰度共生矩阵,提取图像纹理的4个主要特征,即缺陷能量、清晰度、熵值、相关性等。

3)几何特征

与水果分级相关的几何特征主要有缺陷种类、缺陷数目、缺陷面积、水果面积以及缺陷面积与果表面积的比例等。

2.4 图像识别

支持向量机(SVM)是目前较理想的学习分类算法,广泛应用于统计分类、图像识别、生物信息学等领域。相比其他的分类算法,SVM具有很多优点,比如不需要庞大的学习样本,训练收敛速度快,具有较强的逼近能力和泛化能力。SVM通过核函数将特征向量映射到高维空间,将线性不可分问题转换为线性可分问题,最终构建了一个最优超平面分离正负样本,解决了二分类问题。使用最优判别函数来判断向量所对应的类别,定义为

(6)

(7)

其中,表示内积函数,是线性函数的常数项,是超平面的法向量,和分别是两个类中的“支持向量”。符号函数括号里大于0时取1,小于0取-1,所以的取值要么是 1 ,要么是 -1,分别对应两种类别。

为了识别柑橘的4类基本损伤,即腐烂、干疤、日灼和网纹,需要6()个二类SVM来实现。另外特征的选择要综合考虑完备性和冗余性,使识别的效果和效率达到均衡。因此这里选用6个特征组成特征向量={色调H,饱和度S,亮度I,缺陷能量,清晰度,熵值},作为SVM的输入特征向量,该向量在通过6个二分类SVM分类器后产生了6个输出结果。把输出结果表示为向量,并且和识别模板矩阵中的各行相比较,如果一致表示该特征向量属于对应行的损伤类别。矩阵如表1所示,其中A/B表示A类和B类的判别情况,数值为1时判为A类,为-1时判为B类,为0时判为其它类。

损伤类别 腐烂/干疤 腐烂/日灼 腐烂/网纹 干疤/日灼 干疤/网纹 日灼/网纹

腐烂

干疤

日灼

网纹 1

-1

0 1

-1

0 1

-1 0

1

-1

0 0

1

-1 0

1

-1

表1 识别模板矩阵

3 实验与结果

3.1 分类实验

针对4类缺陷,每类给出10个训练样本,共40个训练样本组成训练集,用来训练SVM分类器。另外提供120个测试样本(每类30个)进行测试,得到测试结果如表2所示。

损伤类别 腐烂 干疤 日灼 网纹 准确率/%

腐烂 29 0 1 0 97.7

干疤 0 28 0 2 93.3

日灼 2 0 28 1 93.3

网纹 0 0 1 29 97.7

合计 95

表2 柑橘损伤识别结果

柑橘120个测试样本中有114个判断为正确,总体识别率为95%,满足规定的应用要求。相比较BP神经网络等其他识别算法,SVM不仅有较高的识别率,而且训练和识别时间较短,实验结果比较理想。但是,本课题识别的缺陷种类较少,可以尝试添加其他常见缺陷,扩充识别的范围。由此带来了新的问题,即缺陷特征的选择也要随之改变。所以在以后的实验中,还可以尝试新的缺陷特征,提高区分度,最终提高缺陷种类的识别率。

3.2 分级实验

柑橘的等级可以划分为优等果、一等果、二等果和等外果。分级的参考依据有缺陷种类、数目、直径、面积以及缺陷面积与果表面积的比例。根据识别的结果和几何特征提取的参数,参照柑橘的等级对照表,通过上位机软件编程实现柑橘的分级,并通过下位机系统和旋转电磁铁动作进行分拣。

4 结论

搭建了柑橘表面图像的采集平台,针对腐烂、干疤、日灼、网纹四种损伤的识别,进行包括图像增强、彩色空间转换、形态学处理等预处理措施,得到单果图像。然后利用缺陷处较果皮正常颜色反差大的特点,进行图像分割,得到缺陷图像。接着提取缺陷处的颜色特征和纹理特征,组成识别的特征向量。最后,设计了6个二类SVM分类器,实现了柑橘的表面损伤识别。此外,根据识别结果和几何特征参数,成功地实现了柑橘的分级。

参考文献

[1]应义斌,黄永林.用于水果实时分级系统的同步跟踪自动控制装置[J].农业工程学报,2002,18(4):163-168.

[2]林开颜,吴军辉.基于计算机视觉的水果分级技术研究进展[J].微型机与应用.2009,28(10):1-4.

[3]王水平,唐振民.基于SVM的水果分类算法研究[J].武汉理工大学学报.2010,32(16):44-47.

[4]刘禾.计算机视觉在水果自动分级中的应用研究[D]:[博士学位论文].北京:北京农业工程大学,1995.

计算机视觉教程范文第3篇

【关键词】3D MAX;虚拟;建模;运用;自控元件

0 引言

三维模型获取是计算机图形学和计算机视觉领域的一个基本研究问题。然而,利用建模软件(比如3D MAX和Maya等)手工进行三维模型构建是一项十分繁琐和代价昂贵的工作。因此,研究如何从现实世界直接和快速地获取三维模型,成为该领域的热点研究问题。目前,现实物体的三维结构获取作为一种数字存储和记录技术,在物体建模、场景建模、真实感绘制、机器人导航、目标识别和三维测量等科学和工程领域以及考古学、广告、娱乐等其他文化领域有广泛的应用需求。

1 研究现状

客观世界在空间上是三维的,而现有的图像采集装置所获取的图像是二维的。尽管图像中含有某些形式的三维空间信息,但要真正在计算机中使用这些信息进行进一步的应用处理,就必须采用三维重建技术从二维图像中合理地提取并表达这些三维信息。三维重建技术能够从二维图像出发构造具有真实感的三维图形,为进一步的场景变化和组合运算奠定基础,从而促进图像和三维图形技术在航天、造船、司法、考古、工业测量、电子商务等领域的广泛深入的应用。

1.1 三维信息的获取

三维信息获取的技术手段多种多样,通常,人们获取物体三维模型的方式有三种:第一种方式利用建模软件构造三维模型;第二种方式通过仪器设备获取三维模型;第三种方式利用图像或者视频来重建场景的三维模型。

图像是二维数据,但是在关于某一场景或物体的一幅或者多幅图像中可以找到许多线索,从中人们能够推知图像所记录的场景或物体的几何信息。这些线索包括物体边与边之间的几何关系、两幅图像的视差关系、两幅图像征点的对应关系以及物体轮廓信息等等。这些线索是场景中物体所具有的,称为“被动线索”。有时候根据需要还可以创造线索,如在物体表面上用光线打上条纹或者制造出阴影,这样的人造线索称为“主动线索”。

对于使用主动线索的方法而言,又可以分为以下两类。第一类利用场景中已知形状的物体或者某些简单几何元素之间的关系进行建模。第二类使用物体的轮廓信息,物体在图像上的轮廓是理解物体几何形状的一个重要线索。

对于以上所述可以用图1来表示。

1.2 3D MAX 软件

3D是three-dimensional的缩写,就是三维图形。在计算机里显示3D图形,就是说在平面里显示三维图形。不像现实世界里,真实的三维空间,有真实的距离空间。人眼有一个特性就是近大远小,就会形成立体感。计算机屏幕是平面二维的,我们之所以能欣赏到真如实物般的三维图像,是因为显示在计算机屏幕上时色彩灰度的不同而使人眼产生视觉上的错觉,而将二维的计算机屏幕感知为三维图像。基于色彩学的有关知识,三维物体边缘的凸出部分一般显高亮度色,而凹下去的部分由于受光线的遮挡而显暗色。这一认识被广泛应用于网页或其他应用中对按钮、3d线条的绘制。

2 三维场景的制作

三维场景的制作主要分8个步骤:

(1)方案分析:按照设计草图确定各部分的尺寸、材料、样式以及方案的风格、色调,还要准备一些照片或图片为参考。方案分析时还要确定建模的顺序和方法、灯光布置的初步方案,并确定哪些需要在3DMAX完成,哪些需要在photoshop中调整及合成。

(2)创建框架:这一步是为确定视角做准备,模型应该尽量精简,但各部分的距离和比例关系应该准确。

(3)建立摄像机:首先要确定摄像机的视角,视角应突出空间的特点,位置和方向应尽量开阔。

(4)精确建模:建模应在摄像机的视野范围内做,看不到的部分不用建模。模型的复杂程度应在满足效果的情况下,越简单越好,模型过于复杂,在展示效果图中看不出差别,白白增加了建模和修改的时间以及电脑渲染的时间。

(5)编辑材质和贴图:在3DMAX中材质与贴图的建立和编辑都是通过材质编辑器来完成的。并且通过最后的渲染把它们表现出来,使物体表面显示出不同的质地,色彩和纹理,材质在三维模型创建过程中是至关重要的一环。

(6)设置灯光:打灯光时应尽量参考类似空间的照片或图片的灯光效果,而不要凭空想象。用3DS MAX里的灯光模拟出真实光线的效果,并要考虑画面的艺术效果。

(7)渲染输出:确定渲染输入的尺寸大小,该大小将决定图像的用途以及清晰程度。

(8)后期处理:渲染合成展示效果图并在photoshop中修改亮度、对比度以及细腻的光影变化,还要加上人物、植物、小饰品等配景。这些部分在photoshop中做既省事又出效果。增加配景时又要注意,样式、颜色和风格应与整个空间协调统一,还要考虑画面的构图。

三维场景的制作步骤如图2所示。

3 案例分析

本次建模样本位于山东省煤田地质局物探测量队(山东中煤物探测量总公司),地址:山东省泰安市泰山大街西段,此次我要做的内容是办公大楼的三维立体建模。

3.1 基本框架的建立

首先修改系统单位,以方便数据之间的转换,将办公大楼的CAD底图导入3DMAX中,根据平面图的二维样条线生成三维模型,用挤出或切片的方法先建立出办公楼的基本框架。基本框架如图3所示:

在办公楼的粗模建立起来以后,要用之前对模型各个角度拍摄之后的照片,对这些照片用photoshop进行分析处理编辑,切出关键部位,对模型进行材质的粘贴,需要注意的是这些图片的大小必须都为2的幂次方,部分所需贴图如图4所示。

粘贴材质之后的效果渲染图如图5所示。

3.3 灯光的设定

在灯光布置阶段,只需按照实际灯光的位置和类型进行布置即可,架设上灯光之后的四个视图如图6所示:

3.4 后期处理

用Light scape进行渲染,首先是灯光的定义,包括日光的窗口定义和日光的强度等,然后调整各个材质的参数,准确定义物体的物理属性,再进行光能分析计算,再进行各项参数的仔细调整,最后渲染输出,调整图像的亮度、颜色、饱和度、对比度,修补渲染中留下的缺陷,加入室外的配景,最后完成作品,经过渲染调色之后的图片如图7所示。

【参考文献】

[1]赵一鸣,吴署曼,潘志庚.网上3D虚拟商场的设计与实现[J].系统仿真学报,2003.

[2]崔明.基于图像序列的三维模型重建[J].系统仿真学报,2005.

[3]王莉莉,刘嵘.基于图像的几何三维重建方法[J].系统仿真学报,2001,(13).

[4]高靖斌,赖远征.Auto CAD2005建筑图形设计实例教程[M].清华大学出版社,2005.

[5]孙启善,胡爱玉,王玉梅.3D MAX/Vray1.5效果图制作完全自学手册[M].北京希望电子出版社,2009.

计算机视觉教程范文第4篇

Li Yurong

①Kunming University of Science and Technology Faculty of Mechanical and Electrical Engineering,Kunming 650000,China;

②Yunnan Vocational College of Mechanical and Electrical Technology,Kunming 650203,China)

摘要:现代先进制造技术的发展,将实物的样件或模型转化为CAD数据模型,在利用快速成型系统、计算机辅助设计系统等对其进行数据处理,并不断的进行修改和优化设计这就是逆向工程技术。逆向工程实现了从实际物体到几何建模的直接转换。逆向工程技术涉及计算机图形学、计算机图像处理、微分几何、概率统计等学科。

Abstract: Modern advanced manufacturing technology converts sample or model into CAD data model, then rapid prototyping systems and computer-aided design systems conduct its data processing, and continue to modify and optimize the design, it is the reverse engineering. Reverse engineering achieves the direct conversion from object to geometric modeling. Reverse engineering techniques related to computer graphics, computer image processing, differential geometry, probability and statistics etc.

关键词:逆向工程 数据处理 应用

Key words: reverse engineering;data processing;application

中图分类号:TP39 文献标识码:A文章编号:1006-4311(2011)21-0043-01

1逆向工程技术定义

逆向工程也称反求法、反求工程。逆向工程技术与传统的产品正向设计方法不同。它是根据已存在的产品或零件原型构造产品或零件的工程设计模型,在此基础上对已有产品进行CAD重建,在根据需求进行设计和改进,是对已有产品设计的再设计和改进。逆向工程的主要任务是将原始物理模型转化为工程设计概念或产品数字化模型。实物或样件三维测量数据三维产品数模产品的一体化开发。设计中充分利用CAD/CAE/CAM技术对已有的产品进行设计服务。

2逆向工程测量系统

根据测量时测量头是否和零件接触,可按其测量方式分两大类。

2.1接触式测量:故名思议,测量时测量针头测量时和零件接触取得数据。根据使用的测头不同。又可分为触发式和连续式。接触式应用最为广泛的是三座标测量机。它是20世纪6o年展起来的新型高效精密测量仪器,是有很强柔性的大型测量设备。

2.2非接触式测量:根据测量原理的不同,可分为三角形法、激光干涉法、激光衍射法、结构光法、计算机视觉法、超声波法和层析法、CT测量法、MRI测量法等。

3逆向工程技术流程

3.1数据采集:逆向工程是以一个物理零件或模型作为开始,进而决定下游工程。通常采用三坐标测量机、激光三维扫描、结构光测量等装置来获取样件的三维数据点。

3.2数据处理:包括点云处理、曲线处理、曲面处理、误差分析①点处理过程:主要包括多视点云的拼合、点云过滤、数据精简和点云分块等。②曲线处理过程:根据所要创建的曲线类型,曲线可以设计得与点的片段相同,让曲线更光滑;也可由已存在的点创建出曲面;检查和修改曲线,检查曲线与点或其它曲线的精确度、平滑度与连续的相关性在进行设计修改。③曲面处理过程:根据所要创建的曲面类型,可以选择创建的曲面以精确为主或以光滑为主,或两者居中;也可由点云或曲线创建曲面;检查和修改曲面,检查曲丽与点或其它曲面或特征的精确度、平滑度与连续的相关性再进行设计修改。④误差分析:被测物对机构引起的综合轨迹误差、逆向工程设计所依据的数据值存在的测量误差、设计中的被测物存在的加工误差、设计中的曲线拟合存在的拟合误差等方面的综合分析。

4逆向工程技术的常用软件

目前,比较著名的逆向工程软件如下:①Imageware(美国EDS公司),广泛应用于汽车、航空、航天、家电、模具。具有强大的点云处理和NURBS曲面重构功能。②Geomagic(美国RainDrop公司),主要用于玩具、工艺品等领域。具有丰富的数据处理手段,可以根据测量数据快速构造出多张连续的曲面模型。③CopyCAD(英国DELCAM公司系列产品),主要处理测量数据的曲面造型。DELCAM的产品涵盖了从设计到制造、检测的全过程。④RapidForm(韩国INUS公司开发)逆向工程软件,主要用于处理测量、扫描数据的曲面建模以及基于CT数据的医疗图像建模。还可完成艺术品的测量建模以及高级图形生成。以上介绍的是常见逆向工程软件,均是国外的。国内在逆向工程软件方面的研究.主要集中在高等学校(如西安交通大学JDRE、浙江大学RE-SOFT、西北工业大学NPUSRMS),但是由于系统稳定性、可操作性等原因,这些研究性软件还没具备与国外商业化软件竞争的条件。

5逆向工程技术的应用领域

①模具设计制造方面:现代制造的大量模具都是由三维曲面构成,常常需要通过多次反复修改原始的模具型面,已得到所需的模具。然而曲面的改变却未反应在原始的CAD模具上,只要借助逆向工程的反求功能,可以时时的修正在制造过程中变更过的设计模型,从而得到新的完整的CAD模型。

②用于难于用基本几何元素来表达与定义的复杂曲面:如流线型的产品、工艺品以及不规则的线条组成的构件等,在精度、完整度等方面都很难以保证,利用逆向工程则可以加快设计速度并达到很好的精度。

③没有图纸或者图纸不全,没有CAD模型不能生产情况下:采用零件原件利用逆向工程进行点云测量,在形成零件设计图纸和三维CAD模型。并以此为依据利用CAM软件生成数控NC代码,复制生产一个相同的零件。

④设计的零件要通过实验验证的:首先在实体模型的基础上缩小比例经过各种实验性能测试,逐步修改实体模型。最终的实验模型借助逆向工程就可以将其转化为三维CAD模型。

⑤快速检验零件制造精度:通过逆向工程三维扫描技术建立零件模型和设计者设计的CAD模型比较。可以检测零件的制造精度。找出设计的不足,使产品不断完善。

在以上几个领域,逆向工程都不可或缺。其中复杂曲面产品的研发设计的发展最为突出。现在依托高精度三维数字扫描系统的逆向工程,结合CAD/CAM/CAPP/RP(快速成型)是当前产品设计研发的全新技术之一。涵盖的产业有:汽车摩托业、电子通讯业、玩具业、模具业、家电业、运动器材业、五金业等。制造的产品有:汽车模具外盖件、手机外壳、电器外型、耳机、玩具、文化用品等。这些逆向工程技术都大大的节省了产品开发的时间和成本。

参考文献:

[l]姜元庆,刘佩军.UG/Imageware逆向工程培训教程[M].北京:清华大学出版社,2003.

计算机视觉教程范文第5篇

关键词:嵌入式;GPIO;字符设备驱动

中图分类号:TP311

嵌入式系统的定义为:以应用为中心、以计算机技术为基础、软硬件可裁剪、适用于应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它的主要特点是嵌入、专用。含有嵌入式系统的设备称为嵌入式设备,这在生活中随处可见:遥控器、MP3播放器、手机等,随着技术的发展及人们需求的增加,各类产品的功能越来越强大,当系统越来越大、应用越来越多,使用操作系统可以统一管理系统资源、为用户提供访问硬件的接口、调度多个应用程序、管理文件系统等。由于Linux开放源代码、易于移植、资源丰富、免费等优点,使得它在嵌入式领域应用的非常广泛。

本文通过基于mini2440开发板平台,采用模块加载驱动的方式,对GPIO接口的LED字符设备进行操作和控制,通过详细研究字符设备驱动的结构,从而对嵌入式Linux设备驱动的开发流程有了深层次理解。

1 Linux设备驱动程序

任何计算机系统的运行都是系统中软硬件相辅相成的结果,没有硬件的软件是空中楼阁,而没有软件的硬件则只是一堆的电子元器件而已。硬件是底层基础,是所有软件得以运行的平台,软件则是具体应用的实现,根据不同的业务需求而设计。

设备驱动程序为应用程序屏蔽了硬件的细节,在应用程序看来,硬件设备只是一个设备文件,应用程序可以像普通文件一样对硬件设备进行操作。在嵌入式Linux操作系统下有3类主要的设备文件类型:字符设备、块设备和网络设备。

字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标等。字符设备是一种可以当做一个字节流来存取的设备,字符驱动就负责实现这种行为。

块设备是可以用任意顺序访问,以块为单位进行操作,如硬盘、软驱等。

网络设备是面向数据包的接收和发送而设计的,它与字符设备、块设备不同,并不对应于文件系统中的节点。

从图1中可以看到,设备驱动变成了连接硬件和内核的桥梁,操作系统的存在使得单一的“驱动硬件设备工作”变为操作系统与硬件交互的模块。

图1 硬件、驱动、操作系统和应用程序的关系

Linux内核中采用可加载的模块化设计,一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其他代码可以选择是在内核中,或者编译为内核的模块文件。Linux驱动的加载可分为静态加载和动态加载两种不同的方式。

静态加载:系统启动时自动的加载驱动到内核,自动地注册设备并创建设备节点,也就是说把驱动程序直接编译到内核,系统启动后应用程序可以直接运行、调用。静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译下载内核,效率较低。

动态加载:即模块加载,系统启动时不会进行加载驱动程序,需要人为手动加载,就是说系统启动后我们的应用程序不能直接应用驱动,而是必须手动地用insmod命令去加载模块,然后才能使用相应的设备和应用,在不需要的时候用rmmod命令来卸载。

2 GPIO驱动程序的结构

GPIO(GeneralPurposeI/OPorts)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态—是高电平还是低电平。Min2440开发板采用的S3C2440有130个I/O端口,可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。GPxCON用于选择引脚功能,GPxDAT用于读/写引脚数据,GPxUP用于确定是否使用内部上拉电阻,x为组号A、B、…、J。这里通过一个GPIO控制LED的例子来说明字符驱动程序的一般结构:

//****************头文件*********************

#include

#include

……

volatileunsignedlong*gpbcon=NULL;

volatileunsignedlong*gpbdat=NULL;

//**************文件操作接口函数定义******************

staticintgpio_led_open(structinode*inode,structfile*file)

{//打开设备操作

*gpbcon&=~((0x3

*gpbcon|=((0x1

return0;

}

staticssize_tgpio_led_write(structfile*file,constchar__user*buf,size_tcount,loff_t*ppos)

{//写设备操作

intval;

copy_from_user(&val,buf,count);//实现用户空间数据到内核空间的拷贝

if(val==1)

{

*gpbdat&=~((1

}

else

{

*gpbdat|=(1

}

return0;

}

//******************文件操作结构体********************

staticstructfile_operationsgpio_led_fops=

{

.owner=THIS_MODULE,

.open=gpio_led_open,

.write=gpio_led_write,

};

//***************设备驱动模块加载函数*******************

intgpio_led_init(void)

{

gpbcon=(volatileunsignedlong*)ioremap(0x56000010,16);//映射物理地址,将寄存器的//物理地址映射到内核统一的地址空间中,实现对物理地址的间接调用

gpbdat=gpbcon+1;

register_chrdev(123,"gpio_led",&gpio_led_fops);//注册设备,告诉内核

return0;

}

//*************设备驱动模块卸载函数*************

voidgpio_led_exit(void)

{

unregister_chrdev(123,"gpio_led"); //注销设备

iounmap(gpbcon);

}

module_init(gpio_led_init);

module_exit(gpio_led_exit);

MODULE_LICENSE("GPL");//设备许可

下面对驱动程序中的一些主要函数进行说明:

2.1 入口函数

intgpio_led_init(void),它是设备驱动程序的一个入口函数,它在内核启动时被调用。它在启动的时候注册字符设备驱动。用户进程是通过设备文件同硬件打交道,对设备文件的操作就是一些系统调用,如open、read、write、close等,但是如何把这些系统调用和设备驱动程序关联起来?这就是通过file_operations结构来实现的。

2.2 File_operations结构体

这些系统调用和设备驱动程序通过数据结构file_operations关联起来。上面的示例中,应用程序使用open函数打开led设备时,设备驱动程序的file_operations结构中的open成员就被调用;当应用程序使用read、write等函数读写设备时,驱动程序的file_operations结构中的相应成员(read、write等)就会被调用。从这个角度来说,编写字符设备驱动程序就是为具体硬件的file_operations结构编写各个函数。

2.3 注册函数

当应用程序通过open、write等系统调用访问某个设备文件时,Linux系统怎么知道去调用哪个驱动程序的file_operations结构中的open、write等成员呢?每个设备都有一个主设备号和次设备号来和其他设备区分开,在上面的入口函数intgpio_led_init(void)中,会将驱动程序的file_operations结构连同其主设备号一起向内核进行注册。对于字符设备使用以下函数进行注册:

intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);

有了这个函数,在应用程序操作设备文件时,Linux系统就会根据设备类型和主设备号找到在内核中注册的file_operations结构,进行相应操作。

2.4 注销函数

注销函数是和注册函数相对应的,当调用注销函数的时候,系统将注销对应的设备,并释放主设备号,这是通过下面函数实现的:

intunregister_chrdev(unsignedintmajor,constchar*name),它的参数有主设备号和设备名。

3 测试GPIO驱动程序模块

这里选用mini2440开发板作为目标板,它采用S3C2440微处理器,该处理器由Samsung半导体公司推出,是一款高性能、低功耗、高集成度的微处理器。将上面的驱动程序编译好之后,下载到开发板上,使用命令insmodgpioled.ko如图2所示,将该驱动程序加载到内核。接着再创建设备节点mknod/dev/gpioledc1230,如图2所示,然后再执行应用程序,应用程序不同的命令,对应着开发板led相应的灭或者亮。至此,一个驱动程序开发的整个流程结束。

图2 驱动模块加载

4 结论

通过对于GPIO的LED驱动程序的编写,经过mini2440开发板的测试,可以看到字符设备驱动程序的一般结构,了解了应用程序、驱动程序和硬件设备之间的调用关系,对于嵌入式Linux的系统开发有一定的启示作用。

参考文献:

[1]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

[2]徐成.嵌入式Linux系统实训教程[M].北京:人民邮电出版社,2010.

[3]鸟哥.鸟哥的Linux私房菜[M].北京:人民邮电出版社,2010.

[4]何泉,贺玉梅.嵌入式Linux下GPIO驱动程序的开发及应用[J].仪器仪表学报,2007,4:271-273.

[5]李涛,胡荣强,张亦敏.嵌入式Linux中GPIO驱动程序开发[J].仪表技术2009,6:12-14.

基金资助:陕西省教育厅专项科研计划项目(2010JK592)