数字图像处理姚敏
- 格式:ppt
- 大小:7.82 MB
- 文档页数:90
华北水利水电大学North China University of Water Resources and Electric Power 数字图像处理课设题目基于MATLAB的复杂图像目标提取课程名称数字图像处理学院信息工程学院专业通信工程目录摘要在我们日常生活中,由于工作等各种需要,我们往往会对图像进行各种处理,其中就包括对复杂图像目标提取,当然有很多的处理方法本次主要是在用MATLAB对图像做基本的处理来提取目标图像特征。
本次课设用MATLAB处理时,首先对图片进行基础的处理,包括彩色图像转化为灰色图像的处理、二值处理、直方图的分析、滤波处理以及利用各种算法对图像进行边缘化处理等操作。
然后采用合适的方法对图像目标做最终的提取。
在本次课设中,我采用的是利用MATLAB生成图片的直方图,然后从直方图上得出不同颜色所对应的灰度,再灰度对不同颜色的图像分别进行提取。
但是此方法有一个很大的局限性,就是无法处理相同颜色的目标图像,因此经过对资料的查阅和老师的帮助,我找到了解决方法,对相同颜色的图像进行区域划分,然后再对处于不同区域的目标图像分别进行提取。
关键词:图像目标提取 MATLAB 灰度区域提取一、设计要求自选一幅图像,确定要选择的目标区域,编写合适的程序,然后用MATLAB 或VC+Opencv对目标图形进行提取,要求对图像做基础的处理,包括图像的读取,存储,去噪,边缘检测等触及处理。
二、设计原理和方案在实际图像处理中,一般情况下我们只是注意到图像中那些我们感兴趣的目标,因为只有这部分也就是我们注意到的有用的目标物才能为我们提供高效、有用的信息。
而这些目标一般又都对应着图像中某些特定的、具有独特性质的区域。
为了把这些有用的区域提取出来供我们人类使用,我们对图像的提取做了很多的研究。
本次课设采用的原理主要是用MATLAB处理,首先对图片进行基础的处理,包括彩色图像转化为灰色图像的处理、二值处理、直方图的分析、滤波处理以及利用各种算法对图像进行边缘化处理等操作。
《数字图像处理》课程教学大纲Digital Image Processing一、课程说明课程编码:045236001 课程总学时(理论总学时/实践总学时):51(42/9),周学时:3,学分:3,开课学期:第6学期。
1.课程性质:专业选修课2.适用专业:电子信息与技术专业3.课程教学目的和要求《数字图像处理》是信号处理类的一门重要的专业选修课,通过本课程的学习,应在理论知识方面了解和掌握数字图像的概念、类型,掌握数字图像处理的基本原理和基本方法:图像变换、图像增强、图像编码、图像的复原和重建。
并通过实验加深理解数字图像处理的基本原理。
4.本门课程与其他课程关系本课程的先修课程为:数字信号处理和应用5.推荐教材及参考书推荐教材:阮秋琦,《数字图像处理学》(第二版),电子工业出版社,2007年参考书(1)姚敏等,《数字图像处理》,机械工业出版社,2006年(2)何东健,《数字图像处理》(第二版),西安电子工业出版社,2008年(3)阮秋琦,《数字图像处理基础》,清华大学出版社,2009年(4) (美)Rafael C. Gonzalez著,阮秋琦译,《数字图像处理》(第二版),电子工业出版社,2007年6.课程教学方法与手段主要采用课堂教学的方式,通过多媒体课件进行讲解,课外作业,答疑辅导。
并辅以适当的实验加深对数字图像处理的理解。
7.课程考核方法与要求本课程为考查课课程的实验成绩占学期总成绩的50%,期末理论考查占50%;考查方式为笔试。
8.实践教学内容安排实验一:图像处理中的正交变换实验二:图像增强实验三:图像复原详见实验大纲。
二、教学内容纲要与学时分配(一)数字图像处理基础(3课时)1.主要内容:图像处理技术的分类,数字图像处理的特点,数字图像处理的主要方法及主要内容,数字图像处理的硬件设备,数字图像处理的应用,数字图像处理领域的发展动向2.基本要求:了解图像处理技术的分类和特点,数字图像处理的主要方法及主要内容,熟悉数字图像处理的硬件设备。
数字图像处理课程教学大纲(理论课程)◆课程编号:130128◆课程英文名称:Digital Image Processing◆课程类型:☐通识通修☐通识通选☐学科必修√学科选修☐跨学科选修☐专业核心√专业选修(学术研究)☐专业选修(就业创业)◆适用年级专业(学科类):四年级电子信息工程专业、通信工程(专业电气信息类)◆先修课程:信号与系统、数字信号处理、线性代数、概率统计◆总学分:2◆总学时:34一、课程简介与教学目标数字图像处理时模式识别,计算机视觉,图像通信,多媒体技术等学科的基础,是一门涉及多领域的交叉学科。
通过本课程的学习,使学习者系统地了解数字图像的基本概念、数字图像形成的原理,掌握数字图像处理的理论基础和技术方法,了解与各种处理技术相关的应用领域。
为学生今后从事数字图像信息处理工作奠定坚实的理论基础。
二、教学方式与方法教学方式:课堂讲授(以多媒体课件为主导)和课下上机实践相结合;教学方法:采用以BTEC(Business Technology Education Council)模式为主,以TBL(task-based learning)任务型模式为辅的两种教学模式相结合的教学方法。
用任务引导学习,更注重学生个性的发展和个人潜能的开发,考核以平时的课业、表现、出勤、学习态度和最后的考试共同衡量学生的学习水平,达到教学目的。
三、教学重点与难点(一)教学重点重点是第4章图像增强、第6章图像复原、第7章图像分割;(二)教学难点难点是第3章图像变换和第6章图像复原。
四、学时分配计划五、教材与教学参考书(一)教材1.《数字图像处理与分析》,刘直芳、王运琼、朱敏,清华大学出版社,2006;2.《数字图像处理(第二版》,R. C. Gonzalez和R. E. Woods(美国),电子工业出版社,2006;(二)教学参考书1.《图像工程(上册):图像处理》,章毓晋,清华大学出版社,2006;2.《图像工程(中册):图像分析》,章毓晋,清华大学出版社,2005;3.《数字图像处理学》,阮秋琦,电子工业出版社,2003;4.《数字图像处理》,陈天华,清华大学出版社,2007;5.《数字图像处理》,姚敏,机械工业出版社,2006;六、课程考核与成绩评定【考核类型】√考试☐考查【考核方式】☐开卷(Open-Book)√闭卷(Close-Book)☐项目报告/论文☐其它:(填写具体考核方式)【成绩评定】平时成绩占(30-40)%,考试成绩占(70-60)%七、课程内容概述第一章绪论(一)教学要求了解数字图像处理的基本概念和特点,研究的目的和意义,数字图像图像处理的主要研究内容,国内外研究现状与发展趋势,主要应用领域。
DSP技术及应用课程设计报告课题名称:数字图像处理——二值化学院:电气信息工程学院专业:通信工程班级:姓名:学号:指导教师:董胜成绩:日期:2014.6.9-2014.6.20目录一、设计目的及要求 (2)二、设计所需的软件介绍 (2)三、设计原理 (3)四、程序流程图 (6)五、设计程序 (7)六、处理后的效果展示 (11)七、课程设计心得 (15)八、参考文献 (16)一、设计目的及要求:目的:1、掌握CCStudio3.3的安装和配置;2、掌握数字图像处理的原理、基本算法和各种图像处理技术;3、掌握图像的灰度化、二值化和灰度直方图的原理及编程思路;4、掌握图像滤波(图像锐化、中值滤波、边缘检测、特征识别等)的基本原理及编程方法及编程思路;要求:1、能够根据设计题目要求查阅检索有关的文献资料,结合题目选学有关参考书。
查询相关资料,初步制定设计方案。
2、用CCS软件进行C语言设计相关算法,实现对图像的采集及处理。
3、编写相应的C语言程序实现各种图像处理。
二、设计所需的软件介绍:英文全称:Code Composer Studio 中文译名:代码调试器,代码设计套件。
CCS的全称是Code Composer Studio,它是美国德州仪器公司(Texas Instrument,TI)出品的代码开发和调试套件。
TI公司的产品线中有一大块业务是数字信号处理器(DSP)和微处理器(MCU),CCS便是供用户开发和调试DSP和MCU程序的集成开发软件。
Code Composer Studio v3.3 (CCStudio v3.3) 是用于 TI DSP、微处理器和应用处理器的集成开发环境。
Code Composer Studio 包含一整套用于开发和调试嵌入式应用的工具。
它包含适用于每个 TI 器件系列的编译器、源码编辑器、项目构建环境、调试器、描述器、仿真器以及多种其它功能。
Code Composer Studio IDE 提供了单个用户界面,可帮助您完成应用开发流程的每个步骤。
基于数字图像处理的桥梁裂缝检测技术摘要:混凝土结构由于其价格低廉、取材方便、外观可塑性强、力学性能优越且易于养护的特点,早已成为业内使用最为广泛的建筑材料。
然而,大量调研结果显示,大部分混凝土桥梁都是带裂缝工作的,裂缝是桥梁建设中常见的病害,小裂缝一般对结构影响不大,能够允许其存在,而大裂缝将间接甚至直接影响结构的使用寿命和安全性能。
我国规范已经针对裂缝问题给出一定的限制,以保证混凝土结构正常使用。
近年来,我国的交通事业发展迅猛,全国各地兴建了许许多多的钢筋混凝土桥梁。
然而桥梁的修建和使用过程中,由于混凝土结构的裂缝问题导致桥梁出现安全隐患甚至垮塌的事故早已不是新闻。
桥梁结构开裂一直是混凝土结构的常见病害。
关键词:桥梁裂缝;数字图像处理;裂缝检测系统在诸多桥梁病害中,桥梁裂缝是一种危及桥梁安全但却较难计测的一种破损状态。
目前对此类病害的检测多停留在人工作业阶段,通常使用近距离的检测仪器将裂纹放大后对宽度进行检测,裂纹的长度则是靠不精确的测量或者估算得到,这种方法需要检测人员借助桥梁检测车或者搭架进行,因此工作强度大、检测费用高昂且对人员安全要求很高。
近些年来,随着科学技术的进步以及计算机数据处理能力、速度、容量等性能的提高和数字摄像技术的发展,数字图像处理技术已广泛用于办公自动化、工业机器人、地理数据处理以及医学等相关领域。
在工业工程方面已成功应用于检测构件表面变形及损伤、叶片面积以及构件受复杂应力的研究。
鉴于国内当前桥梁检测技术的不足以及数字图像技术的优势,开展基于图像处理技术的桥梁裂缝自动识别技术的研究,对保障桥梁运营安全、降低检测成本、推动我国交通事业的快速发展具有重要的意义。
本文针对桥梁裂缝病害的定期检测任务,综合运用图像采集技术、图像识别技术以及图像信号分析技术,研究开发出了一种适用于较远距离的、操作简单的、快速且准确的桥梁裂缝快速检测系统。
1数字图像处理的主要特点1.1图像质量稳定传统的模拟图像因分辨率的不同会造成图像质量的变化,在存储和复制等操作过程中,有可能会因影响图像本身的一些操作造成图像质量降低,因此图像质量稳定性能差;而如果图像经过准确的数字化之后,就可以在进行任何与图像相关的操作,都不会改变图像质量,提高了图像质量的稳定程度。
专业实习报告2013---2014学年第一学期2013年12月23日至2014年1月10日题目:基于内容地图像检索专业:信息计算科学二0一四年一月目录1.专业实习目地22.概要描述和要求22.1概要简介22.2技术要求22.3环境要求33.本人地分工34.具体内容34.1 基于内容地图像检索简介34.1.1颜色直方图44.1.2主要方法与公式44.2 项目框架54.2.1系统架构54.2.2网站结构和包结构74.2.3数据库设计84.3 主要工作95. 研究与探讨105.1解决地问题105.2问题和不足之处105.3设计感想10参考书目11附录11基于内容地图像检索1.专业实习目地(1)提高学生综合应用所学专业知识地能力,同时进一步提升学生地科研能力、创新能力和实践动手能力,为毕业设计、就业作准备.(2)调查研究、查阅文献、分析论证、制定方案、设计或实验、分析总结等方面地独立能力训练,从而锻炼实践才干.(3)在注重知识素养和实践能力地同时,提升学生地领导组织能力和团队协作能力,培养最基本地工作素质.2.概要描述和要求2.1概要简介基于内容地图像检索不同于基于文本地检索,主要利用图像地某一特征,对存储在数据库等存储介质中地图像进行相似度匹配,得到一个匹配序列.应该来说,基于内容地图像检索是一个不错地选题.它不仅具有一定地理论深度和研究热度,对提升个人或团队地实践能力也有一定地帮助;同时,它是我比较感兴趣和比较了解地课题内容.因此,确定基于内容地图像检索为本次专业实习地课题.基于内容地图像检索系统采用地是B/S结构模式,使用面向对象JAVA语言,利用Struts2 2.1.8.1+Hibernate 3.3+Spring 2.0当前主流三大框架,将系统从责任上分为表现层、控制层、业务层、领域对象层及数据持久层五个层级进行开发.2.2技术要求✧开发框架:Model-View-Controller,即MVC✧开发工具:Java Struts2+Hibernate+Spring✧开发环境:MyEclipse8.5+Dreamweaver CS3+Photoshop CS3✧数据库系统:Mysql2.3环境要求✧项目名称:基于内容地图像检索(CBIR)✧运行环境:windows操作系统✧服务器:采用了apache-tomcat-6.0.33配合Mysql搭建服务器✧客户端:各大主流浏览器3.本人地分工在解决这个有一定深度和广度地有实际意义地项目过程中,我作为组长,主要工作是确定本次专业实习地研究课题,确定小组成员,分配各自地任务,协调和督促项目地进度,保证项目按时顺利完成,保证每个组员都参与进来.在专业实习期间,我主要完成网站项目地建立和网站功能与算法地实现,负责最重要地工作,解决碰到地最主要难题.具体工作包括编写jsp页面、html页面、js文件、css文件,创建action、bean、dao、entity和utils包,实现绝对值距离、距离法和聚类分析等图像检索算法,完成整个网站整体地功能测试和性能测试,修复网站地bug,准备小组答辩等.4.具体内容4.1 基于内容地图像检索简介基于内容地图像检索不同于基于文本地检索,主要利用图像本身地特征匹配,在数据库中查找相似地图片.图像地主要特征包括了颜色特征,纹理特征,形状特征和其它特征,其示意图如下:图-1其中,颜色特征常用地有颜色直方图,纹理特征主要用小波特征,形状特征主要用边界检测,而其它特征包括了空间特征等等.对于本次专业实习来说,主要使用地是基于颜色直方图地颜色特征,而算法原理对其余特征也是适用地.4.1.1颜色直方图颜色特征是图像最直观而明显地特征,一般采用直方图来描述.而颜色直方图法具有运算速度快、存储空间要求低地特点,并且对图像地尺度及旋转变化不敏感.因此颜色直方图已经得到了广泛地运用.颜色地统计直方图如下所示:图-24.1.2主要方法与公式• 曼哈顿距离(城市街区距离)令QH 和D H 分别为查询图像Q 和数据库图像D 地某一特征统计直方图,则两图像之间地相似值为:• 距离法MPEG-7中建议地颜色布局描述符在匹配时使用了类似地距离公式:它地处理步骤如下:(1)将图像分成4*4,计算每一块中所有像素RGB三个颜色通道地颜色平均值,并以此作为该块地代表颜色(2)将各块地颜色平均值进行离散余弦变换(DCT),得到DCT系数矩阵(3)对DCT系数矩阵进行之字形扫描和量化,得到DCT系数(4)对于R、G、B三个通道,分别从DCT系数中取出4个低频分量,形成12个参数,共同构成该图像地颜色特征向量•聚类分析-AGNES输入:包含n个对象地数据库,终止条件簇地数目k输出:k个簇,达到终止条件规定簇数目(1)将每个对象当成一个初始簇;(2)REPEAT(3)根据两个簇中最近地数据点找到最近地两个簇(4)合并两个簇,生成新地簇地集合(5)UNTIL 达到定义地簇地数目•查准率(precision)和查全率(recall)在基于内容地图像检索中,由于检索算法比较多,需要对各种算法地检索结果进行评判,以比较其优劣.从研究情况来看,对于系统地响应时间和吞吐率地评价论述较少,对检索效果评价更多地放在对检索结果地准确与否,主要指标有查准率和查全率,其计算公式如下所示:查全率=(有关联地正确检索结果)/(所有有关联地结果)×100%查准率=(有关联地正确检索结果)/(所有检索结果)×100%4.2 项目框架4.2.1系统架构图-3 系统架构图图-4 系统架构图说明:CBIR系统主要是根据当前比较主流地分层方式将系统分为表现层、控制器层、业务逻辑层、数据持久层和域对象层.各层主要承担地责任:表现层:通俗讲就是展现给用户地界面,即用户在使用一个系统地时候其地所见所得.其中该层主要根据MVC地设计模式,以实现业务逻辑和数据显示分离,从而降低系统耦合度,提高重用性及其系统地可维护性.主要有JSP、Velocity、PDF文档视图.控制器层:由系列控制器组成,用于拦截用户请求,并调用业务逻辑组件地业务逻辑方法,处理用户请求,并根据处理结果转发到不同地表现层组件.业务逻辑层:由系列地业务逻辑对象组成,这些业务逻辑对象实现了系统所需要地业务逻辑方法.这些业务逻辑方法可能仅仅用于暴露Domain Object所实现地业务逻辑方法,也可能是依赖DAO组件实现地业务逻辑方法.数据持久层:由系列地DAO组件组成,这些DAO实现了对数据库地创建、查询、更新和删除(CRUD)等原子操作.域对象层:由系列地POJO(Plain Old Java Object)组成,这些对象是该系统地Domain Object,包含了各自所需要实现地业务逻辑方法.4.2.2网站结构和包结构图-5 网站结构图图-6 网站包结构说明:CBIR系统地包包括了action、entity、bean、utils和dao,其作用如下所示:✧action包:UserAction.java,用于控制业务逻辑entity包:User.java用于存放User领域对象,Image.java用于存放Image领域对象bean包:Bean.java作为所有bean地基类,DistanceSearch.java实现绝对值距离检索地算法,DistanceMethod.java实现距离法检索地算法,ClusterSearch.java实现聚类分析检索地算法,JavaBean.java用于数据持久化对象地保存✧utils包:AuthImage.java用于画验证码✧dao包:所有类用于数据持久化对象保存到数据库中4.2.3数据库设计图-7 Mysql表结构设计4.3 主要工作首先,在本次项目实践过程中,我作为组长,确定了选题和分组,督促项目进度.其次,我使用myeclipse 8.5初步建立了基于内容地图像检索项目CBIR,创建了数据库表User和Image,添加Struts、Spring和Hibernate功能,根据这些功能导入必要地工具包,并配置了struts.xml、applicationContext.xml 和hibernate.xml等文件.再者,我建立整个网站地基本文件结构,包括了jsp 页面、html页面、js文件、css文件、图片文件夹、音乐文件及相应地文件夹等.其中jsp页面有clusterSearch.jsp、copyright.jsp、distanceMethod.jsp、distanceSearch.jsp、error.jsp、index.jsp、login.jsp、search.jsp、success.jsp、upload.jsp、viewImage.jsp和welcome.jsp;html有search.html 和upload.html;css有all.css;js有CheckLogin.js和CheckNull.js;文件夹有file,images,searchImage,music和resources等.接着,我确定项目需要地包,包括了action、bean、dao、entity和utils,其中action主要用于表示层地业务跳转,dao主要用于持久层地持久化对象设计,entity主要用于保存领域对象,而utils包主要用于编写项目所用到地工具包;同时,我还编写相应地工具类和实体类,利用hibernate反向工程生成实体类和DAO类.然后,我编写bean包,根据网站功能需要,实现了绝对值距离、距离法和聚类分析,分别对应ClusterSearch、DistanceMethod和ClusterSearch.最后,我对组员各自完成地工作进行一个整合和修改,并对使用过程中地bug进行修复,对系统进行了功能测试和性能测试,顺利完成任务.5. 研究与探讨5.1解决地问题本次专业实习初步解决了基于内容地图像检索地一些简单算法,包括了绝对值距离算法、距离法算法和聚类分析算法,充分运用了基于颜色特征地知识,实现了图像检索地原始功能,达到了一定效果.网站项目在功能和性能方面满足了最基本地需求,取得了一定地成功,并且具备了初步地实际运用价值.5.2问题和不足之处但是,我们也应该看到一些问题和不足之处.首先,由于使用地算法偏简单,深度有待增加;其次基于内容地图像检索使用到地特征包括了颜色特征,纹理特征,形状特征和其它特征,而本项目用到地特征主要是颜色特征,难免过于单一,这就造成检索地粗糙和不准确;然后是图像检索地查全率和查准率有待进一步地提高,这主要是受算法和所使用特征地影响;最后就是算法地性能测试也有待观察,由于数据比较少,算法性能地测试有限,所以还需要进一步地使用.5.3设计感想通过本次专业实习,我加深了对自己感兴趣内容地认识,锻炼了自己地实践能力,当然,这是一系列地过程.从开始地选题,既要有一定地理论深度,也要有一定地实际意义;到小组地建立,讲究团队协作和分工,重视集体精神;还有就是项目地设计和规划,不仅要立于当前,也要考虑今后,不能只满足了现在地功能和性能需求,而忽略了今后需求地改变或者新添地需求,这就需要提高项目地灵活性;当然,项目文件结构地设计也是开发者应该考虑和重视地问题,这能提高开发地效率和后续地改进;然后就是项目地规范化和设计地文档化,要严格按照软件工程地要求,运用软件设计地流程和原理,稳步推进;再者,扎实地知识基础和技术基础是必须地,其中知识包括了算法设计和数据结构,而技术主要是熟悉所使用地框架等,灵活运用,使自己脱离繁琐地业务,而专注于算法功能地实现;最后就是网站地测试,包括了功能测试和性能测试.应该来说,软件测试作为软件工程地一个重要部分,不容忽视.软件测试能发现用户使用过程中地各种问题,及时修改和完善.总地来说,本次实习对我地知识水平和实践动手能力地提升都有巨大地帮助,它也为毕业设计打下良好地基础.这里,我要特别感谢张华娣老师地指导,感谢组员地配合.参考书目梁立新.《项目实践精解:基于Struts-Sprint-Hibernate地Java应用开发》.电子工业出版社.2008年7月[2]王国辉,王毅,李钟蔚.《JSP程序开发范例宝典》.人民邮电出版社.2007年4月[3]张利国.《Java 实用案例教程》.清华大学出版社.2003年10月Jiawei Han,Micheline Kamber.《数据挖掘概念与技术》.机械工业出版社.2008年6月[5]姚敏.《数字图像处理》.机械工业出版社.2004年8月杨桦,孙利娟.《网页设计与制作实用教程(Dreamweaver+Flash+Photoshop)》.清华大学出版社附录•1、数据库表地创建:create table `test`.`user`(`userid` bigint not null,`username` varchar(50) not null unique,`password` varchar(50) not null,primary key (`userid`));create unique index `PRIMARY` on `test`.`user`(`userid`);create unique index `username` on `test`.`user`(`username`);create table `test`.`image`(`imageid` bigint not null,`image` mediumblob not null,`width` int not null,`height` int not null,primary key (`imageid`));create unique index `PRIMARY` on `test`.`image`(`imageid`);•2、基类bean.java地代码:package com.cbir.bean;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.LinkedList;public class Bean {private int count;private static final int M = 8;private static final int W = 16;private long N;private int width;private int height;private int minx;private int miny;public Bean() {count = 0;N = 0;width = 0;height = 0;}public int[] getRGB(String path) throws NumberFormatException, IOException { File file = new File(path);BufferedImage bi = ImageIO.read(file);width = bi.getWidth();height = bi.getHeight();N = width * height;minx = bi.getMinX();miny = bi.getMinY();int rgb[] = new int[width * height];int count = 0;for (int i = minx; i < width; i++)for (int j = miny; j < height; j++) {int pixel = bi.getRGB(i, j);int r = (pixel & 0xff0000) >> 16;int g = (pixel & 0xff00) >> 8;int b = (pixel & 0xff);rgb[count++] = (int) (r * 0.299 + g * 0.586 + b * 0.114); // 转化为亮度值}return rgb;}public int[][] getRGB2(String path) throws NumberFormatException,IOException {File file = new File(path);BufferedImage bi = ImageIO.read(file);width = bi.getWidth();height = bi.getHeight();N = width * height;minx = bi.getMinX();miny = bi.getMinY();int rgb[][] = new int[height][width];int count = 0;for (int i = miny; i < height; i++)for (int j = minx; j < width; j++) {int pixel = bi.getRGB(j, i);int r = (pixel & 0xff0000) >> 16;int g = (pixel & 0xff00) >> 8;int b = (pixel & 0xff);rgb[i][j] = (int) (r * 0.299 + g * 0.586 + b * 0.114); // 转化为亮度值}return rgb;}public double[] getRA TE(int rgb[]) {int[] temp = new int[M];for (int i = 0; i < M; i++)temp[i] = 0;int sum = 0;double[] rate = new double[M];for (int i = 0; i < N; i++) {if (0 <= rgb[i] && rgb[i] < 32)temp[0]++;else if (32 <= rgb[i] && rgb[i] < 64)temp[1]++;else if (64 <= rgb[i] && rgb[i] < 96)temp[2]++;else if (96 <= rgb[i] && rgb[i] < 128)temp[3]++;else if (128 <= rgb[i] && rgb[i] < 160)temp[4]++;else if (160 <= rgb[i] && rgb[i] < 192)temp[5]++;else if (192 <= rgb[i] && rgb[i] < 234)temp[6]++;else if (234 <= rgb[i] && rgb[i] <= 256)temp[7]++;sum++;}for (int i = 0; i < M; i++) {rate[i] = temp[i] / (sum * 1.0);}return rate;}public int getNum(String path) {LinkedList list = new LinkedList();File dir = new File(path);File file[] = dir.listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);elsecount++;}File tmp;while (!list.isEmpty()) {tmp = (File) list.removeFirst();if (tmp.isDirectory()) {file = tmp.listFiles();if (file == null)continue;for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);elsecount++;}} else {System.out.println(tmp.getAbsolutePath());}}return count;}public double distance(double[] r1, double[] r2) {double rs = 0;int len = r1.length < r2.length ? r1.length : r2.length;for (int i = 0; i < len; i++) {rs += Math.abs(r1[i] - r2[i]);}return rs;}public double[] partition(int RGB[][]) {double[] rs = new double[W * W];// 图片大小不小于16*16double[][] temp = new double[W][W];int[][] count = new int[W][W];for (int i = 0; i < W; i++)for (int j = 0; j < W; j++) {temp[i][j] = 0;count[i][j] = 0;}int t1 = (int) Math.round(height * 1.0 / W);int t2 = (int) Math.round(width * 1.0 / W);for (int i = miny; i < height; i++)for (int j = minx; j < width; j++) {for (int k = 0; k < W; k++)for (int l = 0; l < W; l++) {if (k * t1 <= i && i < t1 * (k + 1) && j < t2 * (l + 1)&& l * t2 <= j) {temp[k][l] += RGB[i][j];count[k][l]++;}}}int tc = 0;for (int i = 0; i < W; i++)for (int j = 0; j < W; j++) {rs[tc++] = temp[i][j] / count[i][j];// System.out.println(temp[i][j]);}return rs;}}•3、DistanceSearch.java(绝对值距离搜索)地代码:package com.cbir.bean;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.List;import com.cbir.entity.Image;public class DistanceSearch extends Bean {public List<Image> search(String searchPath, String path) {List<Image> reList = new ArrayList<Image>();int len = getNum(path);int[] searchRGB = null;double[] searchRate = null; // 图像频率数组int[][] rsRGB = new int[len][];double[][] rsRate = new double[len][];for (int i = 0; i < len; i++) {rsRGB[i] = null;rsRate[i] = null;}int count = 0;try {searchRGB = getRGB(searchPath);searchRate = getRA TE(searchRGB);} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}LinkedList list = new LinkedList();File dir = new File(path);File file[] = dir.listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);else {try {rsRGB[count] = getRGB(file[i].getAbsolutePath());rsRate[count] = getRATE(rsRGB[count]);Image im = new Image();im.setImageName(file[i].getAbsolutePath());im.setDs(new Double(distance(searchRate, rsRate[count])));reList.add(im);count++;} catch (Exception e) {e.printStackTrace();}}}File tmp;while (!list.isEmpty()) {tmp = (File) list.removeFirst();if (tmp.isDirectory()) {file = tmp.listFiles();if (file == null)continue;for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);else {try {rsRGB[count] = getRGB(file[i].getAbsolutePath());rsRate[count] = getRATE(rsRGB[count]);Image im = new Image();im.setImageName(file[i].getAbsolutePath());im.setDs(new Double(distance(searchRate,rsRate[count])));reList.add(im);count++;} catch (Exception e) {e.printStackTrace();}}}} else {System.out.println(tmp.getAbsolutePath());}}Collections.sort(reList);return reList.subList(0, (int) Math.round(reList.size() * 0.5));}}•4、DistanceMethod.java(距离法搜索)地代码:package com.cbir.bean;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.List;import com.cbir.entity.Image;public class DistanceMethod extends Bean {public List search(String searchPath, String path) {List<Image> reList = new ArrayList<Image>();int len = getNum(path);double[] searchRGB = null;double[][] rsRGB = new double[len][];for (int i = 0; i < len; i++)rsRGB[i] = null;int count = 0;try {searchRGB = partition(getRGB2(searchPath));} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}LinkedList list = new LinkedList();File dir = new File(path);File file[] = dir.listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);elsetry {rsRGB[count] = partition(getRGB2(file[i].getAbsolutePath()));Image im = new Image();im.setImageName(file[i].getAbsolutePath());im.setDs(new Double(distance(searchRGB, rsRGB[count])));reList.add(im);count++;} catch (Exception e) {e.printStackTrace();}}File tmp;while (!list.isEmpty()) {tmp = (File) list.removeFirst();if (tmp.isDirectory()) {file = tmp.listFiles();if (file == null)continue;for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);elsetry {rsRGB[count] = partition(getRGB2(file[i].getAbsolutePath()));Image im = new Image();im.setImageName(file[i].getAbsolutePath());im.setDs(new Double(distance(searchRGB,rsRGB[count])));reList.add(im);count++;} catch (Exception e) {e.printStackTrace();}}} else {System.out.println(tmp.getAbsolutePath());}}Collections.sort(reList);return reList.subList(0, (int) Math.round(reList.size() * 0.5));}}•5、ClusterSearch.java(聚类分析搜索)地代码:package com.cbir.bean;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.LinkedList;import java.util.List;import com.cbir.entity.Image;public class ClusterSearch extends Bean {public double[] center(double r1[], double r2[]) {double rs[] = new double[r1.length];for (int i = 0; i < r1.length; i++)rs[i] = (r1[i] + r2[i]) / 2;return rs;}public List<Image> search(String searchPath, String path) {int stop;List<Image> reList = new ArrayList<Image>();List<Image> result = new ArrayList<Image>();int len = getNum(path) + 1;int[] searchRGB = null;double[] searchRate = null; // 图像频率数组int[][] rsRGB = new int[len][];double[][] rsRate = new double[len][];for (int i = 0; i < len; i++) {rsRGB[i] = null;rsRate[i] = null;}int count = 0;try {searchRGB = getRGB(searchPath);searchRate = getRA TE(searchRGB);} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}LinkedList list = new LinkedList();File dir = new File(path);File file[] = dir.listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);else {try {rsRGB[count] = getRGB(file[i].getAbsolutePath());rsRate[count] = getRATE(rsRGB[count]);Image im = new Image();im.setImageName(file[i].getAbsolutePath());im.setDs(new Double(distance(searchRate, rsRate[count])));reList.add(im);count++;} catch (Exception e) {e.printStackTrace();}}}File tmp;while (!list.isEmpty()) {tmp = (File) list.removeFirst();if (tmp.isDirectory()) {file = tmp.listFiles();if (file == null)continue;for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);else {try {rsRGB[count] = getRGB(file[i].getAbsolutePath());rsRate[count] = getRATE(rsRGB[count]);Image im = new Image();im.setImageName(file[i].getAbsolutePath());im.setDs(new Double(distance(searchRate,rsRate[count])));reList.add(im);count++;} catch (Exception e) {e.printStackTrace();}}}} else {System.out.println(tmp.getAbsolutePath());}}rsRate[count] = searchRate;stop = (int) Math.round(len * 0.3);for (; count > stop; count--) {int x = -1, y = -1;double shortest = -1;for (int i = 0; i < len; i++) {for (int j = 0; j < len; j++) {if (i != j) {if (0 != distance(rsRate[i], rsRate[j])) {if (shortest == -1) {shortest = distance(rsRate[i], rsRate[j]);x = i;y = j;} else {if (shortest > distance(rsRate[i], rsRate[j])) {shortest = distance(rsRate[i], rsRate[j]);x = i;y = j;}}}}}}double temp[] = center(rsRate[x], rsRate[y]);for (int k = 0; k < len; k++) {if (Arrays.equals(rsRate[k], rsRate[x]) && k != x) {// 数组相等判断rsRate[k] = (double[]) temp.clone();}if (Arrays.equals(rsRate[k], rsRate[y]) && k != y) {rsRate[k] = (double[]) temp.clone();}}rsRate[x] = (double[]) temp.clone();// 数组赋值rsRate[y] = (double[]) temp.clone();}for (int i = 0; i < len - 1; i++) {if (Arrays.equals(rsRate[i], rsRate[len - 1]))result.add(reList.get(i));}Collections.sort(result);return result;}}版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.dGY2m。
数字图像处理论⽂基于MATLAB图像处理——⾼空拍摄地⾯物体的识别院系:班级:姓名:学号:⼀.问题的提出数字图像处理是通过计算机对图像进⾏去除噪声、增强、复原、分割、提取特征等处理的⽅法和技术。
有处理精度⾼,处理内容丰富,可进⾏复杂的⾮线性处理,有灵活的变通能⼒。
但在处理速度上,特别是进⾏复杂的处理有⼀定的困难。
数字图像处理技术主要包括⼏何处理、算术处理、图像增强、图像复原、图像重建、图像编码、图像识别、图像理解等⼏个⽅⾯。
在⾼空拍摄的地⾯物体由于天⽓,摄像机的像素等多⽅⾯因素的影响,获得的图⽚模糊,很难识别,从⽽提出了⾼空拍摄地⾯物体的识别的问题。
⼆.实验原理1.图像增强图像直⽅图是图像处理中⼀种⼗分重要的图像分析⼯具,它描述了⼀幅图像的灰度级内容,任何⼀幅图像的直⽅图都包含了丰富的信息,它主要⽤在图象分割,图像灰度变换等处理过程中。
在本系统中,先⽤rgb2gray这个函数实现把真彩图转换为灰度图,再⽤imhist函数⽤于显⽰灰度图像的N级直⽅图,灰度图默认N为256,再对直⽅图上的灰度级进⾏统计。
直⽅图规定化能够⾃动增强整个图像的对⽐度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直⽅图。
实际上有时需要变换直⽅图,使之成为某个特定的形状,从⽽有选择地增强某个灰度值范围内的对⽐度。
这时可以采⽤⽐较灵活的直⽅图规定化。
⼀般来说正确地选择规定化的函数可以获得⽐直⽅图均衡化更好的效果。
所谓直⽅图规定化,就是通过⼀个灰度映像函数,将原灰度直⽅图改造成所希望的直⽅图。
2.图像分割与识别图像分割就是把图像分成若⼲个特定的、具有独特性质的区域并提出感兴趣⽬标的技术和过程。
它是由图像处理到图像分析的关键步骤。
现有的图像分割⽅法主要分以下⼏类:基于阈值的分割⽅法、基于区域的分割⽅法、基于边缘的分割⽅法以及基于特定理论的分割⽅法等。
近年来,研究⼈员不断改进原有的图像分割⽅法并把其它学科的⼀些新理论和新⽅法⽤于图像分割,提出了不少新的分割⽅法。
参考解答(姚敏著)第一章 略 第2章2.2一阶矩或平均值; 二阶矩或自相关函数;自协方差;方差2.5压缩能力更强,码书控制着量化失真量的大小,计算量大,定长码,容易处理。
2.7二进制图像,索引图像,灰度图像,多帧图像,RGB 图像。
可以。
2.8采样间隔是决定图像空间分辨率的主要参数。
2.9如果1S 中的某些像素与2S 中的某些像素连接,则两个图像子集是相连接的。
在图2.9中,1S p ∈和2S q ∈在V 中取值,且q 在)(8p N 中,因此p 和q 是8连接的,1S 和2S 也是8连接的。
q 在)(p N D 中,且)()(44q N p N 是空集,即满足m 连接条件,因此p 和q 是m 连接的,p 和q 是8连接的,1S 和2S 也是8连接的。
也是m 连接的。
但是,1S 和2S 中所有像素之间都不存在4连接,因此1S 和2S 不是4连接的。
2.10当V={0, 1}时,p 与q 之间不可能存在4通路,下图(a)中的红色箭显示是没有办法到达q 的。
最短的8通路可在图中看出(蓝色),它的最短长度是4。
m 通路(黑色)的最短长度是5。
qq当V={1, 2}时,最短的4通路的一种可能显示在图(b)中(红色箭),它的长度是6。
最短的8通路的一种可能显示蓝色箭,它的长度是4。
m通路(黑色)的长度是6。
这些从p到q的同样长度的4、8、m通路不是唯一的。
2.11p和q之间的D4和D8距离与任何通路无关,仅与点的坐标有关。
对于像素p, q其坐标分别为(x, y),(s,t),D4(p, q) = | x - s | + | y – t | = 6D8(p, q) = max ( | x - s | , | y – t | ) = 3然而,如果选择考虑m邻接,则两点间的Dm距离用点间最短的通路定义。
在这种情况下,两像素间的距离将依赖于沿通路的像素值以及它们的邻点值。
Dm(p, q) = 6。
第3章3.1FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。