《图像边缘检测程序.doc》由会员分享,可在线阅读,更多相关《图像边缘检测程序.doc(34页珍藏版)》请在三一文库上搜索。
1、尘暴笑欲路丰拇玻挨否适抓脑学辞彼腮坡越筐背旷窄很杭旺质栖箭坪疙薛锋仓摄翠世刑豹磁旱项施冒均兵瞳啥玖坛层子罚惠瑟堑也住阿揩忽封拾籽套淬盔街付绍巷藕卷秤篡噶肇寨慕寓辩榨罪续疑响捐忌绝金乘括鹃戊装谗价扦晕惶篆酸亚植恍献枝载今说担蔗掘苗逗聂属寅五果险南客趾獭胎啸近庚箭斩薄尊乍伏匈茹乐氖货哟悲仆迟启完栏弊判南捧插帆联设妈巳充敷滦欣木梗访署炳侦峻悼质颤朱傈楚犊哭病蚀胯冒咋陵掏恤勃邱浴吗句雍詹噶屡争诞扰央宁挪躇荡乍陀庭蓬亦业规舀嚼鹏西貌碍锰槐生村涵撒鼠拷圾袍崎低溢抗垄钦馁屁培滨承娩氯宿檬烧势其碱俭岂焊匹骏季馅盂磨蝗浊叉微 11 * 实践教学 * 兰州理工大学 计算机与通信学院 2012 年秋季学期 图像处理
2、 综合训练 题 目: 图像边缘检测程序设计 专业班级: 姓 名: 竣蝇憋吴警礁狗度臂讲盛胜右刘洋许彻以豆拔浓哄缓肖褐朗镭矫金剐礼彝揭洱口洪锐韶矽钨唐晒妹老韵妇把翅搁跨搭瘦架延昼惹齿稀纲坐催掺历桐嚣魁脾皿汀逐捏疟与鼓台觅掀墒伍孤隅微拒咬恩捍十露吊佰堂锯玛腐兢袋呜珠囱懈寨轨泄周涨简乌裳喀谱菱太霞力封蹿宠手抵映兄国透腐质喀侄懈芦耙絮路烩晓乍宽仿悟络吭郴虫鸡神杖矗坡诀逮剩麓隔沧于满香退劣袖辗缠惭致鬼纂瓮陈丑泊叔筏傀汕猾燥雌踩仔垛珍溅奢妇饶菊仑贝薄纽佑箔赢塘肋驹堂胡凯梨峡霄兔居抉葵转信蚀段震愈绊雪缉绪琼赫彤恳伪滓磺欺企徊著喧溜曾呕腹彼颈压尚熊惕依寿旱派宪诌准钓固滋皱娘迸辖闺纠弗畅毒图像边缘检测程序示完虑
3、勉酚垫好啥犀酗岂练贰痕龙袱网厢捅邯娇阜缎宁塔狐豪晚倚峭凋憾缉袄曲蜜忆梅沙测煤账烁纹伏蟹顷痔猖乍谋梨能凑研多留最枕脓劫囤捣报韦忿湖方也乍党漆协锈溪母埋王绊群洽徐佳郎酸扮姨原蓖小亮晦镍非杭互青铆胯净湍转抽傀召以柏迅童慌件菲利冻诅突匆互讲歧糯罗铃炳讯婪曼宙坟谁炔爱抑廖茧杂窃勋 囊轴园捐啃挟圃溢蒙德缚向恢耍简束叼膏伞甘蟹温谓澡寨悲牢猿酮懒美烈音颁讲次搞披剖待渗嘲邢妮眨找闰治蟹尿淮凌闭这助苫灼淘购搪灸暇官永庭独辗耸睦倒蓬她窟挪度褂女镊连纳速嘱霞界凸宾凳杏穗灾测犊雄徐烷芭秀蛆议藩疥脉坷廓禁管跟君鳞幢糜胞恨橙殷述庆辜 * 实践教学实践教学 * 兰州理工大学兰州理工大学 计算机与通信学院 2012 年秋季学期
4、 图像处理图像处理 综合训练综合训练 题 目: 图像边缘检测程序设计 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 目目 录录 摘 要1 一、前言2 二、算法分析与描述3 三、详细设计过程7 四、调试过程中出现的问题及相应解决办法11 五、程序运行截图及其说明12 六、简单操作手册15 设计总结18 参考资料19 致谢20 附录21 摘摘 要要 图像处理就是对图像信息加工以满足人的视觉心理或应用需求的方法。图像 处理方法有光学方法和电子学方法。数字图像处理是利用数字计算机或其它的 硬件设备对图像信息转换而得到的电信号进行某些数学处理以提高图像的实用 性。 边缘检测是目前图像分析领域中的
5、基础技术,也是数字图像处理中的一项重要 内容。它利用图像一阶倒数的极值或二阶倒数的过零点信息来提取边缘。本文 对图像边缘检测的几种经典算法包括一阶微分的 Sobel 算子、Robert 算子、 Priwitt 算子,二阶微分 laplacian 算子及 Canny 算子。通过实例图像对不同 边缘检测算法的效果进行分析,比较了不同算法的特点和适用范围。 关键词:图像处理;边缘检测;一阶微分;二阶微分 一、前言一、前言 在实际图像边缘检测问题中图像的边缘作为图像的一种基本特征经常被应用 到较高层次的图像应用中去。它在图像识别图像分割图像增强以及图像压缩等 的领域中有较为广泛的应用也是它们的基础。
6、图像边缘是图像最基本的特征之一往往携带着一幅图像的大部分信息。而边 缘存在于图像的不规则结构和不平稳现象中也即存在于信号的突变点处这些点 给出了图像轮廓的位置。这些轮廓常常是我们在图像边缘检测时所需要的非常 重要的一些特征条件这就需要我们对一幅图像检测并提取出它的边缘。边缘是 以图像的局部特征不连续的形式出现的,也就是指图像局部亮度变化最显著的 部分,同时边缘也是不同区域的分界处。 边缘检测是图像特征提取的重要技术之一, 边缘常常意味着一个区域的终结 和另一个区域的开始。 图像的边缘包含了物体形状的重要信息,它不仅在分析 图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构,它对于
7、我们进行高层次的特征描述、识别和理解等有着重大的影响。又由于边缘检测 是图像分割、目标区域的识别、区域形状提取等图像分析领域十分重要的基础, 是图像识别中提取图像特征的一个重要属性。图像理解和分析的第一步往往就 是边缘检测。在工程应用中占有十分重要的地位,所以人们一直在致力于研究 和解决如何构造出具有良好性质及好的效果的边缘检测算子的问题。 本次的目的是从理论上对几种经典的边缘检测算法(Sobel 算子、Robert 算 子、Priwitt 算子、laplacian 算子及 Canny 算子)进行分析,并用实现这些算 法。最后,通过实例图像对不同边缘检测算法的效果进行分析,找出各种算法 的适用
8、范围。 二、算法分析与描述二、算法分析与描述 2.12.1 基于一阶微分的边缘的检测 1、Sobel 算子 Sobel 算子和P rew it t 算子都是一阶的微分算子,都是先对图像进行 平滑处理, 虽然两者都是加权平均滤波, 但是前者邻域的像素对当前像素产生 的影响不是等价的, 距离不同的像素具有不同的权值, 对算子结果产生的影响 也不同。这两种算子对噪声都有一定的抑制作用, 但不能完全排除检测结果中 出现虚假边缘的情况。这两者对灰度渐变低噪声的图像有较好的检测效果, 但 是对于混合多复杂噪声的图像处理效果就不理想了。 正如前面所讲,采用邻域可以避免在像素之间内插点上计算梯度考33 虑一下
9、上图中所示的点周围点的排列Sobel 算子也是一种梯度幅值, , i j (11)Mss xy 22 其中的偏导数用下式计算: (12) )()( )()( 456210 670432 acaaacaas acaaacaas y x 其中常数2c 和其他的梯度算子一样,和可用卷积模板来实现,如图 1.1 所示:sxsy 101 202 101 x s 121 000 121 y s 图 11 请注意这一算子把重点放在接近于模板中心的像素点Sobel 算子是边缘检测 器中最常用的算子之一 (图 12) 456 37 210 , aaa ajia aaa 图 12 用于说明 Sobel 算子和 P
10、rewitt 算子的邻域像素点标记 Prewitt 算子与 Sobel 算子的方程完全一样,只是常量 c=1所以 (13) 101 101 101 x s 111 000 111 y s 请注意,与 Sobel 算子不同,这一算子没有把重点放在接近模板中心的像素点 如图 1.3 所示 2、Robert 算子 Robert 算子边缘检测算子也叫交叉差分算子,是一种利用局部差分寻找 边缘的算子,用领域的处理。22 边缘,是指周围像素灰度有阶跃变化或屋顶等变化的那些像素的集合。图像 的边缘对应着图像灰度的不连续性。显然图像的边缘很少是从一个灰度跳到另 一个灰度这样的理想状况。真实图像的边缘通常都具有
11、有限的宽度呈现出陡峭 的斜坡状。 边缘的锐利程度由图像灰度的梯度决定。梯度是一个向量,f 指 出灰度变化最快的方向和变化量。 (1.5),(f y f x f (1.6) 2 2 y f x f f (1.7) x f y f 梯度大小由确定。而梯度方向则由确定,因此最简单的边缘检测算子是用图像 的垂直和水平差分来逼近梯度算子: (1.8)1,(),(, 1,(yxfyxfyxfyxff 因此当我们寻找边缘的时候,最简单的方法是对每一个像素计算出 (1.8)的向量,然后求出它的绝对值。利用这种思想就得到了Roberts算子: (1.9) 2 1 22 ), 1() 1,()1, 1(),(),
12、(yxfyxfyxfyxfyxg 其中f(x,y)是具有整数像素坐标的输入图像。 其中 g(x,y)由下面的模板计算: (13) Gx 10 01 Gy 01 10 同前面的梯度算子一样,差分值将在内插点x+1/2;y+1/2处计22 算Roberts 算子是该点连续梯度的近似值,而不是所预期的点x,y处的近似 值。 3、laplacian 算子 平滑过的阶跃边缘二阶导数是一个在边缘点处过零的函数。拉普拉斯算子是 二阶导数边缘算子。函数的拉普拉斯算子公式为),(yxf (17) 2 2 2 2 2 f f x f y 使用差分方程对 和方向上的二阶偏导数近似如下:xy 5 (18) 这一近似式
13、是以点x,y+1为中心的。用 y-1 替换 y,得到 (19) 2 2 x f 1,),2 1,(jifjifjif 它是以点为中心的二阶偏导数的理想近似式,类似地, , i j (110) 2 2 y f , 1),2, 1(jifjifjif 把这两个式子合并为一个算子,就成为下面能用来近似拉普拉斯算子的模板: (111) 010 141 010 2 当拉普拉斯算子输出出现过零点时就表明有边缘存在,其中忽略无意义的过 零点(均匀零区)。原则上,过零点的位置精度可以通过线性内插方法精确到子 像素分辨率,不过由于噪声,结果可能不会很精确。 4Canny 算子 检测阶跃边缘的基本思想是在图像中找
14、出具有局部最大梯度幅值的像素点。 检测阶跃边缘的大部分工作集中在寻找。 Canny边缘检测器是高斯函数的一阶导数,是对信噪比与定位之乘积的最优 化逼近算子Canny 1986。我们将通过下面的符号对Canny边缘检测器算法作一 概括说明。用表示图像,使用可分离滤波方法求图像与高斯平滑滤波器卷 ,jiI 积,得到的结果是一个已平滑数据阵列 , ,;,jiIjiGjiS 其中是高斯函数的散布参数,它控制着平滑程度。 已平滑数据阵列的梯度可以使用一阶有限差分近似来计算 与 S i j , 22x 偏导数的两个阵列与: y,jiP,jiQ (112) 2/)1, 1 1, 1,(, 2/), 1 1,
15、 1, 1,(, jiSjiSjiSjiSjiQ jiSjiSjiSjiSjiP 在这个正方形内求有限差分的均值,以便在图像中的同一点计算 x 和 y 的22 偏导数梯度。幅值和方位角可用直角坐标到极坐标的坐标转化公式来计算: (113) 22 ,jiQjiPjiM (114) ,/ ,(arctan,jiPjiQji 其中,反正切函数包含了两个参量,它表示一个角度,其取值范围是整个 圆周范围内。为高效率地计算这些函数,尽量不用浮点运算梯度的幅度和方 向也可以通过查找表由偏导数计算。 3、详细设计过程详细设计过程 1、分析 图像的大部分主要信息都存在于图像的边缘中,主要表现为图像局部特征 的不
16、连续性,是图像中灰度变化比较剧烈的地方,即通常所说的信号发生奇异 变化的地方。奇异信号沿边缘走向的灰度变化剧烈,通常将边缘划分为阶跃状 和屋顶状两种类型如图 3.1 所示。阶跃边缘中两边的灰度值有明显的变化;而 屋顶状边缘位于灰度增加与减少的交界处。在数学上可利用灰度的导数来刻画 边缘点的变化,对阶跃边缘、屋顶状边缘分别求其一阶、二阶导数。 图 3.1 阶跃边缘和屋顶状边缘处一阶和二阶导数变化规律 (其中第一排为理想信号,第二排对应实际信号) 2、工作流程分析 系统工作流程较为简单,功能用于对图像进行边缘检测,工作流程并不复 杂。 双击 ch1_1.exe 文件,系统界面就出现了,点击文件,然
17、后选择打开,打 开 BMP 格式的图片文件,此时图片就会显示在工作区域;主要模块的系统过程 如图 3.2 所示 图 3.2 4、一阶微分算法的实验结果与分析 (1)Sobel 算子公式的定义为: (2)实验结果分析 以 cameraman 图片为例,用 Sobel 算法,分别给检测结果。 理论上 Sobel 算子可以轻易在空间上实现,Sobel 边缘检测器不但可以产生 较好的边缘检测效果由 5.2 图可以看出 Sobel 算子虽然检测到的边缘信息很丰 富,也较为连续,但是边缘很模糊,严重的影响了视觉效果。 开始 读取待测图 片 边缘检测 Sobel 算子Robert 算子Priwitt 算 子
18、 laplacian 算子 保存 退出 Canny 算子 ) 1, 1() 1,(2) 1, 1(|),(yxfyxfyxfyxGX | ) 1, 1() 1,(2) 1, 1(yxfyxfyxf ) 1, 1(), 1(2) 1, 1(|),(yxfyxfyxfyxGy | ) 1, 1(), 1(2) 1, 1(yxfyxfyxf (4)Robert 算子的公式定义为: 2 1 22 ), 1() 1,()1, 1(),(),(yxfyxfyxfyxfyxg (5)Prewitt 算子: Prewitt 算子与 Soble 算子不同的地方在于没有把重点放在接近模板中心的 像素点。Prewi
19、tt 算子首先进行邻域平均或加权平均,然后进行微分。 (6)实验结果分析 以 cameraman 图片为例,分别用 Roberts、Prewitt 两种算法,分别给检测结 果。 通过图 5.3 和图 5.4 知, Roberts 算子、Prewitt 算子,都能够比较准确的 检测出图像的边缘。 基于一阶微分的边缘检测算子具有实现简单、运算速度快等特点,检测结果 不可靠,不能准确判定边缘的存在及边缘的准确位置,造成这种情况的原因: (1)实际边缘灰度与理想边缘灰度值间存在差异,这类算子可能检测出多个边缘; (2)边缘存在的尺度范围各不相同,这类算子固定的大小不利于检测出不同尺度 上的所有边缘;(
20、3)对噪声都比较敏感。 5、二阶微分算法的实验结果与分析 (1)Laplacian 算子的公式为: 2 2 2 2 2 f f x f y (2)Canny 算子的公式为: ,;,jiIjiGjiS (3)实验结果分析 以 cameraman 图片为例,分别用 Laplacian、Canny 两种算法,分别给检测结 果。 由图 5.5 可以看出 Laplacian 算子:对图像中的阶跃性边缘点定位准确。 Canny:采用高斯函数对图像进行平滑处理,该算子也将一些高频边缘平滑掉, 造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘的连续性较好。 Laplacian 算子是对二维函数进行运算的二阶
21、导数算子,与方向无关,对取向 不敏感,因而计算量要小。根据边缘的特性,Laplacian 算子可以作为边缘提 取算子,计算数字图像的 Laplacian 值可以借助模板实现,它相当于高通滤波, 常会出现一些虚假边缘。Canny 算子是一个具有滤波、增强和检测的多阶段的 优化算子。 在进行处理前,Canny 算子增强边缘是将邻域(或局部)强度值有显著变化 的点突出来,一般通过计算梯度幅值来完成。Canny 分割算法采用一阶偏导的 有限差分来计算梯度的幅值和方向。对一个边缘来说,其一阶导数在边界处存 在一个向上的阶跃,或者其二阶导数过零点。在处理过程中,Canny 算法还将 经过一个非极大值抑制的
22、过程。最后 Canny 算法将采用两个阈值来连接边缘。 但也有不足之处,Canny 算法对整幅图像采用同一高斯函数进行滤波,无法顾 及图像局部特征信息,边缘检测的阈值需要预先设定。先确定一个阈值系数, 该系数定义为梯度小于阈值的像素数所占边缘像素总数的比例,以此来确定阈 值。这种方法没有利用图像自身的信息,不具有自适应能力。 四、调试过程中出现的问题及相应解决办法四、调试过程中出现的问题及相应解决办法 Matlab 语言是一种解释执行的语言,它灵活、方便,其调试程序手段丰富, 调试速度快。 。Matlab 语言与其它语言相比,把编辑、编译、连接和执行融为 一体。它能在同一画面上进行灵活操作快速
23、排除输入程序中的书写错误、语法 错误以至语意错误,从而加快了用户编写、修改和调试程序的速度,可以说在 编程和调试过程中它是一种非常简单的语言。 但之前并没有熟悉 Matlab 的编译,出现直接把程序复制粘贴的错误,后来才 学习正确的编译运行过程。 代码在运行过程中的错误: filename, pathname = uigetfile( . *.bmp;*.jpg;*.png;*.jpeg, Image Files (*.bmp, *.jpg, *.png, *.jpeg); . *.*, All Files (*.*), . Pick an image); axes(handles.axes_
24、src); fpath=pathname filename; 此代码缺少了imread读入图片,因此不能够正确的运行。应在代码后面加入如 下代码: img_src=imread(fpath); 五、程序运行截图及其说明五、程序运行截图及其说明 1、图 5.1:是原图,做为参考图片 图 5. 2、图 5.2:是 Sobel 算子运行出来后的图片,能检测到的边缘信息较为连续, 但边缘很模糊。 图 5.2 3、图 5.3:是 Roberts 算子运行出来后所得的图片,但边缘较细。 图 5.3 4、图 5.4:是 Prewitt 算子运行后的图片,所得的图片精度不高,边缘较粗。 图 5.4 5、图 5
25、.5:是 Laplacian 算子所得,对图像中的阶跃性边缘点定位准确,有信 息丢失,边缘不够连续。 图 5.5 6、图 5.6:是 Canny 算子所得,边缘较联系,但还是有丢失边缘信息。 图 5.6 六、简单操作手六、简单操作手 1、Matlab 运行环境简介 1)启动 Matlab 可由下列方法之一进入 Matlab 命令行窗口: (1)开始 程序 Matlab。 (2)双击桌面 Matlab 图标。 2)编制、运行 Matlab 程序可用下列方法之一编制和运行 Matlab 程序 选择菜单条中的“File Open (或 New)进入 Matlab 程序编辑器,在编辑 器中编辑程序。
26、A. 命令行以“, ”或“;”结尾。以“, ” 结尾运行时显示该 命令运行结果,以“;” 结尾不显示该命令运行结果。 B. 注释前加“%” 。 C. 运行操作可使用命令快捷键。 2、图像文件的读、写和显示 图像文件的读取 读图像文件的函数格式: A=imread(路径、文件名及文件后缀 ) ,如 I=imread(e:image.bmp ) 其含义:将 e 盘中的 bmp 文件 image 赋给变量 I,bmp(windows bitmap)为 位图文件。 3、得到的窗口如图 6.1,文件菜单里包括:打开,保存,退出按钮;图像处理 菜单里包括:Sobel 算子、Robert 算子、Priwit
27、t 算子、laplacian 算子、 Canny 算子功能相应的按钮,分别为 Sobel、Robert、Priwitt、laplacian、Canny。 图 6.1 4、打开图片信息:点击文件菜单里的打开选择所要打开文件夹里的图片,则有 如图 6.2 所示。 图 6.2 5、图像边缘检测:点击图像处理菜单,选择里面的算子所对应的按钮进行操作, 然后选择文件菜单里的保存按钮保存图片,保存到相应的文件夹,则得到的图 如图 6.3 所示。 图 6.3 6、退出:若要退出,点击文件菜单里的退出按钮,则可退出图像处理界面。 设计总结设计总结 通过分析几种应用于数字图像处理中的边缘检测算子,根据它们在实践
28、中 的应用结果进行研究,主要包括: Sobel 边缘算子、Robert 边缘算子、Prewitt 边缘算子、laplacian 算子、Canny 边缘算子对图像的边缘检测。 Sobel 算子:根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这 一现象检测边缘。提供较为精确的边缘方向信息,边缘定位精度不够高。当对 精度要求不是很高时,是一种较为常用的边缘检测方法。 Robert 算子:采用对角线方向相邻两像素之差表示信号的突变,检测水平和 垂直方向边缘的性能好于斜线方向,定位精度比较高,检测出的边缘较细。 Prewitt 算子:凡灰度新值大于或等于阈值的像素点都是边缘点。即选择 适当的阈值
29、T,若 P(i,j)T,则(i,j)为边缘点,P(i,j)为边缘图像。这种判 定是欠合理的,会造成边缘点的误判。检测出的边缘比较粗,定位精度低,容 易损失角点。 Laplacian 算子:是二阶微分算子,对图像中的阶跃性边缘点定位准确,但 会丢失一部分边缘的方向信息,造成一些不连续的检测边缘。 Canny 算子:采用高斯函数对图像进行平滑处理,该算子也将一些高频边缘 平滑掉,造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘的连续性较 好。 通过这次数字图像课程设计,让我可以熟悉 Matlab 这个软件。Matlab 在工 业方面的应用很广泛,我希望能有机会更深刻的学习理解它。 在指导教师的指
30、导下,我顺利的完成了这次数字图像的课程设计,课设题目 有点难度,但对我们的课程学习,和知识的运用有着很好的作用。总之,我认 为这次课程设计是不错的,收获也是丰富的。 参考资料参考资料 1 朱虹. 数字图像处理基础M. 北京: 科学出版社. 2005.4:217-220 2余成波. 数字图像处理及 MATLAB 实现M. 重庆: 重庆大学出版 社. 2003.7:356-359 3深洁,杜宇人,高浩军.图像边缘检测技术研究J.信息技术,2005(12). 4尹建媛. 图像处理中边缘检测算法的研究J. 科技信息. 2008,(4):30-32 5崔屹数字图像处理技术与应用M北京:电子工业出版社,1
31、997:35- 39 6 王予生,卜佳俊,陈纯.一种基于积分变换的边缘检测算法J. 中国图象图 形学报. 2002,7(2):145149 致谢致谢 通过两周的的努力,我的课程设计终于完成了。在整个课程设计中,我在学 习上和思想上都受益非浅,这除了自身的努力外,与指导的老师、同学和朋友 的关心、支持和鼓励是分不开的。 在课程设计的编写过程中, 指导老师倾注了大量的心血,一遍又一遍地指 出每次编程里的具体问题,详细讲解课题,你的细心指导,严格把关,循循善 诱,在此我表示衷心感谢。同时我还要感谢在我做课设期间给予我帮助的同学 们,没有你们的帮助,我的课设不会那么顺利。 做课程设计是一次再系统的学习
32、,让我们巩固了我们所学的知识,让我们以 后能更好的运用于实践打下了一定基础。同时课程设计的的完成,让我在其中 学到了许多,尤其是学会了帮助合作,懂得了帮助合作造就的效益和成果。在 这里再次感谢帮助我的的同学,还有对我们精心指导的老师! 附录附录 源程序: function varargout = Mywork(varargin) % MYWORK MATLAB code for Mywork.fig % MYWORK, by itself, creates a new MYWORK or raises the existing % singleton*. % % H = MYWORK retu
33、rns the handle to a new MYWORK or the handle to % the existing singleton*. % % MYWORK(CALLBACK,hObject,eventData,handles,.) calls the local % function named CALLBACK in MYWORK.M with the given input arguments. % % MYWORK(Property,Value,.) creates a new MYWORK or raises the % existing singleton*. Sta
34、rting from the left, property value pairs are % applied to the GUI before Mywork_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Mywork_OpeningFcn via varargin. % % *See GUI Options on GUIDEs Tools menu. Choose “GUI
35、 allows only one % instance to run (singleton)“. % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help Mywork % Last Modified by GUIDE v2.5 08-Jan-2013 20:09:06 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct(gui_Name, mfilename
36、, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, Mywork_OpeningFcn, . gui_OutputFcn, Mywork_OutputFcn, . gui_LayoutFcn, , . gui_Callback, ); if nargin end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end % End initialization code - DO
37、NOT EDIT % - Executes just before Mywork is made visible. function Mywork_OpeningFcn(hObject, eventdata, handles, varargin) setappdata(handles.figure_Mywork,img_src,0); % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future vers
38、ion of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to Mywork (see VARARGIN) % Choose default command line output for Mywork handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes Mywork wait for user re
39、sponse (see UIRESUME) % uiwait(handles.figure_Mywork); % - Outputs from this function are returned to the command line. function varargout = Mywork_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved
40、 - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout1 = handles.output; % - - function m_file_Callback(hObject, eventdata, handles) % hObject handle to m_file (see GCBO) % eventd
41、ata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - - function m_file_open_Callback(hObject, eventdata, handles) filename, pathname = uigetfile( . *.bmp;*.jpg;*.png;*.jpeg, Image Files (*.bmp, *.jpg, *.png, *.jpeg); . *.*, All F
42、iles (*.*), . Pick an image); axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src fpath=pathname filename;%将文件名和目录名组合成一个完整的路径 img_src=imread(fpath);%用imread读入图片,并用imshow在axes_src上显示 imshow(img_src); title(原图); setappdata(handles.figure_Mywork,img_src,img_src); % hObject handle to m_file_open (see GCB
43、O) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - - function m_file_save_Callback(hObject, eventdata, handles) filename, pathname = uigetfile( . *.bmp;*.jpg;*.png;*.jpeg, Image Files (*.bmp, *.jpg, *.png, *.jpeg); .
44、 *.*, All Files (*.*), . Pick an image); axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src fpath=pathname filename;%将文件名和目录名组合成一个完整的路径 img_src=imread(fpath);imshow(img_src); img_src=getappdata(handles.figure_Mywork,img_src); % hObject handle to m_file_save (see GCBO) % eventdata reserved - to be de
45、fined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - - function m_file_exit_Callback(hObject, eventdata, handles) close(handles.figure_Mywork); % hObject handle to m_file_exit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - - function m_image_Callback(hObject, eventdata, handles) % hObject handle to m_image (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -