第5章 足球机器人视觉

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 建立颜色信息库首要的任务是选择颜色模 型,颜色模型是抽象表示和描述颜色的方 法。 • 足球机器人系统常用的颜色模型有RGB模型、 HSI模型和YUV 模型等。 • 如果通过阈值进行颜色分割,应选用分布 均匀的HSI或YUV模型;如果建立离散的颜 色查找表,通常选择RGB颜色模型。
• 图像采集卡都可以直接提供RGB颜色模型的 图像。但是由于存储矩阵尺寸的限制,我 们将24位真彩色表压缩。 • 颜色库很难覆盖所有的信息。
(5)设置捕获窗口状态(Status)
• 使用SetWindowPos函数设置捕获窗口尺寸。 • 输入视频流的尺寸大小由capGetStatus宏来获 得,获得信息放在一个CAPSTATUS的数据结构 体中。 • CAPSTATUS CapStatus; • capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS));
(7)获得和设定视频格式
• DWORD dwSize= capGetVideoFormatSize(hWndC); • LPBITMAPINFO lpbi= GlobalAllocPtr (GHND, dwSize); • capGetVideoFormat(hWndC, lpbi, dwSize);
SDK发应用程序(例:CMU)
• • • • • • • • • (1)首先对PCImager 驱动程序初始化。 CMU1394_Init(); //初始化 CMU1394_SetBrightness(); //设置亮度; CMU1394_SetContrast();//设置对比度; CMU1394_SetSaturation();//设置饱和度; CMU1394_SetHue ();//设置灰度; CMU1394_SetVideoSource(); //设置视频源; CMU1394_SetVideoFormat(); //设置视频的格式; CMU1394_SetColorFormat(); //设置图像格式, RGB24,RGB8,YUV411,YUV422等; • CMU1394_SetColorKey(); //设置色键;
(4)获得驱动的性能参数
• 驱动的性能参数存放在一个CAPDRIVERCAPS的数 据结构中。 • 当你的应用程序的捕获窗口连接到一个新的捕获 驱动器后,都会刷新这个CAPDRIVERCAPS数据结 构。 • 使用capDriverGetCaps宏来获得: • CAPDRIVERCAPS CapDrvCaps; • SendMessage (hWndC, WM_CAP_DRIVER_GET_CAPS, sizeof (CAPDRIVERCAPS), (LONG) (LPVOID) &CapDrvCaps);
x1 Mx0 Ex0 ( x0 2 y 0 2 ) 2 2 y1 My0 Ey0 ( x0 y 0 )
式中X0、Y0为畸变以前的原始坐标,X1、Y1为 畸变后的坐标
颜色模型与颜色信息库
• 建立特征目标的颜色信息库是视觉系统的 主要任务之一,信息库的好坏是影响辨识 精度的最关键因素。
图像处 理的硬 件组成
工作站
色彩标识
2016/2/5 5
图像处理流程
2016/2/5
6
图像处理的软件组成
涉及的领域 模式识别 人工智能 统计学
图像优化 图像采集
运动控制
特征提取 目标识别
2016/2/5
7
5.2图像捕获与显示
• 常用两种方法来实现图像捕获: 利用视频设备开发工具箱(SDK)来开发应 用程序, 包含的函数可以实现视频捕获、 编辑等各种功能; 使用 Video for Windows(VFW) 频捕。
• // 在BCAM中建立内存 • m_Bcam.AllocateResources(NUM_BUFFERS, IMAGE_PIXS); • // 建立并启动采集线程 • m_GrabThread.Create(&ThreadProcGrab, this, THREAD_PRIORITY_ABOVE_NORMAL); • //建立并启动显示线程 • m_DispThread.Create(&ThreadProcDisp, this, THREAD_PRIORITY_ABOVE_NORMAL) ; • //抓取一副图像 • m_Bcam.GrabImage(G_pBitmaps, IMAGE_PIXS, INFINITE, true);
图5-5 特征点的分布
• 理论上来说,根据队标的质心坐标和长轴 的方向角,就可得到H、I、J、K四个点的位 置坐标,判断各个区域是否是黑色,只要 判断各个区域的特征点是否是黑色即可 • 因此采用特征区域判断来代替孤立点判断。
第5章 足球机Βιβλιοθήκη 人视觉刘钊目录• 5.1 足球机器人视觉概述 • 5.2 图像捕获与显示 • 5.3 目标识别
足球机器人场景
机器人 软件处理
无线通讯
2016/2/5 3
预处理
人机交互
比 赛 场 地
图像获取
图像分割 图像处理
目标识别
策略
动作执行
系统结构图
5.1 足球机器人视觉概述
视觉传感器
图像采集卡
5.3 目标识别
• • • • 几何矫正 颜色模型与颜色信息库 色标设计 辨识算法
几何矫正
当镜头位置无论处于场地的正中间上方或者镜 头所处的平面不平行于场地平面,都会造成图 像的非线性失真。 这些非线性失真必然影响视觉辨识的精度,因 此对图像进行校正是必需的。
校正效果对照
2016/2/5
26
通过镜头几何畸变的数学模型来实现对失真的 矫正方法:
(3)获得驱动
• • • • • • 使用capGetDriverDescription 函数来获得驱动 char szDeviceName[80]; char szDeviceVersion[80]; for (wIndex = 0; wIndex < 10; wIndex++) { if (capGetDriverDescription (wIndex,szDeviceName, sizeof (szDeviceName), szDeviceVersion, sizeof (szDeviceVersion)) • { ……} • }
xT yT
x
i 1 N i 1
N
i
/N /N
y
i
(2)角度信息获取
• 根据色标的设计,机器人正方向和队标的 长轴方向相同或相差180度。
• 队标长轴的方向可以通过最小二乘法拟合 得到,可确定机器人正方向与x轴所成的角 度。
• 如何对D部分位置的判断?
(8)显示视频
• 用capPreviewRate来设置帧频率66毫秒/帧, 使用capPreview在捕获窗口显示图像。 • capPreviewRate(hWndC, 66); // 速度,微秒 • capPreview(hWndC, TRUE); // 开始预览 • capPreview(hWnd, FALSE); // 屏蔽预览
开始
两个摄像头图像采集
Y
是否识别处理
N
处理左半场图像,识别出左半场所有色标
左右半场视频图像实时显示
处理右半场图像,识别出右半场所有色标
左右半场场地拼接,颜色采样
识别小球
左右半场数据融合,位置滤波
目标局部图像处理,实现目标跟踪
位姿信息输出
VFW频捕获
• VFW是微软为开发的实时视频捕获、编辑和 视频播放工具,主要包括 vfw.h文件和 vfw32.lib函数库。 • VFW使用的是和视频设备驱动程序直接通 信的方式,为视频硬件提供与设备无关的 接口函数。
(2)连接到一个捕获驱动器
• 通过窗口句柄hWndC连接到驱动程序: • SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0L); • // 或者使用宏连接: • // fOK = capDriverConnect(hWndC, 0); • // 关闭连接 • capDriverDisconnect (hWndC);
• SetWindowPos(hWndC, NULL, 0, 0,CapStatus.uiImageWidth,CapStatus.uiImageHei ght,SWP_NOZORDER | SWP_NOMOVE);
(6)设置视频属性
• • • • • • • • • • • • • • • 通过对话框来控制数字视频的特性和捕获处理。 CAPDRIVERCAPS CapDrvCaps; capDriverGetCaps(hWndC, &CapDrvCaps, sizeof (CAPDRIVERCAPS)); // 视频源对话框 if (CapDriverCaps.fHasDlgVideoSource) capDlgVideoSource(hWndC); // 视频格式对话框 if (CapDriverCaps.fHasDlgVideoFormat) { capDlgVideoFormat(hWndC); capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS)); // 如果有,发送通知给父窗口,告诉它尺寸改变了 } // 视频显示对话框 if (CapDriverCaps.fHasDlgVideoDisplay) capDlgVideoDisplay(hWndC);
(1)创建捕获窗体
• 使用capCreateCaptureWindow函数来创建窗 体
• hWndC = capCreateCaptureWindow ( • (LPSTR) “My Capture Window”, • WS_CHILD | WS_VISIBLE, • 0, 0, 160, 120, • (HWND) hwndParent, • (int) nID /* child ID */);
色标设计
• 目前各参赛队伍使用的色标多种多样,下 面列举具有代表性的一部分,如图:
• 一种常用的色标。
辨识算法
• 根据色标设计,视觉系统应该能够获取机 器人小车在场地中的位置、角度和车号信 息,其中位置和角度统称位姿信息。
(1)位置信息获取
• 由图的色标设计可以看出,小车的中心位 置根据队标中心位置而定,队标的中心主 要采用重心法获得,则队标中心点坐标为:
• (2)显示实时视频图像。 • GetClientRect(&Client); • Client.SetRect(0,0,160,120); //设置显示视频 图像客户区的大小 • CMU1394_PaintOverlay(&Client); //显示为 Overlay 模式
• (3)保存单帧图像。 • CMU1394_CaptureFrame(); //将捕获的帧保 存到缓冲区里; • CMU1394_SaveBMPFile(); //将缓冲区里的帧 图像保存成bmp 文件;
SDK发应用程序(例:Basler)
• m_Bcam.Open(*(CBcam::DeviceNames().begin()));// 打开 • m_Bcam.SetVideoMode(DCS_Format7, DCS_Mode0); • m_Bcam.FormatSeven[DCS_Mode0].ColorCoding = m_ColorCode; • m_Bcam.FormatSeven[DCS_Mode0].Size = IMAGE_SIZE; • m_Bcam.FormatSeven[DCS_Mode0].BytePerPacket = m_Bcam.FormatSeven[DCS_Mode0].BytePerPacket.Max(); • m_Bcam.Brightness.Raw = m_nBrightness ; • m_Bcam.Gain.Raw = m_nGain ; • m_Bcam.Shutter.Raw = m_nShutter; • m_Bcam.WhiteBalance.Raw.UBValue.SetAsync(m_nU); • m_Bcam.WhiteBalance.Raw.VRValue.SetAsync(m_nV);
相关文档
最新文档