德创机器人 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);