收藏 分销(赏)

基于安卓平台的图像引导滤波算法的实现.doc

上传人:天**** 文档编号:2481043 上传时间:2024-05-30 格式:DOC 页数:28 大小:1.28MB
下载 相关 举报
基于安卓平台的图像引导滤波算法的实现.doc_第1页
第1页 / 共28页
基于安卓平台的图像引导滤波算法的实现.doc_第2页
第2页 / 共28页
基于安卓平台的图像引导滤波算法的实现.doc_第3页
第3页 / 共28页
基于安卓平台的图像引导滤波算法的实现.doc_第4页
第4页 / 共28页
基于安卓平台的图像引导滤波算法的实现.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、 中央广播电视大学开放教育(本/专)科毕业论文(设计)题目: 基于安卓平台的图像引导滤波算法的实现 姓 名: 学 号: 年 级: 专 业: 指导教师: 吉林广播电视大学桦甸市分校二0一五年二月1目 录第一章 研究背景及意义3第二章 Android系统相关知识介绍42.1 Android系统的诞生与发展42.2 Android系统框架42.3 Android优缺点62.4 Android编译环境搭建7第三章 算法解析93.1 算法理论介绍93.2 算法java实现10第四章 仿真实验及分析124.1程序演示及分析124.2 重难点及解决方案154.3关键代码17第五章 总结与收获20参考文献22

2、附录23 基于安卓平台的图像引导滤波算法的实现第一章 研究背景及意义在计算机视觉和计算机图形学中大多数程序都牵涉到通过图像滤波来降低噪音或者提取有用的图像结构来对图片进行相应优化的思想。一些简单的线性平滑滤波算法如高斯滤波器,拉普拉斯算子过滤器,索贝尔过滤器广泛的应用于图像模糊,图像锐化,边缘检测和特征提取等方面。但是线性平滑滤波过滤器的滤波核是固定不变,独立于任何图像内容。但在许多情况下,我们可能希望在过滤过程中将给定的引导图像额外的信息体现出来。第一种解决方案就是通过考虑引导图像优化算法所执行的二次方程,这种解决方案是通过处理以引导图像信息编码的大型稀疏矩阵,这些非齐次的矩阵隐含了变动的滤

3、波核。这种处理方法广泛的应用在许多应用比如;着色,抠图,多次度分解和图片消雾中。另外的一种方法通过引导图像生成滤波核。比如双边滤波器可以实现平滑滤波的同时还能具有良好的边缘保持性能,但是会产生一些额外的梯度逆转伪影。而由微软亚洲研究院何恺明博士提出的一种图像引导滤波算法 引自kaiming he,Jian Sun ,xiaoou,Tangguide image filterpage1- 2。这种算法本质上是引导图像的线性转换。该算法能够像双边滤波算法一样较好的实现平滑滤波还能具有良好的边缘保持性能,而且不产生梯度逆转伪影。而且他也和拉普拉斯矩阵相关,也是在平滑滤波方法中可被接受的一种理念,图像

4、引导滤波算法计算与滤波核的大小无关。此外,引导滤波器对于灰阶图和彩色图都有精确地算法,在大量的应用中实验证明图像引导滤波算法在效果和效率上有很不错的表现。随着android手机的普及,各式各样的应用层出不穷,但是在手机图像方面人们往往希望在手机屏幕中显示更为绚丽清晰的图像。但是目前很多高像素手机拍摄出来的照片因为相机硬件问题,光照,抖动等各种因素照成不如人意的图片。如果能够在手机上直接对刚生成的图片进行相应的处理和优化那无疑是对手机拍照功能的一大补充。针对这一情况,本次课题的目的是在Android手机平台上使用图像引导滤波算法实现对图像的优化及处理。第二章 Android系统相关知识介绍2.1

5、 Android系统的诞生与发展 2003年10月,有“Android之父”之称的Andy Rubin在美国加利福尼亚州帕洛阿尔托创建了Android科技公司.2005年8月17日,Google收购了Android科技公司,Android科技公司成为Google旗下的一部分。之后,鲁宾着手负责开发基于Linux内核的移动操作系统即后来的Android操作系统。2007年11月5日,在Google的领导下,手持设备联盟(Open Handset Alliance)成立,第一批成员包括Broadcom公司、HTC、Intel、LG、Marvell等公司。开放手持设备联盟的创建目的是为了创建一个更加

6、开放自由的移动电话环境。也在同一日,手持设备联盟联盟对外展示了他们的第一个产品:一部搭载了以Linux 2.6为内核基础的Android操作系统的智能手机。后来新一批成员陆续加入联盟,同时,一个负责持续发展Android操作系统的开源代码项目成立了AOSP(Android Open Source Project) 。除了开放手持设备联盟之外,Android还拥有全球各地开发者组成的开源社区来专门负责开发Android应用程序和第三方Android操作系统来延长和扩展Android的功能和性能。 http:/zh.wikipedia.org,24.5.20132.2 Android系统框架如图2

7、-1所示Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层。图2-1Android系统的应用层主要是开发人员使用JAVA语言进行开发的一些具有特定功能的应用,如照相机,浏览器,短信发送程序以及一些小游戏等应用。Android系统的应用框架层是开发人员从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,该层简化了组件的重用,开发人员可以直接使用应用框架层所提供的组件来进行应用程序开发,也可以通过重写而实现个性化的拓展。Android系统的系统运行库层可以分成两部分,分别是系统库和Android运行时库。其中

8、系统库中主要的库有 :Media Framework:多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。SQLite: 小型的关系型数据库引擎。OpenGL|ES:根据OpenGL ES 1.0API标准实现的3D绘图函数库。 FreeType:提供点阵字与向量字的描绘与显示。 WebKit:一套网页浏览器的软件引擎。SGL:底层的2D图形渲染引擎。 Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制。 Android应用程序时库采用Java语言编

9、写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分:核心库:提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.media等等。Dalvik虚拟机:Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。Android系统的内核层是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。2.3 Android优缺点优点一:开放性Google公司将Android

10、系统的源代码对外开放意味着允许任何移动终端厂商加入到Android联盟中来。因为Android的开源,专业人士可以利用开放的源代码来进行二次开发,打造出个性化的Android。例如中国的MIUI就是基于Android2.3原生系统深度开发的Android系统,其与原生系统相比有了较大的改动。而且开放性可以缩短开发周期,降低开发成本。如此一来跟有利于Android的发展 李芙蓉当前智能手机操作系统及其比较分析J信息技术,2008优点二:用户自由度更高Android操作系统给予了用户跟高的自由度,熟悉Android的都清楚:用户可以根据自己的喜好来设置手机界面,Android的应用市场甚至上还有各

11、式各样的启动器来供用户自己选择,让自己的手机与众不同。例如,用户要是喜欢HTC的操作界面,便马上可以在应用市场上找到,甚至还能模仿IOS的界面。相比于IOS操作系统,Iphone手机只有一成不变的手机界面,不能对其进行更改。优点三:大量Android应用程序正是因为Android平台的开放性,吸引了大量的开发人员进行应用程序开发。从而使android应用程序数量快速上升。截止去年10月30日,Android应用首次超过ios应用达到71.3万.缺点一:安全问题由于Android系统的开源以及快速的发展以及审核机制的不完善导致Android市场上出现了一些恶意软件。2009年11月10日Andr

12、oid平台出现第一个恶意间谍软件:MobileSpy。2010年8月12日,出现了第一个木马病毒:Trojan-SMS.AndroidOS.FakePlayer.a 杨丰盛 Android应用开发揭秘M北京:机械工业出版社,2010。在这些恶意软件的影响之下,用户的隐私不能得到充分的保障,在不经意间就可能泄露自己的隐私。缺点二:用户体验不一因为Android系统的流畅运行需要硬件支持。而手机厂商对于Android的定制多种多样,导致了一些高配置手机上Android的运行流畅度良好,而低配置手机运行缓慢。缺点三:程序平均质量不高随着Android系统的开源,越来越多的手机厂商在智能手机上使用An

13、droid手机,Android手机应用开发者也越来越多,Android应用程序的数量也在快速上升。但是Android程序开发者的开发水平难免良莠不齐。在高端应用上,相较于苹果应用,Android应用程序因为其自身多为免费程序,许多应用功能强大Android应用程序的为了商业用途难免在应用程序中夹杂许多推送广告,引起人们的反感。2.4 Android编译环境搭建2.4.1 JDK安装与配置 在网页 查看JDK版本信息,若显示版本信息则说明安装成功,若显示错误,请先确认环境变量是否设置。以Windows7系统为例,假设JDK安装路径在C:Program FilesJavajdk1.6.0_31,进

14、入计算机高级系统设置环境变量系统变量中90点击新建,在变量名中输入classpath,变量值为C:ProgramFilesJavajdk1.6.0_31libdt.jar;C:ProgramFilesJavajdk1.6.0_31libtools.jar;2.点击新建,在变量名中输入JAVA_HOME,变量值为C:Program FilesJavajdk1.6.0_313.找到path选项,在变量值后面添加C:Program FilesJavajdk1.6.0_31bin记得用“;”和前面隔开。配置完成后再输入java -version进行测试。2.4.2 eclipse安装与配置进入http

15、:/www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR2/eclipse-java-juno-SR2-win32.zip网页中并下载eclipse进行解压,解压后可直接使用,进入eclipse主界面在主界面上方点击help-Install New Software,点击add在name中随意输入名字,location中输入http:/dl- tools下载并安装相应组件。2.4.3 SDK在网上搜索并下载SDK,将其解压后的文件所在目录配置到菜单window-preferen

16、ces-android-SDK location.,因为SDK可能存在过时,要进行文件更新才能正常使用。点击eclipse界面的android SDK Manager,为了方便选择,将显示的所有安装文件选中并开始下载安装。2.4.4 创建AVD因为android系统是建立在Linux操作系统基础上。所以编写好的android程序不能直接在windows系统下运行。因此我们需要搭建一个模拟的平台来测试安卓程序的运行。在eclipse主界面选中android virtual device manager,在显示的界面中点击new设置主要参数。主要包括AVD的name,device,target(虚

17、拟机的版本)。其他参数当有需要时可以自行设定。至此关于android开发的平台搭建完毕。第三章 算法解析3.1 算法理论介绍在图像引导滤波算法中,首先明确一个概念,输出图像Q是输入图像P和引导图像I进行线性变换的结果。输入图像P和引导图像I都是已知量,而且两者可以完全相同。输入图像P的像素点i的值在经过处理之后生成一个加权平均数并成为输出图像Q的像素点i; 公式 1在本函数中,i和j都代表像素的索引,滤波核Wij是输入图像I的函数并且与P无关。但是滤波器是与P线性相关的。我们假设q是I在以像素K为中心的小窗口WK上进行线性变换的结果。则有以下函数 公式 2其中(ak,bk)是在窗口Wk中恒定不

18、变的线性参数。我们使用一个半径为R的正方形窗口。这个线性模型确保仅当引导图像I有边缘时q才有边缘。因为:q = aI。这个模型已经在多个应用中证明是可行的比如,抠图,图像超分辨率,和清除迷雾。为了确定这些线性参数,我们寻找一种解决方案来最小化输出图像q和输入图像p之间的差别。尤其的,我们列出下面的函数 公式 3在本函数中,是一个不变的参数用来防止ak的值过大,本函数通过计算得到答案 公式 4 公式 5在上述函数中,是引导图像I在窗口WK中的平均值,是引导图像I在窗口WK的方差,是在窗口WK里面的像素数目,是p在窗口WK的平均值。下面,我们将线性模型应用于整个图片中的局部窗口,然而像素I可能包含

19、在许多WK中,所以在函数1中的值在不同窗口计算出来的值不相同。一个简单的方法就是计算出所有qi可能值的平均数。所以当计算出图片中每个模块的(ak.bk),我们计算输出滤波器 公式 6 公式 7 公式 8至此输出图像q的像素点i的值生成。循环重复计算每个像素点,从像素点扩散到全图,就生成了输出图像q引自kaiming he,Jian Sun ,xiaoou,Tang guide image filterpage 3-4。3.2 算法java实现众所周知图像格式多种多样,在本程序中,我们仅为了研究算法,不对图片格式进行细化分析。暂时对以bmp为代表的彩色24位图片进行处理。此类图片的存储方式可看为

20、一个三维数组,其中变量i和j代表图片的像素的索引,当i,j确定时即可确定一个像素点k,k的值包括透明度alpha,红色值R,绿色值G蓝色值B,其中alpha,R,G,B都为0到255的整数,为了方便算法的实现,我们单独讲所有的R值,G值,B值取出来形成三个新的灰阶二维数组分别进行处理。引自wilhelm Burger Mark J.Burge数字图像处理 java语言算法描述清华大学出版社首先打开程序,点击按钮并浏览选择要优化的图片I。程序中为了方便,将输入图像I与引导图像P设为同一张图的,既将输入图像I的值赋给引导图像P。然后设定小窗口半径r为16(此处可发散开来让用户自己选择喜欢的半径,但

21、不宜过大,)以及定义一个浮点型小数并赋值,该小数作用等同于上文公式中的。首先将图片I,P中的数据提取成4个二维数组分别表示alpha值的数组,R值的数组,G值的数组,B值的数组,注意因为alpha值不参与运算,因此提取后不作处理。下面以R值的二维数组运算过程来表现算法。首先定义方法boxfilter该方法输入参数为一个浮点型二维数组a和一个整型r,返回值是一个浮点型的二维数组。方法实现的功能是计算一个二维数组a在半径为r的小窗口的所有值之和sum,随着小窗口的移动,sum的值也不断发生变化,生成一个新的二维数组 引自 ,24.5.2013。具体实现后文将会提到。float N =new Box

22、filter().boxfilter(p, r);/此时,数组N即函数4中|W|表示该窗口所有像素个数之和float mean_I = new Operation().Division(new Boxfilter().boxfilter(a, r), N);/获得二维数组I在以r为半径大小的小窗口中的像素值平均数float mean_p = new Operation().Division(new Boxfilter().boxfilter(b, r), N);/获得二维数组I在以r为半径大小的小窗口中的像素值平均数floatmean_Ip=newOperation().Division(ne

23、wBoxfilter().boxfilter(new Operation().multiplication(a, b), r), N);float cov_Ip =new Operation().subtraction(mean_Ip, new Operation().multiplication(mean_I,mean_p );/获得二维数组I与P的协方差floatmean_II=new Operation().Division(new Boxfilter().boxfilter(new Operation().multiplication(a, a), r), N);float var_I

24、 = new Operation().subtraction(mean_II, new Operation().multiplication(mean_I,mean_I );/获得二维数组I在以r为半径大小的小窗口中的像素值方差float A =new Operation().Division(cov_Ip, new Operation().add(var_I, eps);float B =new Operation().subtraction(mean_p, new Operation().multiplication(A, mean_I);/获取所有小窗口的值(a,b)所构成的二维数组A,

25、Bfloat mean_b = new Operation().Division(new Boxfilter().boxfilter(B, r), N);float q = new Operation().add_a(new Operation().multiplication(mean_a,a ), mean_b);/生成输出图像q其中Boxfilter(double I,r)方法实现效果是计算输入的参数二维矩阵I在以输入参数r为半径的小窗口中的所有值之和。Operation()是定义的操作类,Division是定义的操作方法,表示行列相等的两个数组之间相应位置的值相除,a和b在这里分别表示

26、传入方法的输入图像的R值二维数组与引导图像R值二维数组。实际上,在此处存在一下关系:float mean_p=mean_I;将以上代码分别与论文中参数对应起来就有:mean_I 对应,表示图像I在窗口Wk里的平均值。mean_p对应表示图像p在窗口Wk里的平均值。Cov_IP对应,表示图像I与图像P的协方差。var_I对应,表示I在窗口Wk里的方差。A对应ak,B对应bk,q对应函数中的qi;至此,图像引导滤波算法基本完成。第四章 仿真实验及分析4.1程序演示及分析在手机上启动照相机现场拍摄一张图片。启动编写好的Myguidefilter应用。选择刚才拍摄的图片并显示在手机屏幕上拖动滑动条,根

27、据滑动条的移动手机屏幕将显示不同效果的照片。算法结构图如下:赋值转换P_R,P_G,P_B三个二维数组输入图像I引导图像P三维矩阵三维矩阵I_R,I_G,I_B三个二维数组分别使用图像引导滤波算法运算输出生成图像q转换图3-1下面四幅图是滑动条在滑动过程中生成的结果展示图。图像增强核心计算公式是:I_enhanced = (I - q) *progress + q; 公式9其中I_hancement是结果图片,I是输入图片,q是通过图像引导滤波算法生成图片,progress是滑动条滑动中产生的值。很明显有以下结论:当progress=1时,I_enhanced = I,输出图像为原图。如图3-

28、2;当progress=0时,I_enhanced = q;输出图像为图像引导滤波输出图像。如图3-3;经多次测试,当progress=5,输出图像为增强图像。如图3-4,此时给人的视觉效果最好。若progress取值过大progress=10,输出图像为增强图像如图3-5,图像视觉效果反而降低。 图3-2 图3-3图3-4 图3-54.2 重难点及解决方案在安卓上实现图像引导滤波算法中遇到了各种各样的问题,通过网上搜索解决方案和咨询同学解决了大部分,现在我将我在实现过程中所遇到的比较突出的重点难点展示出来:重难点一:如何将图像信息转换为数组并进行处理。解决方案:android开发环境中删除了

29、java开发包中关于AWT的组件的许多功能。因此不能使用原有java开发包中提供的getred()等方法,但是android同时提供了更符合android环境的开发工具包。可调用android.graphics.Color包中Getpixel(j,i) 引自android图片处理总结 24.5.2013方法获得当前图片索引(j,i)下的像素点的值,同时在调用Color.red(),Color.green(),Color.blue(),分别获取该像素值得R,G,B值,将其存放在image_R,image_G,image_B,三个二维数组中,从而完成对bmp位图的图像信息的提取与转换。重难点二:b

30、oxfilter()的功能实现解决方案:boxfilter()实现的功能是输入参数二维像素矩阵a,以及小窗口半径r,计算出二维矩阵在以像素点k为中心以r为半径的小窗口中的所有值之和。在实现该功能的时候首先要确定一点,随着小窗口的k的变动,小窗口所包括的像素点值之和是在不断变化的,而且当像素点k接近二维像素矩阵所构成的边缘时,小窗口的半径也会发生变化,保持小窗口不会超出像素矩阵所构成的窗口中。所以常规的做法是在四重嵌套for循环中分条件计算出最后值,也在网络上查询了相关信息,尝试过使用积分图 Franklin, Crow. Summed-Area Tables for Texture Mappi

31、ng. Computer Sciences Laboratory: Xerox Palo Alto Research Center. 1984年7月 2013年1月3日.来实现该方法,但是失败了。后来将论文附带的boxfilter.m文件翻译之后,自己编写方法逐条实现文件中的代码,最后成功将M文件中的功能实现并用java语言编写出来。重难点三:用算法处理之后的矩阵转换为图片。解决方案:和重难点一类似,android中都提供了类似的方法可供开发人员调用,查询相应的API可以获得方法细节。但是实际处理是存在一个问题,经过算法计算出来的像素值存在为负或大于1的情况。而android开放的API中只有

32、使用范围是0-255的整形值才能反向生成某一具体像素点的color值,通过每个像素乘以255然后强制转换成整形,并将大于255的值全部设为255,小于0的像素值全部设为0,这样在存在误差的情况下总体上保证了程序功能的实现。重难点四:内存不足,数组计算耗时较久解决方案:当程序大致完成主要功能之后运行时发现因为图片过大,同时一些必要的数组计算产生的中间变量及结果变量浪费大量内存,而java自身的内存回收机制 详细介绍Java的内存管理与内存泄露 使他没有像C/C+那样使用指针直接对内存进行控制。还有一点就是android系统给每个程序运行所能占用的最大内存值设定了上限为8M,因此运行处理较大的图片

33、会十分吃力。对此我将程序中牵涉到的二维数组全部用一位数组替换。并仅在界面中显示缩略图。但是运行速度缓慢的解决方案任然没有找到。大致猜想是使用android原生C开发方法,直接用android调用已完成方法功能的C函数以避免java语言内存分配机制的弊端。4.3关键代码4.3.1 读取图像及压缩显示 buttonLoadImage.setOnClickListener(new View.OnClickListener() public void onClick(View arg0) Intent i = new Intent(Intent.ACTION_PICK,android.provider

34、.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(i, RESULT_LOAD_IMAGE););/添加监听器,当点击按钮时触发protected void onActivityResult(int requestCode, int resultCode, Intent data) /相应事件 super.onActivityResult(requestCode, resultCode, data);if (requestCode = RESULT_LOAD_IMAGE & resultCode = RE

35、SULT_OK & null != data) Uri selectedImage = data.getData();String filePathColumn = MediaStore.Images.Media.DATA ;Cursor cursor= getContentResolver().query(selectedImage,filePathColumn, null, null, null);/获取图像文件目录cursor.moveToFirst();int columnIndex = cursor.getColumnIndex(filePathColumn0);String img

36、path = cursor.getString(columnIndex);cursor.close();/获取图片在SD卡中路径imgpathIntent intent = new Intent(Loadimg.this,MainActivity.class) ; intent.putExtra(path, imgpath); startActivity(intent); /将图像路径值从Loadimg这个Activity传到MainActivity。Bundle extras = getIntent().getExtras();String path =extras.getString(pa

37、th);/接受图像路径path值BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds = false; options.inSampleSize = 8; /width,hight设为原来的四分之一 bm=BitmapFactory.decodeFile(path,options);/显示压缩图片 4.3.2 读取bitmap图片的值并分别赋值给三个二维数组for (int i = 0; i height; i+) for (int j = 0; j width; j+)int

38、 color = bm.getPixel(j,i);ai*width+j=Color.red(color)/255.0 ;bi*width+j =Color.green(color)/255.0;ci*width+j =Color.blue(color)/255.0;4.3.3 算法的实现代码float N =new Boxfilter().boxfilter(p, r);此时,数组N即函数4中|W|表示该窗口所有像素个数之和float mean_I = new Operation().Division(new Boxfilter().boxfilter(a, r), N);/获得二维数组I在

39、以r为半径大小的小窗口中的像素值平均数float mean_p = new Operation().Division(new Boxfilter().boxfilter(b, r), N);/获得二维数组I在以r为半径大小的小窗口中的像素值平均数floatmean_Ip=newOperation().Division(newBoxfilter().boxfilter(new Operation().multiplication(a, b), r), N);floatcov_Ip=newOperation().subtraction(mean_Ip,newOperation().multipli

40、cation(mean_I,mean_p );/获得二维数组I与P的协方差floatmean_II=new Operation().Division(new Boxfilter().boxfilter(new Operation().multiplication(a, a), r), N);float var_I = new Operation().subtraction(mean_II, new Operation().multiplication(mean_I,mean_I );/获得二维数组I在以r为半径大小的小窗口中的像素值方差float A =new Operation().Divi

41、sion(cov_Ip, new Operation().add(var_I, eps);float B =new Operation().subtraction(mean_p, new Operation().multiplication(A, mean_I);/获取所有小窗口的值(a,b)所构成的二维数组A,Bfloat mean_b = new Operation().Division(new Boxfilter().boxfilter(B, r), N);float q = new Operation().add_a(new Operation().multiplication(mea

42、n_a,a ), mean_b);/生成输出图像q将输出三维矩阵转换为图像for (i = 0; i height; i+) for (j = 0; j width; j+)newR=(int)(aij0*255);newG=(int)(aij1*255);newB=(int)(aij2*255);newR=Math.min(255, Math.max(0, newR);newG=Math.min(255, Math.max(0, newG);newB=Math.min(255, Math.max(0, newB);int color = new Color().rgb(newR, newG,

43、 newB);pixelsi*width+j = color;newR = 0;newG = 0;newB = 0;Bitmapbitmap=Bitmap.createBitmap(pixels,width,height, Bitmap.Config.RGB_565);第五章 总结与收获本论文对图像引导滤波算法的实现完成了开始定下的目标,能够实时读取手机上的图片文件并通过对滑动条的操作实现图片的优化,在优化过程中采用了图像引导滤波算法实现了对图片的优化。但是在程序中也存在了一些问题还没解决或者还可以进行深度研究。尤其是关于数组运算与android程序内存节约问题任然可以进行相应改良优化。在本对

44、图像引导滤波算法的学习与android程序的编写过程中,通过自己网上搜寻所遇到问题的解决方案,我获益匪浅。首先,在对图像引导滤波算法的学习过程中,我了解到关于滤波器的定义以及相关的种类,算法。也参考过其他的关于图像锐化,模糊,浮雕效果,怀旧,底片效果的资料并了解大致算法。其次在学习算法的过程中,为了了解算法中每个参数,每个公式的含义,通过在网上收索得到公式的数学变换方式发现所有理论知识的堆积只是为了计算出一个看似简单的数学协方差公式。第一次领悟到数学微积分在计算机领域的作用。其次,为了编写这个android程序,我第一次以开发者身份初步的接触android系统而非使用者,在开发不断地遇到问题与解决问题的过程中学到了android开发的一些

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服