您的浏览器Javascript被禁用,需开启后体验完整功能, 请单击此处查询如何开启
网页 资讯 视频 图片 知道 贴吧 采购 地图 文库 |

机器视觉及上位机编程_信息与通信_工程科技_专业资料

3952人阅读|139次下载

机器视觉及上位机编程_信息与通信_工程科技_专业资料。机器人制作入门


机器视觉及上位机编程 黄铭 Email: minghung@mail.ustc.edu.cn 主要内容 ?图像处理基础 ? 数字识别方法及步骤 ?上位机程序设计与节点通信 图像处理基础 图像处理 什么是图像 ? 图像:二维函数f(x,y)。 ? x, y为空间坐标,f(x,y)为图像信息(灰度、亮度、颜 色)。 ? 数字图像:离散,矩阵 ? 采样,量化,存储 ? 数字图像元素:像素 ? 成像方式 ? 所有波段的电磁波 ? 声波、震动等 数字图像表示 ? 数字矩阵 f (0,1) ? f (0,0) ? f (1,0) f (1,1) f ( x, y ) ? ? ? ? ? ? ? f ( N ? 1,0) f ( N ? 1,1) f (0, M ? 1) ? ? f (1, M ? 1) ? ? ? ? ? ? ? f ( N ? 1, M ? 1)? ? ? 空间分辨率:M×N。 ? 灰度分辨率:离散灰度级数G G ? 2k ? 存储一幅数字图像所需位数 b ? M ? N ? k ? N 2k 图像存储 ? 数据结构 ? 单通道:灰度图,二值图 ? 多通道:RGB,HSV,YUV/YCbCr/YPbPr,RGBA…… ? 索引图像:调色板,存储索引值 ? 文件格式 ? BMP格式(BitMap):位图,文件头+数据,未经压缩,可 以直接二进制读取操作 ? JPEG:静止灰度或彩色,压缩率大,常用需要特定的算法读 取其中信息。 ? GIF:8位文件格式,256色,压缩,动画 ? PNG,TIF…… 算术运算 ? 图像运算 ? 算术运算(加减乘除) ? 逻辑运算(与或非、异或) 图像增强 ? 目的:提高清晰度,去噪声,前处理 ? 用途:去噪声、边缘增强、提高对比度、改变 亮度、改善细节 ? 空域法:像素直接操作 ? 灰度变换、直方图修正、空域滤波 ? 变换域法:变换后再处理,逆变换得到处理后图像 ? 频域滤波、小波分析等 空域法——灰度变换 ? g(m,n) = T[ f(m,n) ] ? 功能:改变动态范围,灰度区域截取,感兴趣区域 空域法——直方图修正 ? 定义:灰度级出现频数(频率)分布,反应图像清 晰性,直方图均匀分布时,图像最清晰。 ? 均衡化:调节对比度,增强图像对比度。 空域法——空域滤波器 空域滤波器 ? 线性滤波器——模板与图像卷积 ? 低通滤波器,高通滤波器,带通滤波器 ? 非线性滤波器——取决与邻近像素值 ? 中值滤波 R = mid{Zk} ? 最大值滤波 R = max{Zk} ? 最小值滤波 R = min{Zk} W1 W4 W7 W2 W5 W3 W6 Z1 Z4 Z7 Z2 Z5 Z8 Z3 Z6 Z9 W8 W9 模板 像素邻域 空域滤波器——平滑滤波 ? 平滑滤波器 ? 用途:去除无用小细节,连接中断线段与曲线,去噪 音,平滑图像 ? 方法:低通滤波,中值滤波 空域滤波器——锐化滤波 ? 锐化滤波器 ? 用途:改善细节,边缘提取,目标定位与识别 ? 方法:高通滤波器,微分滤波器 ? 微分滤波器:Roberts交叉梯度算子,Prewitt梯度算子, Sobel梯度算子,Laplacian二阶微分算子 Roberts Prewitt Sobel Laplacian 其它图像增强方法 ? 频域 ? 离散傅立叶变换 ? 离散余弦变换 ? 时频分析 ? 盖伯变换 ? 小波变换 图像分割 ? 目的:提取感兴趣区域 ? 用途:区域分割,目标定位,目标识 别与分类,规划与决策 ? 边缘检测法:点、线、边 ? Hough变换法 ? 阈值分割法 ? 数学形态学方法 图像分割——边缘检测 ? 点的检测——空域高通滤波 ? 线的检测——模板操作 ? 边的检测——微分算子 ? Roberts交叉梯度算子,Prewitt梯度算子,Sobel梯度 算子,Laplacian二阶微分算子 图像分割——边缘连接 ? Hough变换——对于边界上n个离散的点集,找出共 线的点集与直线方程 图像分割——阈值分割 ? 通过灰度门限对图像像素进行分类 图像分割——数学形态学方法 ? 腐蚀——使二值图像减小一圈 ? 膨胀——使二值图像扩大一圈 原图 腐蚀后 膨胀后 图像分割——数学形态学方法 ? 开-闭运算 ? 开运算——先腐蚀,再膨胀 ? 消除细小对象,分离细小粘连,不改变形状平滑边缘 ? 闭运算——先膨胀,再腐蚀 ? 填充细小空洞,连接邻近对象,不改变面积平滑边缘 原图 开运算 闭运算 特征描绘 ? 边界特征 ? 周长、直径、曲率、凹凸点 ? 傅立叶描绘子 ? 形状数、边界矩…… ? 区域特征 ? 面积、曲线长度、区域周长,区域紧凑性,灰度 ? 拓扑描绘子——欧拉数 特征描绘 ? 边界周长 ? 轮廓线像素个数为边界长度的近似估计 ? 边界直径 ? Diam(B) = max[D(Pi,Pj)],Pi与Pi为边界点 ? 边界曲率 ? 斜率差,相邻线段斜率的差值。 ? 凸点/凹点 特征描述——傅立叶描绘子 ? 将像素点坐标表示为复数:s(k) = x(k) + j*y(k) x(k) = Xk y(k) = Yk ? 进行离散傅立叶变换,系数a(u)为傅立叶描绘子 特征描述 ? 欧拉数 ? 记区域内孔个数为H,连通分量个数C,欧拉数E为 数字识别方法及步骤 方法 ? 结构法识别(多个结合) ? 简单描绘子,如周长,面积,紧凑度,灰度等 ? 形状数,边界矩 ? 欧拉数 ? 决策论法识别 ? 分类器,最小距离,相关匹配 ? 神经网络,支持向量机(SVM) 步骤 原始图像 预处理 彩色空间 变换,阈 值分割 灰度图 图像增强 滤波,去 除背景 包含数字区域 的二值图像 图像 分割 分割数字 区域 结构化识别 相关匹配识别 数字 信息 神经网络, SVM 网络训练 …… 数字区域二值 图像 图像 细分 分割单个 数字 若干单数字二 值图像 识别示例 ? 采用工具:Matlab ? 前提条件:打印数字,背景白色 预处理 1. 灰度化与二值化 ? 方法,灰度阈值法,自适应阈值法…… 2. 其它:滤波,形态学操作(开闭,腐蚀/膨胀) I0 = imread(file); I0 = imresize(I0,[480,640]); I = rgb2gray(I0); imshow(I),title(‘Original Image'); I1 = im2bw(I,0.65); 分割 ? 目标:提取数字区域,并分割单个数字 [x,y] = find(I1); x1 = min(x); x2 = max(x); y1 = min(y); y2 = max(y); I2 = I1(x1:x2, y1:y2); 分割 ? 数字倾斜? ? 方法:顺时针/逆时针旋转一定角度,并计算数字区域 在X轴的投影,投影范围最短时为水平。 L Lmin 表示与描述 ? 数字特征 ? 连通域 ? 两个连通域:8 ? 一个连通域:0,4,6,9 ? 零个连通域:1,2,3,5,7 ? 周长,曲率,端点个数…… 60° 100° 120° 识别 ? 字形确定,模板匹配方法:相关系数,差,异或 匹配 结果 解释与结果 ? 根据模板相关运算结果,识别数值。 待识别 模板运算 结果 6 1 优点:简单,运算量少;缺点:针对特定形状,通用性差 其它分类方法 ? 神经网络算法 ? 需要大量时间的训练,检测精度与训练样本有关。 ? 优点:一般情况下,精度非常高,可以识别各种手写 字体 ? SVM,支持向量机方法 ? 需要训练,针对神经网络缺点对时间和精度均衡考虑, 精度很高,可识别各种手写字体。 ? 均需要强大的运算能力保证 上位机程序设计与节点通信 通信接口 ? 串口RS-232C,速率0~20000b/s,传输距离15米以下。 ? 优点:接口简单,使用方便;缺点:速率低 ? 一般用于传输指令或参数等字符信息。 ? USB,速率480Mbs,传输距离10m以下 ? 优点:速率高,多设备;缺点:接口稍复杂 ? 用于传输图像、大量数据。 ? 以太网,速率10/100/1000Mbs,距离100m ? 优点:速度快,协议可靠;缺点:下位机实现复杂 ? 包括wifi,有线等方式,用于控制或大量数据传输。 ? 无线:zigbee、红外、2.4G等 ? 总线:CAN等 工具软件 ? Matlab,图像处理,常用接口通信 ? Visual Studio + 第三方库 ? VC ,图像处理OpenCv,串口CSerialPort…… ? C#,图形处理EmguCv, AForge.net…… ? QT,C++库通用 ? 其它,python,VB也有丰富的库供使用 ? 不建议自己从底层做起,能直接使用稳定的 第三方库尽量使用,省时稳定 常用类库 ? 图像处理:OpenCv,Cimg,Aforge.NET,FreeImage, CxImage ? 串口通信:CnComm,CSerialPort ? 有用站点 ? 增强视觉 * OpenCv中文网站 ? 一些好文章 ? ? ? ? ? ? Win32串口编程 字符识别(模板匹配&BP神经网络训练) Handwriting Recognition Revisited: Kernel Support Vector Machines Digit Recognition with OpenCV (CPP Version) SuDoKu Grabber with OpenCV Simple Digit Recognition OCR in OpenCV-Python 一些建议 ? 学会使用Google,英文关键字可以得到更多 信息 ? 多关注诸如OpenCv等软件的论坛 ? 有时间多逛逛CodeProject, Google Project, source forge, github等代码托管社区,会有 很多源代码。 ? 耐心 结束 希望对大家有帮助 祝大家在RoboGame玩得开心

文档贡献者

百度用户#369781387

贡献于2012-09-09