电子神越女学 人 智能机器人原理与实践 一…羽毛球视觉处理 骆德渊博士、教投 电子科技大学机械与电气工程学院副院长 电子科技大学机器人队总教练
1 羽毛球视觉处理
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 软件系统架构 羽毛球机器人视觉系统运行在Vindows操作系统;QT交互界面;Visual Studio软件开发平台;HALCON图像处理算法处理平台, 结合相机驱动及$DK支持图像高速实时采集;通过高速无线数传与移动机器人进行同步通信、电池剩余电量监控与报警、移动机 器人状态监控;引用HALCON算子对相机进行内外参数标定;引用HALCON算子进行图像顶处理、识别羽毛球、跟踪羽毛球、 预测羽毛球落地点与击球时间,同时对移动机器人进行精确定位,周期性校正羽毛球位置。 羽毛球跟踪 羽毛球落点预测 机器人定位 图像采集 图像预处理 羽毛球识别 相机标定 同步通信 电池监控 机器人状态监测 QT Visual Studio HALCON 相机SDK WINDOWS操作系统
7.羽毛球机器人视觉软件系统 3 软件系统架构 WINDOWS操作系统 Visual Studio HALCON 相机SDK 图像采集 图像预处理 羽毛球识别 羽毛球跟踪 羽毛球落点预测 同步通信 电池监控 机器人状态监测 QT 相机标定 机器人定位 羽毛球机器人视觉系统运行在Windows操作系统;QT交互界面;Visual Studio软件开发平台;HALCON图像处理算法处理平台, 结合相机驱动及SDK支持图像高速实时采集;通过高速无线数传与移动机器人进行同步通信、电池剩余电量监控与报警、移动机 器人状态监控;引用HALCON算子对相机进行内外参数标定;引用HALCON算子进行图像预处理、识别羽毛球、跟踪羽毛球、 预测羽毛球落地点与击球时间,同时对移动机器人进行精确定位,周期性校正羽毛球位置
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 图像采集与获取 图像采集与获取是羽毛球机器人视觉系统第一至关重要的步骤,稳定性与实时性是图像采集的主要指标。根据实际需要,正确选 择相机分辨率、相机最高帧率、镜头焦距、镜头分辨率,还要选择驱动支持HCON的相机。HLCO支持目前主流相机采集接口; 支持多种品牌的相机。 IEEE1394 ALLIED BASLER.7 0p 花m 雨 面线 USB3.0 Line Scan Camera ELTECO GENCCAM iDS: ,i【eutron Linx ■ matrox DIRECTX Vhkin USB2.0 Digital Camera HALCON Opteon Tattilo IMAGING SOURCE GigE Analog Camera 国内的大华,海康威视、大恒图像等公司的相机也支持HLCO。 Direct show GenlCam
7.羽毛球机器人视觉软件系统 4 图像采集与获取 图像采集与获取是羽毛球机器人视觉系统第一至关重要的步骤,稳定性与实时性是图像采集的主要指标。根据实际需要,正确选 择相机分辨率、相机最高帧率、镜头焦距、镜头分辨率,还要选择驱动支持HALCON的相机。HALCON支持目前主流相机采集接口; 支持多种品牌的相机。 HALCON IEEE1394 Line Scan Camera Digital Camera Analog Camera GenICam Direct show GigE USB2.0 USB3.0 国内的大华、海康威视、大恒图像等公司的相机也支持HALCON
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 图像采集与获取 Halcon图像采集具有如下特点: 链接库 ·图像采集链接库, 独立于其它图像处理链接库 ·一致的代码模板(磁盘文件和图像采集设备) 图像尺寸、 。支持多个采集设备 位数、颜 一致代码 ·同步和异步采集 色可调 。 支持外触发 。 图像尺寸、图像位数、颜色空间可调 。1 支持颜色查找表 HALCON ·支持与设备相关的参数调整。 图像采集 支持 参数调整 羽毛球机器人对图像采集要求如下: 多设备 高速采集 。左右相机同步采集 ·外触发采集 ·异步采集 外触发 同步异步 采集 ·图像尺寸最大。 5
7.羽毛球机器人视觉软件系统 5 图像采集与获取 HALCON 图像采集 链接库 一致代码 支持 多设备 同步异步 采集 外触发 参数调整 图像尺寸、 位数、颜 色可调 Halcon图像采集具有如下特点: • 图像采集链接库,独立于其它图像处理链接库 • 一致的代码模板(磁盘文件和图像采集设备) • 支持多个采集设备 • 同步和异步采集 • 支持外触发 • 图像尺寸、图像位数、颜色空间可调 • 支持颜色查找表 • 支持与设备相关的参数调整。 羽毛球机器人对图像采集要求如下: • 高速采集 • 左右相机同步采集 • 外触发采集 • 异步采集 • 图像尺寸最大
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 图像采集与获取 Halcon图像采集 图像采集C+程序开发过程 应用程序 。 获取采集 相机连接, 编译 获取采集 tran 。 设置采集 Visual Studio 率等参数; 同步采集, 代码专家 异步采集, fra gral 关闭采集 HDevelop ■ trar D soft 国每福福福 Halcon library 原型化 高级用户接口工具 视觉开发 6
7.羽毛球机器人视觉软件系统 6 图像采集与获取 Halcon图像采集有如下几个过程: • 获取采集接口信息,Halcon算子:info_framegrabber (); • 相机连接,获得图像采集句柄,Halcon算子:open_framegrabber(); • 获取采集设备参数,Halcon算子:get_framegrabber_param(); • 设置采集参数,Halcon算子:set_framegrabber_param(),可以设置触发源、曝光时间、增益、采集频率等参数; • 同步采集,Halcon算子:grab_image(); • 异步采集,Halcon算子:grab_image _async() ; • 关闭采集设备, Halcon算子: close_framegrabber()。 同步采集 HALCON图像采集程序 异步采集 图像采集C++程序开发过程
德创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 图像预处理 1黄用当前型术窗口,清空屏解 dev close nindow ( 1误即测试高修 rend_image (Imsge_display,'dats/displny.ipg') 5·将西程转化为灰厦窗修 rgbl_te_nray (Inage_display,drayIrage) 获现图保的尺寸 Bet_image_size(Image_display,inngewidth,imageHeight) “新建显米面口。适应西尺寸 dev open window (8,8,imagewidth,isageHeight,'black',windowHandlel) 活择面大的色区城,即保区 y( dRegions.displayRegion.'eax_area".78) 4“我剪倒整区域 reduce_.dorain〔rayInnge,disple同egion,displayTm这e) 26+创建过修能聊 27gen_contour_reglen_xld (displaykeglen,Conteurs,'border') 18 devdisplay (contours) 子将彩分为地 sepment_contours_xld (contours,Contourssplit,'lines',5,4,2) 2获和这边的数里 4“存墙可亲动的起点位置 select_obj(Centourssplit,Objectcurrent,index) t line conteur,'tky',-,,5,之,,CelBegin,。ca1End,e,e,Dis) 存来边的页点生标 orners.RowBegin,XCoordCornees) 43 endfeple-concet (YCoordcorners,ColBegin,YCoordcorners) 好,会实城始四个特正占与核正后的生杯速立关联 43 hom_vector_to_proj_hom_mt2d (XCoordCorners,YCoordcorners,[1,1,1,1].[Yoff,Yoff,lmageHeight-Yoff,eageHeight-Yoff].[xoff,inagewidth 4的“轻变接 s0 projective_trans_image (Irage_display,Imsge_rectified,Nomat2D,'bilinear','false','false') 51◆量示校正结震 dev_dispIay (Image_rectified)
7.羽毛球机器人视觉软件系统 7 图像预处理 图像预处理:由于环境的复杂性,相机采集得到的图像可能存在噪声、变形、特征不明显、亮度低等问题,往往需要进行预 处理,是视觉处理系统非常重要的环节,关系到后续图像处理的效果,比如目标识别的准确性、视觉测量的精度等,HALCON提 供如下图像预处理算子: • 图像仿射变换与梯形校正:解决图像形状校正的问题,Halcon用仿射变换实现二维图像的平移、旋转与缩放, 用透视变换实现二维图像校正。主要算子:hom_mat2d_identity()、hom_mat2d_translate()、hom_mat2d_scale() hom_mat2d_rotate()、 affine_trans_point_2d()等。 hom_mat2d_scale hom_mat2d_scale hom_mat2d_scale
德沧剑机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 图像预处理 。 ROI区域处理:惑兴趣区域建立、变换、处理等。ROI是图像处理关注的区域,是HALCON重要的概念。ROI一方面 是减少参与运算的像素数,提高图像处理速度,另一方面作为形状模板用于模板匹配。Halco提供: (1)OI创建:可以创建圆形、椭圆、矩形、多边形等形状区域,也可以由具有一定特征的图像集合创建区域; (2)ROI特征:计算RO的面积、中心、周长、矩等区域,用于噪声滤除、图像匹配、图像分割等。 图像增强:增加图像对比度、突出角点、边沿、区域等特征,比如用直方图均衡提高图像亮度、边沿细节突出 失焦图像等处理; 图像平滑与去噪:消除图像噪声,有均值滤波、中值滤波和高斯滤波。 光照不均匀:消除因环境光源不均匀造成图像灰度、颜色不均匀的问题。 羽毛球图像预处理:因羽毛球场地有运动的机器人,容易对羽毛球跟踪造成干扰,为提高图像处理速度,只对 上半部分图像进行处理,为便于后续羽毛球的识别与跟踪,还需对采集的图像进行均衡滤波。 /*设置ROI区域*/ ReduceDomain(ho_ImageR,ROI_ImageR,&ho_ImageRBuflbufCount%MAX_SEQ_BUFFERSJ); ReduceDomain(ho_ImageL,ROI_ImageL,&ho_ImageLBufbufCount MAX_SEQ_BUFFERS]); /均值滤波*/ MeanImage(ho_ImageLBufbufCount MAX_SEQ BUFFERS],&ho_ImageLBufbufCount MAX_SEQ_BUFFERS],3,3); MeanImage(ho_ImageRBuf bufCount %MAX_SEQ BUFFERS],&ho_ImageRBufbufCount MAX SEQ BUFFERS],3,3); 8
7.羽毛球机器人视觉软件系统 8 图像预处理 • ROI区域处理:感兴趣区域建立、变换、处理等。ROI是图像处理关注的区域,是HALCON重要的概念。ROI一方面 是减少参与运算的像素数,提高图像处理速度,另一方面作为形状模板用于模板匹配。Halcon提供: (1)ROI创建:可以创建圆形、椭圆、矩形、多边形等形状区域,也可以由具有一定特征的图像集合创建区域; (2)ROI特征:计算ROI的面积、中心、周长、矩等区域,用于噪声滤除、图像匹配、图像分割等。 • 图像增强:增加图像对比度、突出角点、边沿、区域等特征,比如用直方图均衡提高图像亮度、边沿细节突出 、失焦图像等处理; • 图像平滑与去噪:消除图像噪声,有均值滤波、中值滤波和高斯滤波。 • 光照不均匀:消除因环境光源不均匀造成图像灰度、颜色不均匀的问题。 • 羽毛球图像预处理:因羽毛球场地有运动的机器人,容易对羽毛球跟踪造成干扰,为提高图像处理速度,只对 上半部分图像进行处理,为便于后续羽毛球的识别与跟踪,还需对采集的图像进行均衡滤波。 /*设置ROI区域*/ ReduceDomain(ho_ImageR, ROI_ImageR, &ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS]); ReduceDomain(ho_ImageL, ROI_ImageL, &ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS]); /*均值滤波*/ MeanImage(ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS], &ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS], 3, 3); MeanImage(ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS], &ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS], 3, 3); hom_mat2d_scale hom_mat2d_scale hom_mat2d_scale
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 特征提取与目标识别 特征提取与目标识别:特征提取是手段、目标识别是结果,目标特征有面积、形状、紧密程度、长宽比、运动性 能、极线约束、其它不变性特征等。相对于羽毛球场地,其运动范围宽、运动速度快、成像像素较小、图像形状 不规则,单靠一种或一类特征难以准确识别羽毛球。通过多年的研究与实践证明,羽毛球机器人视觉系统采取三 帧差法、形态学处理、图像几何特征、极线约束、运动速度、空间约束等手段识别与跟踪羽毛球。 ·三帧差法:相机采集的视频序列具有连续性的特点。如果场景内没有运动目标,则连续帧的变化很微弱,如果存在运动目标 ,则连续的帧和帧之间会有明显地变化。帧间差分法(Temporal Difference)借鉴上述思想。由于场景中的目标在运动,目标 的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧或三帧图像进行差分运算,不同帧对应的像素点相减,判 断灰度差的绝对值,当绝对值超过一定阔值时,即可判断为运动目标,从而实现目标的检测功能。两帧差分法检测出的目标 会出现“重影”的现象,三帧差分法, 可以检测出较为完整的运动目标。 第n献图豫 差分像 风值处理 通性分析 判到 +1顿图保 差分 连通性分析 延君 两帧差分法示意图 差分图等 255,D.(x,y)>T D.(x,y)f(x.y)-f(x,y)I R.(x,y)= 三帧差分法示意图 0,else D,(x,)fc,y)-f(,川门川f(y)-fx,y川Mc-xpT+a∑1E.xy-x川
7.羽毛球机器人视觉软件系统 9 特征提取与目标识别 特征提取与目标识别:特征提取是手段、目标识别是结果,目标特征有面积、形状、紧密程度、长宽比、运动性 能、极线约束、其它不变性特征等。相对于羽毛球场地,其运动范围宽、运动速度快、成像像素较小、图像形状 不规则,单靠一种或一类特征难以准确识别羽毛球。通过多年的研究与实践证明,羽毛球机器人视觉系统采取三 帧差法、形态学处理、图像几何特征、极线约束、运动速度、空间约束等手段识别与跟踪羽毛球。 • 三帧差法:相机采集的视频序列具有连续性的特点。如果场景内没有运动目标,则连续帧的变化很微弱,如果存在运动目标 ,则连续的帧和帧之间会有明显地变化。帧间差分法(Temporal Difference)借鉴上述思想。由于场景中的目标在运动,目标 的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧或三帧图像进行差分运算,不同帧对应的像素点相减,判 断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。两帧差分法检测出的目标 会出现“重影”的现象,三帧差分法,可以检测出较为完整的运动目标
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 特征提取与目标识别 羽毛球识别与特征提取 体前后两帧图像的帧差*/ DynThreshold(ho_ImageLBuffbufCount%MAX_SEQ BUFFERS =0?MAX_SEQ_BUFFERS-1:bufCount%MAX_SEQ BUFFERS-1],ho ImageLBuffbufCount%MAX_SEQ BUFFERS], &ho RegionDynThreshCLBuflbufCount%2],myObj->value dyn thresh,"not equal") DynThreshold(ho_ImageRBuffbufCount%MAX_SEQ_BUFFERS ==0?MAX_SEQ_BUFFERS-1:bufCount%MAX_SEQ_BUFFERS-I],ho_ImageRBuffbufCount%MAX_SEQ_BUFFERS], &ho RegionDynThreshCRBuf bufCount%2],myobj->value dyn thresh,"not equal"), /体r心gion求交集,三帧差核心/ Intersection(ho RegionDynThreshCLBuflbufCount%2],ho RegionDynThreshCLBufl(bufCount+1)%2,&ho_RegionDynThreshCL); Intersection(ho RegionDynThreshCRBuf]bufCount %2],ho RegionDynThreshCRBufl(bufCount +1)%2],&ho RegionDynThreshCR): /*在原图中裁取交集*/ ReduceDomain(ho_ImageLBuf[bufCount%MAX_SEQ_BUFFERS ==0?MAX_SEQ_BUFFERS-I bufCount%MAX_SEQ_BUFFERS-1],ho_RegionDynThreshCL,&ho_ImageReduceL); ReduceDomain(ho_ImageRBuffbufCount %MAX_SEQ_BUFFERS==0?MAX_SEQ_BUFFERS-1:bufCount%MAX_SEQ_BUFFERS-1],ho_RegionDynThreshCR,&ho_ImageReduceR); /体筛选白色区域*/二值化 Threshold(ho_ImageReduceL,&ho_RegionDynThreshCL,20,255); Threshold(ho_ImageReduceR,&ho_RegionDynThreshCR,20,255); /*闭操作*/形态学处理 ClosingCircle(ho_RegionDynThreshCL,&ho_RegionDynThreshCL,5); ClosingCircle(ho_RegionDynThreshCR,&ho_RegionDynThreshCR,5); /体合并连通区域region*∥/形态学处理 Connection(ho RegionDynThreshCL,&ho ConnectedRegionsCL): Connection(ho RegionDynThreshCR,&ho ConnectedRegionsCR);
7.羽毛球机器人视觉软件系统 1 0 特征提取与目标识别 • 羽毛球识别与特征提取 /*前后两帧图像的帧差*/ DynThreshold(ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS == 0 ? MAX_SEQ_BUFFERS - 1 : bufCount % MAX_SEQ_BUFFERS - 1],ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS], &ho_RegionDynThreshCLBuf[bufCount % 2], myObj->value_dyn_thresh, "not_equal"); DynThreshold(ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS == 0 ? MAX_SEQ_BUFFERS - 1 : bufCount % MAX_SEQ_BUFFERS - 1],ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS], &ho_RegionDynThreshCRBuf[bufCount % 2], myObj->value_dyn_thresh, "not_equal"); /*region求交集 ,三帧差核心*/ Intersection(ho_RegionDynThreshCLBuf[bufCount % 2], ho_RegionDynThreshCLBuf[(bufCount + 1) % 2], &ho_RegionDynThreshCL); Intersection(ho_RegionDynThreshCRBuf[bufCount % 2], ho_RegionDynThreshCRBuf[(bufCount + 1) % 2], &ho_RegionDynThreshCR); /*在原图中裁取交集*/ ReduceDomain(ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS == 0 ? MAX_SEQ_BUFFERS - 1 : bufCount % MAX_SEQ_BUFFERS - 1],ho_RegionDynThreshCL, &ho_ImageReduceL); ReduceDomain(ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS == 0 ? MAX_SEQ_BUFFERS - 1 : bufCount % MAX_SEQ_BUFFERS - 1],ho_RegionDynThreshCR, &ho_ImageReduceR); /*筛选白色区域*///二值化 Threshold(ho_ImageReduceL, &ho_RegionDynThreshCL, 20, 255); Threshold(ho_ImageReduceR, &ho_RegionDynThreshCR, 20, 255); /*闭操作*///形态学处理 ClosingCircle(ho_RegionDynThreshCL, &ho_RegionDynThreshCL, 5); ClosingCircle(ho_RegionDynThreshCR, &ho_RegionDynThreshCR, 5); /*合并连通区域region*///形态学处理 Connection(ho_RegionDynThreshCL, &ho_ConnectedRegionsCL); Connection(ho_RegionDynThreshCR, &ho_ConnectedRegionsCR);
德仓创机器人 Dechuang Robot 7.羽毛球机器人视觉软件系统 特征提取与目标识别 羽毛球识别与特征提取 /体把区域内的孔填上*/形态学处理 FillUp(ho_ConnectedRegionsCL,&ho_ConnectedRegionsCL), FillUp(ho_ConnectedRegionsCR,&ho_ConnectedRegionsCR); /体对regionj进行排序*/ SortRegion(ho ConnectedRegionsCL,&ho SortedRegionsCL,"first point","true","row"); SortRegion(ho_ConnectedRegionsCR,&ho_SortedRegionsCR,"first_point","true","row"). /体计算疑似点区域平均灰度及方差*//目标转征 Intensity(ho_SortedRegionsCL,ho_ImageLBuffbufCount%MAX_SEQ_BUFFERS==0?MAX_SEQ BUFFERS-1:bufCount%MAX SEQ BUFFERS-1],&hv MeanL,&hv DeviationL); Intensity(ho SortedRegionsCR,ho ImageRBuf]bufCount%MAX SEQ BUFFERS ==0?MAX SEQ BUFFERS-1 bufCount%MAX SEQ BUFFERS-1],&hv_MeanR,&hv DeviationR); /体得到region的中心坐标和面积大小*/目标特征 AreaCenter(ho SortedRegionsCL,&hv AreaCL,&hv RowCL,&hv ColCL); AreaCenter(ho_SortedRegionsCR,&hv_AreaCR,&hv_RowCR,&hv_ColCR);
7.羽毛球机器人视觉软件系统 1 1 特征提取与目标识别 • 羽毛球识别与特征提取 /*把区域内的孔填上*///形态学处理 FillUp(ho_ConnectedRegionsCL, &ho_ConnectedRegionsCL); FillUp(ho_ConnectedRegionsCR, &ho_ConnectedRegionsCR); /*对region进行排序*/ SortRegion(ho_ConnectedRegionsCL, &ho_SortedRegionsCL, "first_point", "true", "row"); SortRegion(ho_ConnectedRegionsCR, &ho_SortedRegionsCR, "first_point", "true", "row"); /*计算疑似点区域平均灰度及方差*///目标特征 Intensity(ho_SortedRegionsCL, ho_ImageLBuf[bufCount % MAX_SEQ_BUFFERS == 0 ? MAX_SEQ_BUFFERS - 1 : bufCount % MAX_SEQ_BUFFERS - 1], &hv_MeanL, &hv_DeviationL); Intensity(ho_SortedRegionsCR, ho_ImageRBuf[bufCount % MAX_SEQ_BUFFERS == 0 ? MAX_SEQ_BUFFERS - 1 : bufCount % MAX_SEQ_BUFFERS - 1], &hv_MeanR, &hv_DeviationR); /*得到region的中心坐标和面积大小*///目标特征 AreaCenter(ho_SortedRegionsCL, &hv_AreaCL, &hv_RowCL, &hv_ColCL); AreaCenter(ho_SortedRegionsCR, &hv_AreaCR, &hv_RowCR, &hv_ColCR);