1、基于MATLAB的人体姿态的检测课程设计【实用文档】doc 文档可直接使用可编辑,欢迎下载 基于视频的人体姿态检测 一、 设计目的和要求 1.根据已知要求分析视频监控中行人站立和躺卧姿态检测的处理流程,确定视频监中行人的检测设计的方法,画出流程图,编写实现程序,并进行调试,录制实验视频,验证检测方法的有效性,完成系统软件设计。 2.基本教学要求:每人一台计算机,计算安装matlab、visio等软件。 二、 设计原理 2.1图像分割中运动的运用(运动目标检测) 首先利用统计的方法得到背景模型,并实时地对背景模型进行更新以适应光线变化和场景本身的变化,用形态学方法和检测连通域
2、面积进行后处理,消除噪声和背景扰动带来的影响,在HSV色度空间下检测阴影,得到准确的运动目标. 噪声的影响,会使检测结果中出现一些本身背景的区域像素点被检测成运动区域,也可能是运动目标内的部分区域被漏检.另外,背景的扰动,如树枝、树叶的轻微摇动,会使这部分也被误判断为运动目标,为了消除这些影响,首先对上一步的检测结果用形态学的方法进行处理,在找出经过形态学处理的后的连通域,计算每个连通域中的面积,对于面积小于一定值的区域,将其抛弃,不看做是前景运动目标。 2.2 bwlabel函数 用法:L = bwlabel(BW,n) [L,num] = bwlabel(BW,n),这里num返回
3、的就是BW中连通区域的个数。 返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8. 四连通或八连通是图像处理里的基本感念:8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。 2。3 regionprops统计被标记的区域的面积分布,显示区域总数 函数
4、regionprops语法规则为:STATS = regionprops(L,properties) 该函数用来测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推.返回值STATS是一个 长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。 Properties可以是由逗号分割的字符串列表、包含字符 串的单元数组、单个字符串’all’或者’basic’。如果properties等于字符串'all’,则表4.1中的度量数据都将被计算;如果propert
5、ies等于字符串'basic',则属性:’Area','Centroid’和’BoundingBox'将被计算. ’Area'—— 图像各个区域中像素总个数’BoundingBox’ —— 包含相应区域的最小矩形 'Orientation' 与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度) 三、 设计内容 3。1理论依据 3.1。1应用背景与意义 随着监控系统到位,以帮助人们甚至完成监控任务。可以减少人力和财力的投入,由于就业监视人员进行.另外,如果长时间不运动图像信息记录,保存几下,就失去了意义和视频监控系统的存储资源浪费存储空间。因此,传统的监视系统浪费了大量的人力,
6、并有可能引起报警,性能差的实时监控的泄漏.监控等实时行为分析系统来识别人体,不仅可以替代监控人员的工作的一部分,提高监测系统的自动化水平,同时也提高监视存储的效率,还有一个广泛的应用,并在视频监视系统的潜在经济价值之前.由于人的行为具有自由的伟大程度,因为身体宽松长裙不同程度和它的外貌和从图像捕获设备位置不同距离的表现风格将是一个很大的分歧,这是人的行为分析,找出了一定的难度。但是,人类行为的实时分析,智能监控系统,以确定关键技术及其广阔的前景药,安全性,虚拟现实,军事和潜在的经济价值,国内外研究机构和学者越来越多的关注,并在许多全球领先的刊物和会议专题讨论。美国和欧洲都进行了一些相关的研究项
7、目。 3.1.2运动分割算法 首先利用统计的方法得到背景模型,并实时地对背景模型进行更新以适应光线变化和场景本身的变化,用形态学方法和检测连通域面积进行后处理,消除噪声和背景扰动带来的影响,在HSV色度空间下检测阴影,得到准确的运动目标。 本次采用了基于累积差分和数学形态学处理的运动区域提取算法。在时域窗口内,首先对图象进行降级处理得到灰度带图象,对灰度带差分图象累积并进行数学形态学处理得到运动目标的轨迹模版,将轨迹模版与当前帧差分图象与运算得到当前帧运动目标象素,最后进行多级数学形态学处理得到当前帧运动区域。实验结果表明,该算法不仅能够对静止背景序列运动区域有较好的分割结果,而且在没有
8、进行全局运动补偿的情况下,对部分运动背景序列也能成功的提取出运动区域。 3。1.3研究人体姿态的特征描述 ’BoundingBox’ —— 包含相应区域的最小矩形 ’Orientation' 与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度) 3.2方案设计 根据设计要求确定视频监控中行人分割和人体姿态识别的方法,选择确定运动目标检测、行人人体姿态特征信息提取实现方法。画出流程图见附录2并对各部分功能进行说明。 (1)判断是否为人体 在目标提取之前,首先要对输入的图片进行检测。本文通过连通域的面积来检测判断目标是否为人体。 (2)人体目标提取 如果是人体导
9、入背景图片与背景图片做差,再通过背景差阈值分割法进行提取。 (4)行为识别 在解决了以上的问题之后,接下来就是要选择一种合适的算法来进行人体姿态识别,这也是本文研究的重点和难点。本文采用人体目标的连通区域的长宽比例和方向角的方法来对人体行为进行识别。 3.3程序设计 根据设计要求确定视频中行人检测和人体姿态特征信息提取方法,进行程序设计,编写实现程序,使用matlab等软件。 3。3.1图像分割中运动的运用(运动目标检测) 运动目标检测首先利用统计的方法得到背景模型,并实时地对背景模型进行更新以适应光线变化和场景本身的变化,用形态学方法和检测连通域面积进行后处理,消除噪声和背景扰
10、动带来的影响,在HSV色度空间下检测阴影,得到准确的运动目标. 该段程序读取了视频从100帧到400帧的图像。先对导入视频采用近似中值滤波背景模型参考图像实现运动目标分割,然后创建边长为3的方形结构元素,用于对分割结果形态学滤波。原视频、近似中值滤波后的视频以及采用形态学滤波后的视频如图3。3.1—1所示 图3。3。1—1原视频、近似中值滤波后的视频以及采用形态学滤波后的结果 videoObj = VideoReader('gyz。avi’); 本程序使用了VideoReader函数, 该函数用于读取视频文件对象. 函数调用格式: obj = VideoReader(filen
11、ame) obj = VideoReader(filename,Name,Value) 其中obj为结构体,包括如下成员: Name — 视频文件名 Path — 视频文件路径 Duration — 视频的总时长(秒) FrameRate — 视频帧速(帧/秒) NumberOfFrames - 视频的总帧数 Height — 视频帧的高度 Width - 视频帧的宽度 se = strel('square',3); 本程序通过创建方形结构元素,用于对分割结果形态学滤波。 pixInc = find(Idiff > 0); fmed(pixInc) = f
12、med(pixInc) + beta; pixDec = find(Idiff < 0); fmed(pixDec) = fmed(pixDec) - beta; 背景差分法别名背景减法,背景差分法的原理是将当前的图像与背景图像进行差分来得到目标区域,这种方法能很好的识别和提取运动目标,是目前运动分割中最常用的一种方法.但是需要构建一幅背景图像,这幅背景图像必须不含要检测的目标或其他不需要检测目标,并且应该能不断的更新来分辨当前背景的变化. 运用阈值法原理进行分割,阈值法是比较简单的图像分割方法,是一种常常运用的并行区域的技术。阈值是用运在区分目标图片和背景图片的灰度门
13、限。如果要检测的图像只有目标和背景两类,那么只需要选取一个阈值这种方法称为单阈值分割,这种方法是将图像中每个像素中的灰度值与阈值相对比,灰度值大于阈值的算一种,灰度值小于阈值的为另一种。如果图像中存在多个检测目标或无关目标,那么就选多个阈值将每个目标及背景区分开,这种方法称为多阈值分割阈值,由于本人只有一个目标则采用单阈值分割. fg2 = imopen(fg,se); fg2 = imclose(fg2,se); 对分割结果进行形态学滤波先进行了开操作,再进行闭操作。开操作是一般使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。闭操作可使轮廓线更光滑,但与开操作相反的是,闭操作通
14、常消弥狭窄的间断和长细的鸿沟,消除小的空洞,并填补轮廓线中的断裂。 3.3。2用bwlabel函数对连通域进行标号,并得到最大连通域 [L,num]=bwlabel(fg2,4);%对连通域进行标记,num=6 Bwlabel函数的用法:L = bwlabel(BW,n) [L,num] = bwlabel(BW,n),这里num返回的就是BW中连通区域的个数. 返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。本程序使用的是4连通。 四连通
15、或八连通是图像处理里的基本感念:8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通. all = [ img_reg.Area];%求出6个连通域的像素个数 [d,ind]=max(all);%得到面积最大的连通域 本段bwlabel函数是对连通域进行标号,标完号后利用“Area”属性的参数找到面积最大的连通域,这个连通域即为视频中的人。 3.3.3根据regionprops函数
16、的boundingbox和orientation的阈值分别检测视频中人体的站姿和躺卧两种姿势 or = [img_reg.Orientation]; 函数regionprops语法规则为:STATS = regionprops(L,properties) 该函数用来测量标注矩阵L中每一个标注区域的一系列属性。 L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。 返回值STATS是一个 长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。Properties可以是由逗号分割的字符串列表、
17、包含字符 串的单元数组、单个字符串'all’或者'basic'.如果properties等于字符串'all',则表4.1中的度量数据都将被计算;如果properties等于字符串'basic',则属性:’Area','Centroid’和'BoundingBox'将被计算。 bo = cat(1,img_reg。BoundingBox); cat:用来联结数组 用法:C = cat(dim, A, B) 按dim来联结A和B两个数组。 C = cat(dim, A1, A2, A3, .。.) 按dim联结所有输入的数组. Boundingbox用来表示包含相应
18、区域的最小矩形,它有四个参数分别为[x,y,width,height].
根据regionprops函数的boundingbox和orientation的参数,我们可以获得每一帧的图像的长宽比和方向角的参数。然后跟据这些数据来判断人体站立和躺卧来设置长宽比和方向角的范围,通过多次比对与测试,我认为站立的方向角从81~89,躺卧的方向角从-3~6,站立的长宽比从1。7~3躺卧的长宽比0.2~0.5是比较合适的。
if (or_m(n)>ori_low)&&(or_m(n) 19、);
elseif (or_m(n)>ors_low)&&(or_m(n)〈ors_high)
title(strcat('站立,NO. ', int2str(n)));
elseif title(strcat(’其他,NO. ', int2str(n)));
end
if ratio(n)〈bo_t1&&ratio(n)〉bo_t2
title(strcat('躺卧,NO。 ’, int2str(n)));
elseif ratio(n)〉bo_ 20、z1&&ratio(n)〈bo_z2
title(strcat('站立,NO。 ', int2str(n)));
elseif title(strcat('其他,NO. ’, int2str(n)));
end
本程序采用循环语句来判断图像每一帧的人体姿态,根据该帧图像的参数判断该参数处在哪一个的范围内,就可以在图像上方显示此时人体正处于的姿态,从而达到预期的效果,
下面的图片就是采用统一的参考视频根据所编的程序进行人体检测后所得到的结果。
在输出的图像中可以看到人体在站立时,视频的上方会出现“站立"的文字,如下图3.3.3 21、—1 所示
图3。3.3—1对站立姿势的判断
在躺卧时,视频的上方会出现“躺卧”的文字,如下图3.3—2 所示
图3。3—2对躺卧姿势的判断
在不是站立和躺卧时,视频的上方会出现“其他”的文字,如下图3.3—3 所示
图3.3。3—3对其他姿势的的判断
3.4程序调试
对编写的软件程序,以测试视频为例进行调试,根据结果,再使用另一个视频进行测试,并完善程序功能。
新视频中检测人体站立姿态的检测结果,如图3。4-1所示
图3.4—1对站立姿势的判断
新视频中检测人体躺卧姿态的检测结果,如图3.4—2所示
图3。4-2对躺卧姿势 22、的判断
新视频中检测人体其它姿态的检测结果,如图3.4-3所示
图3.4-3对其他姿势的的判断
通过比对,新视频的结果基本上达到了预期的效果,说明本次设计的程序可以实现对人体姿态的站姿与躺卧姿态的检测。
结论与致谢
本次课程设计是通过matlab编程以实现对视频中人体站姿与躺卧两种姿态的检测,它的应用在实际生活中有很大的意义与价值。
通过这次课程设计,我摆脱了单纯的理论知识状态,锻炼了我的综合运用专业知识的实际设计,提高我查阅文献资料的水平,也由课程设计,这给我写的论文的能力得到提高.尽管课程设计的 23、过程很繁琐,内容复杂,但是它让我收获更加丰富。让我对于理解和使用MATLAB程序设计得到了提高和加深,通过和老师沟通,我也对自己的设计有新的要求和更深刻的了解。
在设计过程中,程序始终困扰着我,尤其是bwlabel和regionprops这两个函数,因为在这个领域只是刚刚入门,也可以说是只懂一些简单的指令,为了做出满意的效果,我查阅了很多相关资料,并且根据程序内容进行许多次的改写与调试,除此之外还经常求教与老师帮忙解决问题,老师也很耐心的解决了我的问题,使我的设计指导的问题得以解决。这让我意识到,不管在什么时候,我们都必须学会与他人沟通。正是这样的设计让我积累了大量的实践经验,相信脑海里的 24、知识,让我在今后的工作中表现出较高的弹性和学习,更多的理解和沟通能力。
在最后,我十分感谢指导老师的细心指导与讲解,让我有了巨大的进步。
参考文献
[1] 罗万盈.基于单目视觉的人体运动姿态捕捉研究与实现[D].北京交通大学,2015.
[2] 陈硕。 基于视频序列的人体姿态检测与估计系统[D].东南大学,2012..
[3] 杨丹, 赵海滨, 龙哲等。MATLAB图像处理实例详解 [M].清华大学出版社, 2013.
[4] Nehmer, J., Becker, M., Karshmer, A., Lamm, R. Liv 25、ing assistance systems—an ambient intelligence approach[C]// The 28th International Conference on Software Engineering, ACM, USA, New York, 2006: 43–50。
[5] 孔晓东.智能视频监控技术研究[D].上海:上海交通大学,2008.
[6] [美]Richard O。Duda, 模式分类[M]。北京:机械工业出版社,2003.
[7] 冈萨雷斯。数字图像处理(MATLAB)中文版[M]。北京:电子工业出版社,2007
[8] 常好丽.运动 26、行人检测与跟踪方法研究[D] 。陕西:西北工业大学,2006。
[9] 章毓晋.图像分割[M].北京: 科学出版社, 2001.
[10]Kentaro Toyama,et,al Wallflower: Principles and Practice of Background Maintenance. International Conference on Computer Vision, September 1999, Corfu, Greece。
附录1
% Approximate Median Filter bac 27、kground model for moving object segmentation.
%采用近似中值滤波背景模型参考图像实现运动目标分割
clear all; close all;
% Construct a videoreader class to read a avi file, first the ’car_parking.avi’ ,
% then the ‘highwayII_raw。avi'.
videoObj = VideoReader(’gyz.avi');
numFrames =videoObj。NumberOfFrames;
%Get the spee 28、d of the AVI movie in frames per second (fps)
FPS = videoObj。FrameRate;
% Read the first frame in the video sequence as the initial value
newframe = read(videoObj, 1);
fmed = double(newframe);
% Get the height, width, and number of color components of the frame
[height, width, numColor] = si 29、ze(newframe);
% Assign a value to the threshold
Threh = 20;
beta = 0.6;
fg = false(height, width);
ors_low=82;
ors_high=89;
ori_high=6;
ori_low=-3;
bo_t1=0.5;
bo_t2=0。2;
bo_z1=1。7;
bo_z2=3;
%创建方形结构元素,用于对分割结果形态学滤波
se = strel('square',3);
% To avoid consuming too much memories, read onl 30、y a one frame each time.
for n = 100:400
newframe = read(videoObj, n);
ﻩ% Calculate the differrence image between the new frame and fmed
Idiff = double(newframe) - fmed;
% Update the median of each pixel value
pixInc = find(Idiff 〉 0);
fmed(pixInc) = fmed(pixInc 31、 + beta;
pixDec = find(Idiff 〈 0);
fmed(pixDec) = fmed(pixDec) — beta;
% Motion segment, detection moving object by threholding Idiff
fg = abs(Idiff) 〉Threh;
if ( numColor == 3) % color image
fg = fg(:, :, 1) | fg(:, :, 2) | fg(:, :, 3);
end
%对分割结果进行形 32、态学滤波
fg2 = imopen(fg,se);
fg2 = imclose(fg2,se);
figure(1);
subplot(2,3,1), imshow(newframe);
title(strcat('Current Image, No. ', int2str(n)));
subplot(2,3,2), imshow(fg);
title(’Segmented result using Approximate Median Filter');
subplot(2,3,3), imshow(fg2); 33、
title('Segmented result using morphological filter’);
pause(0.01)
[L,num]=bwlabel(fg2,4);%对连通域进行标记,num=6
img_reg = regionprops(L, 'Area’, ’Orientation', 'boundingbox');
%测量标注矩阵 L中每一个标注区域的area、orientation、boundingbox属性。
all = [ img_reg.Area];%求出6个连通域的像素个数
[d,i 34、nd]=max(all);%得到面积最大的连通域
or = [img_reg.Orientation];
or_m(n)=or(ind);%得到视频每一帧的最大连通域的方向角
%对每一帧图像的方向角进行判断姿态
subplot(2,3,4), imshow(newframe);
if (or_m(n)〉ori_low)&&(or_m(n)<ori_high)
title(strcat('躺卧,NO. ', int2str(n)));
elseif (or_m(n)〉ors_low)&&(or_m(n 35、<ors_high)
title(strcat(’站立,NO。 ’, int2str(n)));
elseif title(strcat('其他,NO. ’, int2str(n)));
end
bo = cat(1,img_reg。BoundingBox);
ratio(n)= bo(ind,4)/bo(ind,3);
%对每一帧图像的长宽比进行判断姿态
subplot(2,3,5), imshow(newframe);
if ratio(n)<bo_t1&&rati 36、o(n)>bo_t2
title(strcat(’躺卧,NO. ’, int2str(n)));
elseif ratio(n)〉bo_z1&&ratio(n)<bo_z2
title(strcat('站立,NO. ’, int2str(n)));
elseif title(strcat('其他,NO. ', int2str(n)));
end
end
附录2
输出视频
输入视频
找到最大连通域
判断反向角和长宽比
检测人体的躺卧和站立
37、
MATLAB课程设计报告书
课题名称
基于MATLAB的车牌识别课程设计
姓 名
学 号
学 院
专 业
指导教师
2016年 6月 21日
基于MATLAB的车牌识别课程设计
目 录
一.课程设计目的……………………………………………
二.设计原理…………………………………………………
三.详细设计步骤……………………………………………
四. 设计结果及分析…………………………………………
五. 38、 总结………………………………………………………
六。 设计体会…………………………………………………
七。 参考文献…………………………………………………
一、课程设计目的
车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。
二、设计原理:
牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术.其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算 39、法、车牌字符分割算法和光学字符识别算法等。某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。
三、详细设计步骤:
1。 提出总体设计方案:
牌照号码、颜色识别
为了进行牌照识别,需要以下几个基本的步骤:
a.牌照定位,定位图片中的牌照位置;
b.牌照字符分割,把牌照中的字符分割出来;
c.牌照字符识别,把分割好 40、的字符进行识别,最终组成牌照号码。
牌照识别过程中,牌照颜色的识别依据算法不同,可能在上述不同步骤实现,通常与牌照识别互相配合、互相验证.
(1)牌照定位:
自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键.首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来.
车牌定位
对图像开闭运算
边缘提取
图像预处理增强效果图像
导入原始图像
流程图:
(2)牌照字符分割 :
按左右宽度切 41、割出字符
分析垂直投影找到每个字符中心位置
去掉车牌的框架
计算水平投影进行车牌水平校正
完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果.
(3)牌照字符识别:
字符依次分析显示误差最小的图片名字
分析之差最小的图片是哪张
与数据库的图片相减
切割出的字符送入库中
字符识别方法目前主要有基于模板匹配算法和基于人工神经网络 42、算法。基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。基于人工神经元网络的算法有两种:一种是先对待识别字符进行特征提取,然后用所获得特征来训练神经网络分配器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素不同程度上降低了牌照识别 43、的识别率,也正是牌照识别系统的困难和挑战所在.为了提高识别率,除了不断的完善识别算法,还应该想办法克服各种光照条件,使采集到的图像最利于识别。
2. 各模块的实现:
2。1输入待处理的原始图像:
clear ;
close all;
%Step1 获取图像 装入待处理彩色图像并显示原始图像
Scolor = imread('3.jpg');%imread函数读取图像文件
图2.1原始图像
2。2图像的灰度化:
彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理 44、速度。由彩色转换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。
%将彩色图像转换为黑白并显示
Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图
figure,imshow(Sgray),title('原始黑白图像');
图2。2原始黑白图像
2.3对原始图像进行开操作得到图像背景图像:
s=strel(’disk’,13);%strei函数
Bgray=imopen(Sgray,s);%打开sgray s图像
figure,imshow(Bgray); 45、title('背景图像’);%输出背景图像
图2。3背景图像
2.4灰度图像与背景图像作减法,对图像进行增强处理:
Egray=imsubtract(Sgray,Bgray);%两幅图相减
figure,imshow(Egray);title('增强黑白图像’);%输出黑白图像
图2。4黑白图像
2。5取得最佳阈值,将图像二值化:
二值图像是指整幅图像画面内仅黑、白二值的图像。在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阀值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用的形状信息,不会产生额外的空缺等等. 46、车牌识别系统要求处理的速度高、成本低、信息量大,采用二值图像进行处理,能大大地提高处理效率。阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某中像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。
fmax1=double(max(max(Egray)));%egray的最大值并输出双精度型
fmin1=double(min(min(Egray)));%egray的最小值并输出双精度型
level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值
bw22=im2bw(Egray,level);%转换图像为二进 47、制图像
bw2=double(bw22);
figure,imshow(bw2);title(’图像二值化');%得到二值图像
图2。5二值图像
2.6边缘检测:
两个具有不同灰度值的相邻区域之间总存在边缘,边缘就是灰度值不连续的结果,是图像分割、纹理特征提取和形状特征提取等图像分析的基础。为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。经过一阶的导数的边 48、缘检测,所求的一阶导数高于某个阈值,则确定该点为边缘点,这样会导致检测的边缘点太多。可以通过求梯度局部最大值对应的点,并认定为边缘点,去除非局部最大值,可以检测出精确的边缘.一阶导数的局部最大值对应二阶导数的零交叉点,这样通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。
grd=edge(bw2,’canny’)%用canny算子识别强度图像中的边界
figure,imshow(grd);title('图像边缘提取');%输出图像边缘
图2.6像边缘提取
2.7对得到图像作开操作进行滤波:
数学形态非线性滤波,可以用于抑制噪声,进行特征提取、边缘检测、图像分割等图像 49、处理问题。腐蚀是一种消除边界点的过程,结果是使目标缩小,孔洞增大,因而可有效的消除孤立噪声点;膨胀是将与目标物体接触的所有背景点合并到物体中的过程,结果是使目标增大,孔洞缩小,可填补目标物体中的空洞,形成连通域。先腐蚀后膨胀的过程称为开运算,它具有消除细小物体,并在纤细处分离物体和平滑较大物体边界的作用;先膨胀后腐蚀的过程称为闭运算,具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。对图像做了开运算和闭运算,闭运算可以使图像的轮廓线更为光滑,它通常用来消掉狭窄的间断和长细的鸿沟,消除小的孔洞,并弥补轮廓线中的断裂。
bg1=imclose(grd,strel('rectangle',[5 50、19]));%取矩形框的闭运算
figure,imshow(bg1);title(’图像闭运算[5,19]');%输出闭运算的图像
bg3=imopen(bg1,strel(’rectangle’,[5,19]));%取矩形框的开运算
figure,imshow(bg3);title('图像开运算[5,19]’);%输出开运算的图像
bg2=imopen(bg3,strel(’rectangle',[19,1]));%取矩形框的开运算
figure,imshow(bg2);title(’图像开运算[19,1]');%输出开运算的图像
图2.7。1闭运算的图像






