确定图像中人物存在的程序设计.docx
- 文档编号:7918455
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:13
- 大小:141.35KB
确定图像中人物存在的程序设计.docx
《确定图像中人物存在的程序设计.docx》由会员分享,可在线阅读,更多相关《确定图像中人物存在的程序设计.docx(13页珍藏版)》请在冰豆网上搜索。
确定图像中人物存在的程序设计
1绪论
1.1差影法应用介绍
图像相减技术又叫做差影法或者差分运算,差影法常用于检测变化及运动的物体,差分方法可以分为可控环境下的简单的差分方法和基于背景模型的差分方法。
在可控环境下,或者很短的时间内,可以认为背景是固定不变的,可以直接使用差分运算检测变化的或者运动的物体。
将同一景物在不同时间拍摄的图像或者同一景物在不同波段的图像相减,这就是差影法,实际上就是图像的减法运算。
差值图像提供了图像间的差值信息,能用于指导动态监测、运动目标的检测和跟踪、图像背景的消除及目标识别等。
差影法在自动现场检测等领域具有广泛的运用。
比如说可以应用在监控系统中,在银行金库内,摄像头每隔一个固定时间拍摄一幅照片,并与上一幅图片进行差影运算,如果图像差超过了预先设定的阈值,则表明可能有异常情况发生,应自动或者以某种方式报警。
差影法可用于检测变化目标及遥感图像的动态检测,利用差值图像可以发现森林火灾、洪水泛滥,监测灾情变化及估计损失等;也可利用与监测河口、海岸的泥沙淤积及监视江河、湖泊、海岸等的污染。
利用差影法还可以鉴别出耕地及不同作物的覆盖情况。
差影技术还可以用于消除图像背景用于混合图像分离。
1.2仿真软件介绍
在20世纪70年代中期,CleveMoler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库。
EISPACK是特征值求解的FORTRAN程序库,LINPACK是解线性方程的程序库。
在当时,这两个程序库代表矩阵运算的最高水平。
到20世纪70年代后期,身为美国NewMexico大学计算机系系主任的CleveMoler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。
CleveMoler给这个接口程序取名为MATLAB,该名为矩阵(matrix)和实验室(laboratory)两个英文单词的前三个字母的组合。
在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传。
1983年春天,CleveMoler到Stanford大学讲学,MATLAB深深地吸引了工程师JohnLittle。
JohnLittle敏锐地觉察到MATLAB在工程领域的广阔前景。
同年,他和CleveMoler、SieveBangert一起,用C语言开发了第二代专业版。
这一代的MATLAB语言同时具备了数值计算和数据图示化的功能。
1984年,CleveMoler和JohnLithe成立了MathWorks公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发。
在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类。
一类是数值计算型软件,如MATLAB、Xmath、Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,如Mathematica、Maple等,这类软件以符号计算见长,能给出解析解和任意精度解,其缺点是处理大量数据时效率较低。
MathWorks公司顺应多功能需求之潮流,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算、文字处理、可视化建模和实时控制能力,开发了适合多学科、多部门要求的新一代科技应用软件MATLAB。
经过多年的国际竞争,MATLAB已经占据了数值型软件市场的主导地位。
在MATLAB进入市场前,国际上的许多应用软件包都是直接以FORTRAN和C语言等编程语言开发的。
这种软件的缺点是使用面窄、接口简陋、程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。
MATLAB的出现,为各国科学家开发学科软件提供了新的基础。
在MATLAB问世不久的20世纪80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。
时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科、多种工作平台的功能强劲的大型软件。
在国外,MATLAB已经经受了多年考验。
在欧美等高校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。
一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点。
正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。
MATLAB的最突出的特点就是简洁。
MATLAB用更直观的、符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。
MATLAB给用户带来的是最直观、最简洁的程序开发环境。
1.3本次设计要求
本次要求设计的是差影法的运用。
提供两张图片,同一个场景,一张有人,一张没有人,数字化一幅有人存在的图像和一幅没有人在场的图像,用第一副图像减去第二副图像以显示人的存在。
由于设计中用到的差影法即是图像相减技术,而MATLAB软件内带丰富的数学公式计算功能,运用imsubtract函数即能完成要求的功能。
由于本次要求实现的功能不高,为了充分体现此次课程设计的水平和质量,做了适当的发挥:
首先题目给出的背景图片可由原图通过适当的函数来生成,第二可由提供一幅真彩图,然后通过软件转换成为二值图和灰度图,第三通过差影法生成只含人物的图片,第四通过加法合成又恢复原图。
2MATLAB相关知识
2.1MATLAB实现数字图像处理常用函数
(1)读图像
函数为f=imread(‘filename’);支持格式为tiff、jpeg、gif、bmp、png、xwd。
若命令行中没有加分号,则MATLAB将立即显示该行命令中指的运算结果。
[m,n]=size(f);将返回图像f的行数m和列数n。
whosf显示一个数组的附加信息,有无分号都一样。
(2)显示图像
函数为imshow(f,G);f为图像,G为显示干图像的灰度级数,默认为256。
Imshow(f,[low,high]);所以小于等于low的值都显示为黑色,所以大于等于high的值都显示为白色,两者之间的都以默认的技术显示为中等亮度值。
Imshow(f,[])将low设置为数组f的最小值,high设置为最大值,对显示动态范围较小会很有用的。
(3)保存图像
函数为imwrite(f,’filename’);imwrite(f,’filename’)将f写完tiff格式且命令为filename的文件。
(4)数据间的转换
B=dataname(A);例如:
b=uint8(a);
(5)显示标题
函数为title(‘’);通过这个函数来显示所生成图片的标注,提高文件的可读性;
(6)一些重要的标准数组
Zeros(m,n),生成一个大小为m*n的double类矩阵,其元素均为0;
Ones(m,n),产生一个大小为m*n的double类矩阵,其元素均为1;
2.2差影法相关函数
由于差影法用到的就是图像的减法运算,因此这里介绍下减法运算,减法运算通常用于检测变化及运动物体,图像减法运算又称为图像差分运算。
在可控环境下,或者在很短的时间内,可以认为北京是固定不变的,可以直接使用差分运算检测变化或者运动的物体。
减法运算要注意的是相减的两幅图片大小要对应相等,而且是相同位置坐标上的点的相减,不然就会产生错误,C(x,y)=A(x,y)-B(x,y);
2.3取背景函数
由于此次设计的题目相对简单,所以做了写扩展功能,本来设计要求已经给出了背景图片,但是这里不用这个图片,而是直接调用系统的函数来实现背景的截取,相关的函数功能函数是:
imopen对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。
用法:
IM2=imopen(IM,SE)
IM2=imopen(IM,NHOOD)
IM2=imopen(IM,SE)用结构元素SE实现灰度图像或二值图像的IM的形态开运算。
s=strel(‘disk’,5)是生成一个半径为5的圆盘,即是用这个函数来实现图形中人物范围的确认,最后通过上面开运算从图像中分离出图像的背景。
当然对于一幅简单的图片,也可以采用中值滤波的方法来提取图片的背景,在要求精度不高的情况下比较实用。
3程序设计
3.1程序设计思想
要实现图像中人物的确定,根据差影法的思想可知,首先要读入一幅图片,将一幅真彩图转化为灰度图片,然后用开运算函数获取图片的背景,当然也可以直接运用提供的背景图片,最后就是将两幅图片相减,最后得到的就是图片中滤去背景后的图片。
这次分两个部分来实现,首先是基本功能的实现,其次是拓展的功能。
3.2程序流程图
图1基本功能流程图
图2拓展功能程序流程图
3.3程序代码
%***基本功能代码***%
i=imread('bushi.jpg');%显示原图
figure,imshow(i);
title('原图显示');
I=rgb2gray(i);%真彩图转换成灰度图
figure,imshow(I);
title('灰度图显示');
j=imread('bushi1.jpg');%显示原图
figure,imshow(j);
title('原图显示');
J=rgb2gray(j);%真彩图转换成灰度图
figure,imshow(j);
title('灰度图显示');
rw=I-J;
figure,imshow(rw);
title(‘人物显示’);
%***拓展功能代码***%
i=imread('bushi.jpg');%显示原图
figure,imshow(i);
title('原图显示');
I=rgb2gray(i);%真彩图转换成灰度图
figure,imshow(I);
title('灰度图显示');
bw1=im2bw(I);%显示灰度图的二值化图
figure,imshow(bw1);
title('二值化图显示');
s=strel('disk',5);%创建圆盘半径为5
beijing=imopen(I,s);%对图像实现开运算,显示背景
figure,imshow(beijing);
title('背景图片显示');
rw=I-beijing;
figure,imshow(rw);
title('人物显示');
hecheng=beijing+rw;%人物和背景合成
figure,imshow(hecheng);
title('背景和人物合成图');
jian=I-hecheng;
figure,imshow(jian);
title('灰度图和合成图的差图');
4MATLAB仿真
4.1仿真步骤
(1)运行MATLAB软件,然后新建一个编辑窗口;
(2)编写代码,调试,指导代码运行通过;
(3)在窗口中运行代码,然后显示记录最后的结果。
4.2基本功能仿真结果显示
要实现图像中人物的确定,根据差影法的思想和课设的基本要求,首先读入两幅真彩图片,一幅有人物,一幅没有人物,然后将两幅真彩图转换为灰度图,结果如下所示:
图3原图的灰度图显示
通过原图的灰度图片和背景图片相减,可以得到如下的人物图片,由于选取的图片和背景比较合适,所以产生出来的图片效果很好。
图4相减后人物显示
4.3拓展功能仿真结果显示
要实现图像中人物的确定,根据差影法的思想可知,通过运行编辑的差影法代码,读入一幅真彩图片,如下图所示:
图5显示原图
由于目前处理的都是灰度图片,而且在黑白打印的课程设计报告书中,灰度图片的效果更好些,所以进行灰度变化,显示的图片如下所示:
图6灰度图片显示
由于此次设计的题目比较简单,所以做了如下的扩展功能,显示灰度图像的二值化图片,因为二值化图片中只有黑白,即数字化结果只有0或者1,所以图片的显示效果很不清晰,通过程序实现的二值化结果图片如下所示:
图7二值化图片显示
根据此次设计的要求是设计提供原图和背景图片,但是那样子本次课设的任务就过于简单,所以基于这个原因做了如下的扩展功能,不用题目给出的背景图片,而是通过原图用程序生成一个背景图片,当然不同的背景图片产生的效果不一样,因为是生成的一个半径为5的圆盘来滤除背景图片,程序运行的结果图片如下:
图8背景图片显示
通过开运算imopen()已经从远图片中分离得到了背景图片,而且从运行产生的图片可知背景图片良好,那么接下来就可以用差影法由原图和生成的背景图片来得到图片中的人物的画面,实际上就是运用了图片的减法运算,得到人物如下图所示:
图9原图中的人物显示
按照课设的要求,做到这一步就已经完成了此次设计的人物要求,但是为了验证所分离的人物图片和背景图片有没有失真,我们可以进行下一步的验证工作,就是用产生的人物图片和产生的背景图片叠加,生成一幅合成图片,通过对比合成图片和原图的灰度图来判断图片生成过程中有没有失真,进而可以得出数字图像处理技术的一个特点,就是图像的内容是用数字量化的数组,在运算过程中不会造成图片的失真和破坏。
产生的合成图如下所示,通过对比发现,两幅图没有失真现象。
图10背景和人物合成图
如果不相信人的肉眼的判断能力,那么我们还可以进一步做如下图的验证,就是将原图的灰度图像和合成的图像相减,最后得到的图片如果为全黑,那么就说明在数字图像处理的过程中图片不会产生失真,如何得到的不是全黑图片,那么就认为数字图像处理过程中使图片发生了失真现象。
下图为全黑图片,验证了数字图像处理过程不会产生图片质量失真的现象。
图11原图灰度图和合成图的差图
5仿真结果分析
要实现图像中人物的确定,根据差影法的思想可知,首先要读入一幅图片,将一幅真彩图转化为灰度图片,然后用开运算函数获取图片的背景,当然也可以直接运用提供的背景图片,最后就是将两幅图片相减,最后得到的就是图片中滤去背景后的图片。
此次课设的任务要求是运用差影法来检查给出的两幅图中人物的存在,那么首先通过读图函数imreda()来实现一幅图片的输入,然后通过灰度转换函数rgb2gray()来实现将输入的真彩色图片转换成为灰度图片,通过如上的两步来产生本次课设要求处理的原始图片。
接下来使用函数生成背景图片,由于课设题目要求已经给出了背景图片,笔者为了扩展课设的功能,就不用给出的背景图片,而是利用函数通过原图来产生背景图片。
先用函数strel('disk',5)来产生一个半径为5的圆盘,在此范围外的为图片的背景部分,然后通过图片开运算函数imopen()来实现图片背景的分离,从而得到图片的背景。
最后通过差影法的运算就可用原图和产生的背景图片来实现图片中人物的分离确定。
这样基本上此次课设的要求功能全部实现。
在完成基本功能实现的基础上,本次设计的程序完成了几个功能的扩展,具体的扩展功能如下:
(1)实现了利用原图来产生背景图片,而不是用题目要求给出的背景图片;
(2)实现了灰度图片的二值化;
(3)通过将得到的背景图片和分离的人物图片合成,比较合成图和原灰度图可知数字图像处理过程中图片不会产生失真现象;
(4)通过将得到的合成图和原灰度图进行差影法运算,得到的插图为全黑图片进一步验证上面的结论。
6心得体会
通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计通过查阅资料、分析指标及讨论,完成设计任务。
在这次课程设计中,我学会了怎样去根据课题的要求去设计。
从中我发现自己并不能很好的熟练去使用我所学到的知识。
在以后学习中我要加强对设计和选用能力。
但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。
把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。
这对今后从事技术工作无疑是个很好的训练。
通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。
同时也让我充分认识到自己的空想与实践的差别,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。
还有就是每次在组团做试验都会感觉特别的充实,我们可以按照自己设计的电路去完成,老师也不是死板的要求我们怎么怎么,而是给了我们尽可能大的自己决定的余地,这次的元器件都是按照我们设计出来的电路参数给定的,而且每位老师都很耐心的为我们解决试验中所出现的问题,最后真心的感谢老师对我们课程设计的建议和帮助,我们才得以圆满的完成这次课程设计!
参考文献
[1]杨杰,黄朝兵.数字图像处理及MATLAB实现.北京:
电子工业出版社,2010
[2]刘志俭.MATLAB应用程序接口用户指南.北京:
科学出版社,2005
[3]张迎新.MATLAB原理、应用及接口技术.北京:
国防工业出版社,1999
[4]高峰.MATLAB应用系统设计及使用技术.北京:
机械工业出版社,2007
[5]彭伟.C++语言程序设计实例基于MATLAB仿真.北京:
电子工业出版社,2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 确定 图像 人物 存在 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)