ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:408.25KB ,
资源ID:7116134      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7116134.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(XY伺服电机数字控制实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

XY伺服电机数字控制实验报告.docx

1、XY 伺服电机数字控制实验报告伺服电机数字控制实验报告 目 录 摘 要 3 第 1章 设计目的及需要完成的指标 4 1.1 设计目的 4 1.2 需要完成的指标 4 第 2章 整体思路 5 第 3章 设计依据 6 3.1 电机驱动使能及驱动 6 3.1.1 运动控制卡的初始化 6 3.1.2 对专用输入信号参数进行设置 6 3.1.3 运动控制轴的初始化 6 3.2 单轴运动 6 3.3 多轴运动 8 第 4章 各部分功能的实现 9 4.1 初始化及轴的回零 9 4.1.1 卡和轴的初始化 9 4.1.2 XY轴的回零 9 4.2 点动控制 11 4.2.1 点动控制操作界面 11 4.2.2

2、 点动控制功能的实现 11 4.3 直线插补 12 4.3.1 直线插补基本算法 12 4.3.2 直线插补程序框图 13 4.3.3 直线插补功能实现 13 4.3.3 运行效果 14 4.4 圆弧插补 14 4.4.1 圆弧插补的基本算法 14 4.4.2 圆弧插补流程图 16 4.4.3 圆弧插补功能的实现 17 4.4.4 运行效果 17 4.5 椭圆插补 17 4.5.1 椭圆插补的基本算法 17 4.5.2椭圆插补流程图 18 4.5.3 椭圆插补功能的实现 19 4.5.4 运行效果 19 4.6 图形绘制 20 4.6.1 图像二值化 20 4.6.2 轮廓提取 21 4.6.

3、3 数据处理及图形加工 21 4.6.4 运行效果 21 第 5章 遇到的问题及解决办法 23 5.1 程序语言的选择 23 5.2 圆弧插补失真 23 5.3 低灰度图片二值化失败问题 23 5.4 图形绘制问题 23 第 6章 附加功能 25 6.1 超界判断 25 6.2 二值化图片信息显示 25 6.3 阈值和比例 25 第 7章 个人总结 26 附录 1 课程设计日志 27 附录 2 绘图效果 28 摘摘 要要 本次机电系统综合设计要求通过计算机高级编程语言实现对伺服电机的运 动控制来进行控制,以达到对机电一体化知识的巩固提高及综合运用。本报告详细讲述了阐述了 GT 系统运动控制器的

4、控制原理,数控技术中逐点比较法的直线插补、圆弧插补、椭圆插补等原理,图像二值化原理,图形轮廓提取四邻域法原理,以及这些原理在本次机电系统综合设计中的具体应用。本小组借助 VB语言进行编程,通过设计工作界面,编写程序,借助 GT系统运动控制器对电动机进行控制,实现其相应的功能。详细介绍了本小组制作伺服电机控制系统的界面和原理,让读者能够在一定程度上了解数控技术,使实验操作者能够更直观的了解图像处理技术以及其它方面的相关内容。关键字:GT系统运动控制器;插补;二值化;轮廓提取 第 1章 设计目的及需要完成的指标 1.1 设计目的设计目的 本次机电系统综合设计要求以 GT 系列运动控制器为核心,以计

5、算机语言(VB、VC 等)为控制手段,通过计算机与运动控制器相互通信,对其进行运动的初始化,运动过程的控制来实现运动控制器两轴和笔架的运动,根据数控技术的差不算法绘制简单的几何图形如:直线,圆,椭圆等,以及绘制通过计算机程序图形识别、轮廓识别处理后的图形。1.2 需要完成的指标需要完成的指标 利用 GT 系列运动控制器和 GXY 系列运动平台,在 windows 下用 VB 语言实现平面 XY 的数字加工控制。基本要求如下:1、编写 GT 系列运动控制器和 GXY 系列运动平台的初始化程序,通过初始化程序可实现系统的复位;2、编写回零程序,实现轴的回零操作。、编写平面 X、Y 的驱动程序以控制

6、 X、Y 方向的运动;、编写插补算法以实现平面四象限的直线,顺、逆圆,顺、逆椭圆,以及圆弧和椭圆弧简单的几何图形绘制;、编写控制程序以实现任意图象的轮廓提取,并对提取的轮廓数据进行处理,将轮廓数据转化为对两维伺服数据控制机床的驱动代码,利用伺服驱动函数库实现在该设备上的轮廓加工。、实现以上加工图形的绘制时必须在图形绘制中实现抬笔落笔的控制和超界判断。第第 2 章章 整体思路整体思路 本次机电系统综合设计,通过计算机高级语言 VB实现对运动控制器运动参 数,运动方式的控制。GT运动控制器提供了 DOS 下的运动函数库和 Windows 下的运动函数动态连接库,本小组使用的是 Windows 下的

7、运动函数动态连接库,只要调用运动函数库中的函数,就可以实现运动控制器的各种功能。在 Windows 系统下使用VB中函数库,只需将设备提供的 GTDeclarPCI.bas 以模块的形式添加方到用户工程中,GT运动控制器提供的 Windows 下的运动函数动态连接库就可以直接调用。各主要功能的实现:通过编程,依据程序语言对运动器进行控制,运动器对电机进行控制,实现轴的联动,最终实现图形的绘制。其中最主要的是对插补程序的构思和编写。第第 3 章章 设计依据设计依据 按照本次机电系统综合设计的要求,本小组利用 VB6.0 的可视化编程,实现对运动控制器的控制,使运动控制按照 VB 程序进行单轴运动

8、、多轴协调运动、简单几何图形插补运算绘制、复杂图形绘制等等。3.1 电机驱动使能及驱动电机驱动使能及驱动 在实现 GT 运动控制器的运动之前,需对其运动控制卡、运动控制轴、运动控制器、专用输入信号参数设置进行初始化,初始化之后才可以实现运动控制器简单的单轴运动,多轴协动。3.1.1 运动控制卡的初始化运动控制卡的初始化 在运动控制器初始化中需先打开运动控制器设备,复位运动控制器,设置控制周期并对每一轴进行中断屏蔽。GT 运动控制器库函数中提供的运动控制器初始化函数中 GT_Open()用于打开运动控制器设备,GT_Reset()用于复位运动控制器,GT_SetSmplTm()用于设置控制周期,

9、rtn=GT_SetIntrMsk()屏蔽轴中断。其中,运动控制器以特定的控制周期刷新控制输出,单位是微秒。运动控制器再控制周期内要完成必要的计算,控制周期不能太小,因此设定的范围为 481966.08 微秒。运动控制器默认的控制周期为 200 微秒,一般不应小于这个值。在本次设计中,始终采用 200 毫秒的控制周期。3.1.2 对专用输入信号参数进行设置对专用输入信号参数进行设置 对专用输入信号参数进行设置即设置限位开关有效电平。运动控制器通过两个(正向、负向)限位开关自动地设定控制轴的运动范围。一旦限位开关被触发,运动控制器自动地禁止控制轴朝越限的方向运动。运动控制器默认的限位开关为 常闭

10、开关。即正常工作时,限位开关信号为低电平;限位开关触发时,限位开 为高电平。在此用到了函数库中的 GT_LmtSns(LmtSense)来对限位开关有效电平进行设置。3.1.3 运动控制轴的初始化运动控制轴的初始化 对运动控制轴的初始化则需要用 GT_ClrSts()函数清除当前轴不正确状态,用 GT_StepPulse()函数设置输出正负脉冲信号,用 GT_AxisOn()函数开启当前轴的驱动使能 3.2 单轴运动单轴运动 在运动的初始化完成以后,便可以通过调用库函数的单轴运动命令来实现运控器的单轴运动。运控器针对单轴运动提供了四种运控模式:S-曲线模式、梯形曲线模式、速 度控制模式、电子齿

11、轮模式。在本次课程设计中会使用 S-曲线模式和梯形曲线 模式。梯形曲线模式的速度曲线如图所示:图 3.1、S-曲线模式的速度、加速度,加加速度曲线 用 GT_PrflS()函数设置当前轴的运动模式为 S-曲线模式,其它必需函数以及函数功能如下:GT_SetJerk()设置当前轴的加加速度 GT_SetMAcc()设置当前轴的最大加速度 GT_SetVel()设置当前轴的目标速度 GT_SetPos()设置当前轴的目标位置 编程中,调用库函数中 GT_PrflT()函数可以实现梯形曲线运动模式,另外 需进行相应的参数设置:GT_SetAcc()设置当前轴的加速度 GT_SetVel()设置当前轴

12、的最大速度 GT_SetPos()设置当前轴的目标位置 这里,加速度的单位是 Pulse/ST,速度单位是 Pulse/ST,目标位置单位是 Pulse,Pulse 是脉冲数。其换算关系为:平台向前运动 10000Pulse 相当于运动 4mm。在对单轴的这些运动模式设置好后,使用 GT-Update()对参数进行刷新后便可使单轴按照所定参数进行运动了。3.3 多轴运动多轴运动 运动控制器可以实现两种轨迹的双轴协调运动:直线插补、圆弧插补。在双轴协动之前,需对坐标进行映射,以实现坐标系与轴的对应,实现轴的坐标化。通过调用 GT_MapAxis()命令可以将在坐标系内描述的运动通过映射关系映射到

13、相应的轴上。从而建立各轴的运动和要求的运动轨迹之间的运动学传递关系。运动控制器根据坐标映射关系,控制各轴运动,实现要求的运动轨迹。调用 GT_MapAxis()命令时,所映射的各轴必须处于静止状态。这种映射关系能够简 单地描述成下面的计算公式:Axis _ N=Cx x+Cy y+Cz z+Ca a+C(3.1)合成速度:(3.2)合成加速度:(3.3)在 GT 运动控制函数库中可以通过调用 GT_SetSynVel(double Vel)来设置轨迹段的合成运动速度,调用 GT_SetSynAcc(double Accel)来设置坐标系运动中轨迹段的合成加速度。双轴映射和运动参数的设置是双轴联

14、动的基础。GT 运动控制器提供了两种多轴联动的方式即多维直线插补运动和多平面圆弧插补运动。本次课程设计的共同运动控制器限于两轴,因而直线插补仅为两维直线插补,圆弧插补仅为 XY 平面圆弧插补。调用函数库中 GT_LnXY()可以实现两维直线插补(以终点为输入参数),调用 GT_ArcXY()可以实现 XY 平面圆弧插补(以圆心位置和角度为输入参数),调用 GT_ArcXYP()可以实现 XY 平面圆弧插补(以终点位置和半径为输入参数),这样便可实现双轴联动下直线和圆弧的绘制。第第 4 章章 各部分功能的实现各部分功能的实现 4.1 初始化及轴的回零初始化及轴的回零 4.1.1 卡和轴的初始化卡

15、和轴的初始化 卡的初始化:在 VB中需编入运动控制器初始化函数,首先通过 GT_open()打开运动控制器设备,然后对运动控制器进行复位,其功能通过 GT_Reset()实现。在初始化中需屏蔽每一轴的中断,这里我们组用的是 for循环。循环语句中我们用的是 GT_Axis(i),i 的取值分别是 1和 2,即分别用来控制 XY两轴。用GT_SetIntrMsk(0)来实现屏蔽中断。这里对 GT_SetIntrMsk()进行简要的说明,当中断屏蔽字中的某一位设置为“1”时,允许该位表示的中断事件向主机申请中断,如果设置为“0”时,不允许该位表示的中断事件向主机申请中断。轴的初始化:运动控制器可以

16、同时控制四个控制轴,这里我们只需要控制机器中的两个轴和一个起落笔的动作。为了提高主机与运动控制器的通讯效率,运动控制器采用控制器寻址的策略。设置当前轴:用户程序调用的单轴命令,都是作用于当前轴的。运动控制器默认的当前轴为第一轴。要想对其他轴发送命令,首先要调用设置当前轴命令:short GT_Axis(unsigned short num)。GT_Axis(),将参数指定轴设置为当前轴。此后调用的单轴命令都是针对当前轴,直到再次调用该函数将当前轴设置为另一个轴。设置输出“脉冲+方向”:默认情况下,控制器输出“脉冲+方向”信号。用户可以调用函数 GT_StepPulse设置控制器输出“正负脉冲”

17、信号;调用函数 GT_StepDir 设置控制器输出的“脉冲+方向”信号。设置开环和闭环控制:调用 GT_CloseLp()命令当前轴工作在闭环方式,这种方式能够实现准确的位置控制。SV运动控制器的默认控制方式为闭环控制。调用GT_OpenLp()命令,当前轴工作方式为开环。这种方式主要用于只需转矩控制的运动或标定驱动器,运动控制器无法实现准确的位置控制。由于本课程设计要求绘制圆弧、图形轮廓等较为精准的加工,所以此处我们组在设置开环闭环的方式上均为闭环控制。设置其他参数:调用 GT_SetKp()设置比例增益,调用 GT_SetKi()设置积分增益等(详见源程序)。调用 GT_ClsSts()

18、用来清除当前轴的不正确信息。4.1.2 XY 轴的回零轴的回零 XY的回零的主要思路:通过寻址的方法,检测正负限位的地址,在是当前轴运动到其中点位置,以实现其回零操作。其设计流程图如下所示:图 4.1、XY轴回零流程图 程序的控制:定义变量 rtn,对 rtn进行赋值,设置当前为轴并开启轴。其功能实现分别通过调用 GT_Axis()和 GT_AxisOn()实现。调用函数 GT_GetAtlPos(XPosLimPos)将检测到的正限位所返回的值返回到 GT_GetAltPos()中,这样便获得了正限位的实际位置。对负限位位置的获取类似,调用函数 GT_GetAtlPos(XNegLimPos

19、),将检测到的负限位所返回的值返回到 GT_GetAltPos()中,这样便获得了负限位的实际位置。获得两限位位置后,定义一个变量,将正负限位的中点位置复制给该变量,此处我们定义的变量是 XZeroPos,对其赋值 XZeroPos=(XNegLimPos+XPosLimPos)/2。最后轴通过调用函数 GT_SetPos(),将函数变量定义为 XZeroPos,这样便可实现回零操作。4.2 点动控制点动控制 4.2.1 点动控制操作界面点动控制操作界面 图 4.2、点动控制操作界面 4.2.2 点动控制功能的实现点动控制功能的实现 这里,我们主要通过调用函数 GT_SetVel(Val(Co

20、mbo2.Text)和 GT_SetPos(2000*Val(Combo1.Text),其中 GT_SetVel()是用来设置当前轴的速度,即当我们需要 X轴正向点动时,先将当前轴设置为 1轴(当前轴的设置前面已经阐述,这里不再说明),则在该程序下设置该轴的速度。GT_SetPos()是用来设置该轴运动的位置,该函数的变量为脉冲,通过实验测试,我们大概计算出的结果为 20002500个脉冲为 1mm 的距离,这里我们直接在程序中将选择的变量乘以 2000,这样我们在运行时选择的点动增量直接换算为 mm。当 X轴需要负向运动时,基本程序与正向运动基本一致,只需在设置运动位置时将变量设置为负值,即

21、 GT_SetPos(-2000*Val(Combo1.Text)。Y轴的设置与 X轴一致,这里便不再重复赘述。VB程序说明:程序里,函数 Val()是直接取出空间中的值,这样在程序中就不需再定义多余变量。窗体中本小组组使用了两个 list 控件,其属性值设置为 2,即为 list只能选择已设置的点动增量(这里本小组设置了 5、10、15 等几个梯度)和点动速度(1、2、5)。4.3 直线插补直线插补 4.3.1 直线插补基本算法直线插补基本算法 进行插补的方法有很多种,包括逐点比较法,数值积分法,时间分割法,样 条插值法。设计中用到的方法是逐点比较法。逐点比较法,即每一步都要和给定轨迹上的坐

22、标值进行比较,视该点在给定轨迹的上方或下方(直线插补),或在给定轨迹的里面或外面(圆弧插补),从而决定下一步的进给方向,使之趋近给定轨迹。如此走一步比较一次,决定下一步走向,以便逼近给定的轨迹。偏差计算公式:以第一象限为例,取直线起点为坐标远点,如图 23 所示,m 为动点,有下面关系:图 4.3、直线插补图示 取 作为偏差判别式,若 F m=0,表明 m 点在 OA 直线上,若 0,表明 m 点在 OA 直线上方的 m 处,若 F m 0,表明 m 点在 OA 直线下方的 m 处。从坐标原点出发,当 0 时,沿+X 方向走一步,当 0 时,沿+Y 方向走一步,当两方向所走的步数与终点坐标(X

23、 e,Y e)相等时,停止插补。当 0 时,沿+X 方向走一步,则 X m+1=X m+1,Y m+1=Y m 新的偏差为:F m+1=F m Y e (4.1)当 0 时,沿+Y 方向走一步,则 X m+1=X m,Y m+1=Y m+1 新的偏差为:F m+1=F m Y e(4.2)其它三个象限的计算方法,可以用相同的原理获得。其插补方法可用下表表示:图 4.4、直线插补原理 4.3.2 直线插补程序框图直线插补程序框图 其插补的程序流程图如下图所示:其插补的程序流程图如下图所示:图 4.5、直线插补流程图 4.3.3 直线插补功能实现直线插补功能实现 这里我们主要是通过定义 Tmoti

24、on()函数来实现 XY轴的联动。这里对 Tmotion()函数作个简单的说明。我们编辑的 Tmotion(axis As Integer,position As Double)定义了两个变量,分别为轴和运行位置。在函数中,需要调用某轴时都用 axis 代替,位置用 position 代替,这样使得当调用函数时可以直接调用,如 Tmotion(1,2000)则表示轴 1(X轴)正方向走到 2000 个脉冲的位置。所以,根据插补算法,我们在判别需要或轴运动时,在下面调用的 Tmotion()写入相应的变量即可。例如,当判别 Fm0 时,需要 X 轴正向走一步,则调用 Tmotion(1,250*

25、i+2500*Xs)。这里对后面位置的代数式进行说明:Xs 是我们输入的起点的横坐标即,轴先运动到起点,初始位置为 2500*Xs,i 为每次判别所累加的变量,即总共的运动步数,由于定义的位置并非每次的运动量,所以位置为绝对的位置,即相对零点的位置。由于每次判别均走一步,如此循环,所以 250*i 大约为每次大约运动 0.1mm 的距离。X轴负向运动即 Y 轴运动的实现与上面所述过程基本一致。4.3.3 运行效果运行效果 图 4.6、直线插补界面 输入起点终点坐标,点击生成轨迹,即可开始直线绘制。绘图效果见附页二.4.4 圆弧插补圆弧插补 4.4.1 圆弧插补的基本算法圆弧插补的基本算法 与直

26、线插补的方法类似,圆弧插补也是使用的逐点比较法,以第一象的限逆圆插补为例,如下图所示:图 4.7、圆弧插补图示 圆弧圆心在坐标原点,A 为起点,B 为终点。半径为 R,假设运动瞬时点为 m,它到圆心的距离是 Rm,以 Rm 和 R 的平方差作为偏差,则偏差判别式为:(4.3)若 F m=0,则表明 m 点在圆弧上,若 F m 0,则表明 m 点在圆弧外,若 F m 0,则表明 m 点在圆弧内。当 F m 0 时,沿-X 方向进给一步,其新的偏差:F m+1=F m-2 X m+1(4.4)当 F m 0 时,沿+Y 方向进给一步,其新的偏差:F m+1=F m+2Y m+1(4.5)以上为第一

27、象限的插补方法。其四个象限的插补方法概括如下表所示:图 4.8、圆弧插补原理 4.4.2 圆弧插补流程图圆弧插补流程图 其插补流程图如下图所示:图 4.9、圆弧插补流程图 4.4.3 圆弧插补功能的实现圆弧插补功能的实现 在模块里编辑了 Circleshun()和 Circleni()两个函数,分别用来加工顺弧和逆弧。在函数中,定义了函数起点坐标、圆心坐标、以及圆弧角度的变量。借此可以计算出起始角、半径等参数。与直线插补类似,在圆弧插补中,当判别函数需要 X轴正向走一步时,调用 Tmotion()函数,在轴方向上走一步。Y轴类似。圆弧角度的说明:定义累加变量 i、j,X 轴每走一步变量 i 累

28、加一次,Y轴每走一步变量 j 累加一次。加工循环判断语句:定义变量 step,step=(i+j)*(180/3.1415926)*0.77/(r*10),这里便将圆弧加工走过的角度通过几何代数关系换算出来了。判断语句step Y 0)和终点坐标X e,Y e 长轴 a,短轴 b,以及加工顺圆及椭圆圆弧所在象限。如图 24 所示,设弧 AB 为所要加工的第一象限逆圆,A(X 0,Y 0)为圆弧起点,BX e,Y e 为圆弧终点。图 4.11、椭圆弧插补图示 若 P i 点在圆弧上则下式成立:(4.6)选择偏差函数:(4.7)根据动点所在区域的不同,有下列三种情况:F i 0,动点在圆弧外;F

29、i=0,动点在圆弧上;F i 0和F i=0合在一起考虑,按如下原则,就可以实现第一象限逆圆的圆弧插补:当 F i 0 时,向X进给一步;当 F i 0 时,向+Y进给一步。每走一步后,计算一次偏差函数 F,以其符号作为下一步进给方向的判别标准,同时进行一次终点判别。以第一象限逆园为例可以得到椭圆插补偏差递推公式。当 F i 0 时,沿X 方向进给一步,其新的偏差 F i+1=F i-2b 2 x i+b 2(4.8)当 F i 0 时,沿+Y 方向进给一步,其新的偏差 F i+1=F i+2a 2 x i+a 2(4.9)其他象限和圆弧插补的进给方向相同,只是偏差判别的公式有点不同。在程序编

30、写中用了最广泛适于各个象限的偏差计算公式。4.5.2 椭圆插补流程图椭圆插补流程图 其流程图如下图所示:图 4.12、椭圆插补流程图 4.5.3 椭圆插补功能的实现椭圆插补功能的实现 椭圆插补与圆弧插补基本类似,两者的区别主要在于判别函数的差别,椭圆有长短半轴。所以此处,我们定义了 tuoyuanshun()和 tuoyuanni()两个函数用来绘制顺弧和逆弧。定义的变量有圆心坐标、长半轴、短半轴。在定义的函数中,对新的判别函数进行判别,当判别函数大于等于 0 时,X负方向走一步,调用 Tmotion()函数实现。Y轴类似,圆弧角度的判别与圆弧角度的判别一致。4.5.4 运行效果运行效果 椭圆

31、绘制界面:图 4.13、椭圆插补界面 输入圆心、长轴、短轴、角度等,选择顺弧或逆弧,点击生成轨迹按 控件,即可加工各种角度的椭圆弧。其运行效果见附图 2.4.6 图形绘制图形绘制 4.6.1 图像二值化图像二值化 图形轮廓提取是要从黑白的图片中提取出运动控制器的运动轨迹,是可以脱离控制器单单由程序实现的过程。在进行图形轮廓提取之前得先对图形进行二值化处理,使彩色的图片变成仅有黑白两种颜色的图片,这里需要通过编写程序来实现。在对彩色图像的处理中,首先要对彩色位图颜色值进行分解。像素的颜色值(用 Col 表示)是一个长整形的数值,使用四个字节,最上位的字节为零,其他三个个下位字节依次为 B、G、R

32、,值为 0-255。从 Col 值分解出 R、G、B 使用 AND 运算符,得出 R=COLAND&Hff G=(COLAND&Hff00)/256 B=(COLAND&Hff00)/(256*256)分别是红,绿,蓝三种颜色值。此后,运用三种颜色值,计算出灰度值,其算法为 rr=gg=bb=(R+G+B)/3,使彩色图像生成灰度图象。以方便后续的二值化处理。使灰度图象二值化的方法很多,这里采取了一种比较简单的二值化方法。设定了一个颜色分界点的值,在提取每个像素点颜色值之后使其同这个值进行比较,大于这个值则认为这个点是白色的,并将白色值 255 赋给它,反之,认为它是黑色的,同样把黑色值 0

33、赋给它。这样灰度图象便变成了黑白的二值图像。在经过多次的调试后可以得出比较满意的分界值和效果比较好的黑白图片。4.6.2 轮廓提取轮廓提取 轮廓提取是在图像二值化的基础上进行的。图形轮廓提取的方法有很多种,如:四邻域法、八邻域法、全面检测法等 在这三种提取轮廓的方法中,为了简化运算,用四邻域法进行计算。四邻域法从本像素点出发从它的上、下、左右四个方向寻找是否全部是黑色的点,如果是则认为这个点在图形的内部,标记后清除,否则保留该点,这样图形内部的封闭空间点都被清除了,即完成了轮廓的提取。这种方法虽然会丢失图形轮廓上的一些点,但它的算法比较简单,易于实现。在编写程序的过程中,分三步进行。第一步先设置循环对图形进行一次扫描,把黑色的点提取出来。之后,在循环中对每一个像素的上、下、左、右进行探测,如果他的四周都为黑则将清除直至循环结束,提取出轮廓。为了防止重线和孤点的存在,在第三步中,对所剩的所有

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1