Matlab图像处理课程设计报告

上传人:仙*** 文档编号:34113348 上传时间:2021-10-20 格式:DOC 页数:52 大小:1.27MB
收藏 版权申诉 举报 下载
Matlab图像处理课程设计报告_第1页
第1页 / 共52页
Matlab图像处理课程设计报告_第2页
第2页 / 共52页
Matlab图像处理课程设计报告_第3页
第3页 / 共52页
资源描述:

《Matlab图像处理课程设计报告》由会员分享,可在线阅读,更多相关《Matlab图像处理课程设计报告(52页珍藏版)》请在装配图网上搜索。

1、基于MATLAB的图像处理制作自己的Photoshop 课程设计学生姓名: 学 号: 专业班级: 指导教师: 二一 年 四 月 十三 日 目录一、 课程设计目的.3二、 课程设计描述.3三、 课程设计要求.3四、 总体设计.3五、 按钮功能.45.1、Scan(浏览) . .65.2、Back(上一张) . .65.3、Next(下一张) . .75.4、Mark(添加水印) . .75.5、Magnify(以鼠标点击为中心放大) .75.6、R90CW(顺时针旋转90度) .85.7、R90CCW(逆时针旋转90度) . 85.8、Exit(退出) . . .8六、 菜单功能.86.1、文件

2、. .86.1.1、打开.96.1.2、保存.96.1.3、退出.96.2、编辑. .96.2.1、放大.96.2.2、缩小.106.2.3、灰度.106.2.4、亮度.116.2.5、旋转.126.2.6、截图.136.3、变换.136.3.1、傅里叶变换.136.3.2、离散余弦变换.146.3.3、Radom变换.146.4、噪声. .156.4.1、高斯噪声.156.4.2、椒盐噪声.156.4.3、斑点噪声.166.4.4、泊松噪声.166.5、滤波.166.5.1、高通滤波.176.5.2、低通滤波.176.5.3、平滑滤波(线性).176.5.4、平滑滤波(非线性).186.5.

3、5、锐化滤波(线性).186.5.6、锐化滤波(非线性).196.6、直方图统计 . 196.6.1、R直方图.206.6.2、G直方图.206.6.3、B直方图.216.7、图像增强 . .216.7.1、伪彩色增强 .216.7.2、真彩色增强 . . . .226.7.3、直方图均衡 . . . .226.7.4、NTSC颜色模型 .236.7.5、YCbCr颜色模型 .236.7.6、HSV颜色模型 . . . .246.8、阈值分割 . . . 24七、 程序调试及问题分析.26八、 心得体会.28九、 参考文献.29十、 附录.29一、 课程设计目的综合运用MATLAB工具箱实现图

4、像处理的GUI程序设计。二、 课程设计描述 学习MATLAB GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。 以下列出几点程序的功能,供参考1)图像的读取和保存。2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并

5、保存,比较几种插值的效果。5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。比较去噪效果。三、 课程设计要求1)熟悉和掌握MATLAB 程序设计方法2)掌握MATLAB GUI 程序设计3)学习和熟悉MATLAB图像处理工具箱4)学会运用MATLAB工具箱对图像进行处理和分析四、 总体设计这次的设计的功能按钮包括菜单和面板的按钮两部分,面板上的按钮功能和菜单上的“阈值分割”功能是相对比较有新意的,这几个功能基本都是自己编写的源程序,并没有现成的功能函数贡直接调用,算是花了不少功夫吧。然后菜单上的功能都是图

6、像处理必备的一些基本功能,大多可以通过Matlab自带的一些现成函数来调用以实现,关键是要注意它的使用语法和支持的图像类型。注:整个设计都是基于Matlab 6.5版本。对于一些需要动态演示的,无法贴图,在附件里有演示视频具体的菜单功能和面板设计如下图所示: 五、 按钮功能5.1、Scan(浏览)为了能让图像处理人员实现预览将要处理的图像,设计了这个功能。该功能实现的主要思想是,先获取图片所在文件夹的路径,然后列出文件夹的文件内容,最后通过一个循环来读取每一张图片,需要用到的一些函数如下:directoryname = uigetdir(, pick up files); %获得文件夹路径,得

7、到一个字符数组files = dir(directoryname);%列出文件夹里的内容,包含(name date bytes isdir)directoryname1 = strcat(directoryname,);%字符连接max = size(files,1);%得到总共文件数pause(0.8);%暂停在设计过程中有碰到一个问题,对于d1 = files(i).name;当i为1,2时得到不是图片的文件名,所以说循环时要从3开始。 d1 = files(1).named1 =. d1 = files(2).named1 =.在按钮调试的过程中,后来又发现了一个问题,但文件夹中包含其它

8、非图片格式的文件时会出错,读取的文件路径无法显示,因为它的格式不是合法图片格式。为了解决这个问题,我就通过获取每个文件的格式,然后判断它的格式是否为图片,是则显示,不是则跳过,这样以来就循环次数也可以从1开始了。具体需要用到的函数如下:A = jpg, png, bmp, jpeg, tif;%合法的图片类型d2 = strfind(d1, .);%获取.在字符串中的位置,因为.之后为文件类型if any(ismember(A, d1(d2+1:end);%判断文件类型是否合法5.2、Back(上一张)在浏览完图片以后,为了可以选择喜欢处理的图片而无需每次的打开图片,设计了上一张和下一张功能。

9、该功能实现的主要思想是,先获取已经显示图片的路径,然后从第一张图片的路径开始与正在显示的图片路径做比较,当二者相同时,记下i,然后执行i=i-1,得到上一张图片路径,最后显示出来。具体实现的关键语句如下:for i=3:max d1 = files(i).name; d2 = strcat(directoryname1,d1); %文件夹内每张图片路径 if strcmp(d2,str) i=i-1;break; %与正在显示的图片路径做比较,看是否相同 else end end 当显示第一张图片时,再执行上一张,提示:这是第一张图片。if i=2 msgbox(this is the fir

10、st img);5.3、Next(下一张) 下一站和上一张思路一样,只是在得到显示图片路径以后,执行i=i+1。另外我还加了一个功能,就是当现实到最后一张图片是,如果再下一张就提示:这是最后一张图片。if i=max+1 msgbox(this is the last img); 5.4、Mark(添加水印)为了给自己处理过的图像添加标志,设计了添加水印的功能。该功能的主要思想是,图像即为数组,如果要再图像上添加水印,也就是用另一幅图像的数据去覆盖原图像对应部分的数据,也就是对数组内容的替换。然后就是关于水印添加的方位了,由于添加方位的不同,所要替代的范围的不同了。基于这种思想,我的设计如下:

11、a(1:n2,1:m2)=b; %左上角 a(1:n2,(m1-m2+1):m1)=b; %右上角a(n1-n2+1):n1,1:m2)=b; %左下角a(n1-n2+1):n1,(m1-m2+1):m1)=b; %右下角其中a为原图的读入矩阵,b为待添加的水印的图像矩阵,在替代过程中我们要确保,a矩阵比b矩阵大,更重要的是a中将要替代的部分要和b的大小相同。在编写程序过程中,发现了一个缺陷,我们可以为彩色图像添加彩色水印,为灰度图像添加灰度水印,但是当两个类型不一样时就会出错,所以如果两张图的类型不一致,在添加之前就要类型转化。isrgb(a);isrgb(a);%判断a,b图像的类型我还发

12、现其实还有可改进的地方,前面我们添加水印的方法是完全替代,如果我们同时保留两部分的数据,就可以添加近似透明的水印,后来再查阅相关函数时发现,imadd可以实现矩阵相加的功能,后来尝试了下,效果一般,应该还有其它更好的方法,还有待研究。5.5、Magnify(以鼠标点击为中心放大)当在做截图功能的时候,我突然想到,既然截图可以自由选择要放大的范围,那么多次的截图就可以实现对某部分不断地放大,所以想到了基于截图的以鼠标点击为中心放大的功能。但首先要实现获得鼠标点击坐标的功能,在查阅过程中发现了x,y=ginput(1);以十字坐标形式,当鼠标左键点击下,返回点击点的X,Y坐标。然后就是要实现以点击

13、一定范围放大,也就是每次实现以鼠标点击点位中心的正方形大小截图,通过一个循环多次截图就可以实现这个功能了。具体设计的函数如下:for n=1:3 %循环次数x,y=ginput(1); %获得点击点坐标z=imcrop(z1,x-400/n,y-400/n,800/n,800/n); %每次以一定大小截图imshow(z); z1=z;%为下一次截图的源数据end这个设计有点不足,就是每次都要点击要放大中心点,而且一定要执行三次,如果想要提前结束只能按下回车键。5.6、R90CW(顺时针旋转90度)当初在设计顺,逆时针旋转90度的时候就在想,能不能实现连续的旋转,而不是每次运行都转到同一个位置

14、,后来发现只要把每次转完的数据保存,然后以此作为下一次旋转的源数据就可以,于是这个功能叶完成了。具体实现如下:y=imrotate(r,90); r=y;%把每次处理完的数据保存下来,作为下一次处理的源数据5.7、R90CCW(逆时针旋转90度)逆时针旋转和顺时针旋转的思路一样,只是我们要把每次处理完的数据做为全局变量,这样以来顺时针和逆时针选择功能都可以处理它,所以在按钮的回调函数前加上要加上global r ,其中r是每次旋转后的图像矩阵。5.8、Exit(退出)在设计退出的程序时,只用了clc;clear all;close (gcf);后来发现一个问题,就是在退出后再一次运行GUI,当

15、点击任意一个功能的时候,都可以显示出上次退出前的图像,也就是说坐标轴内的图像还没有清楚,后来通过的一番搜索,找到了相应的指令,cla reset,于是问题得到了解决。六、 菜单功能6.1、文件该菜单包含文件的打开,保存和退出GUI的功能,这几个功能是每一种图像处理软件必备的功能。6.1.1、打开为了让使用者打开所需要的图片,设计了打开图像这项基本功能。通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件。Uigetfile函数的调用格式为name,path=yigetfile(), 在按下对话框中的执

16、行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。通过imread函数读出图像数据,把图像数据赋值给全局变量im,这里得到的im要声明为全局变量,为后面每个功能所使用。6.1.2、保存对于图像保存,可以用imwrite函数,把数据i存到指定的文件夹中。这里仍然要用到uigetfile函数来实现,用它获得将要保存的路径。可以指定文件保存的格式,如:imwrite(i,file,jpg);,其中i为从坐标轴中获取的图像信息:i=getimage(gca);6.1.3、退出退出和按钮的退出功能一样,清除所有变量和坐标轴中的内容。clc;clear all;cla re

17、set;close(gcf) 6.2、编辑 该菜单包含图像放大,缩小,灰度转换,亮度转换,任意角度旋转和截图这几项功能,这些是对图像的一些基本几何变换等基本功能。6.2.1、放大在MATLAB中,用函数imresize来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。该函数的调用格式如下:Bimresize(A,m,method)其中:参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。在实现放大后,显示图像并不能清晰地看出来图像有什么

18、具体的变化,但是通过查询图像属性后可以发现,图像放大了。 6.2.2、缩小缩小的原理和放大原理是一样的,就是对Bimresizee(Am,method)中参数m进行修改,当 m小于1时实际上是缩小;同放大一样,如果原图质量较好,尺寸较大,由于限制了坐标轴大小的缘故,在功能现实时我们看不出变化,而实际上是有变化的。通过查看图片属性可以看到: 我们可以看到,放大两倍后的图像尺寸是原图的0.5倍,但由于限制了坐标轴大小的缘故,在功能现实时我们看不出变化,而实际上是有变化的,这和图片放大时一样的。6.2.3、灰度由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维

19、,可以只取其中的二维数据,实现方法程序为:global im yim(:,:,1);imshow(y); 我们也可以通过调用图像类型转化函数来实现:global im yrgb2gray(im);imshow(y); 这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下: if isrgb(im) %判断是否为灰度图像y=rgb2gray(im); imsho

20、w(y);else msgbox(error,this is already a gray Img);end如果原图是RGB,执行该操作的结果如下图:如果原图是灰度图像,则提示: 6.2.4、亮度用imadjust函数,其调用格式如下: g=imadust(f,low_in high_in,low_out high_out),gamma)gamma 表示映射性质,默认值是1 表示线性映射。由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给low_in high_in,low_out high_out,gamma这五个参数,如下一组命令建立

21、了如图所示的输入对话框:prompt=输入参数1,输入参数2,输入gamma;defans=0 0.7,0 1,1;p=inputdlg(prompt,输入参数,1,defans); %这里得到的都是字符最后我们还要把得到的字符转换为数值:p1=str2num(p1);p2=str2num(p2);p3=str2num(p3);但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。由于imadjust函数有五个参数,所以原则上需要设计五

22、个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。滑动条设计如下图:亮度调整的tag名为ld,取值范围01,gamma值的tag名为gamma,取值范围为03。获取滑动条参数的程序如下:a=get(hObject,Value); %滑动条lightp2=0 a;p3=get(hObject,Value); %滑动条gammay=imadjust(im,0 0.5,p2,p3);这样我们就可以通过调整滑动条的位置来随时改变亮度值,得到想要的效果。6.2.5、旋转用函数imrotate来实现对图像的插值旋转。该函数的调用格式

23、如下: Bimrotate(A,angle,method,crop)其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。当然我们也可以和前面一样通过对话框的交互形式来实现任意角度的输入。6.2.6、截图在MATLAB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。Imcrop函数的调用格式如下:y=imcrop(im);imshow(y);截图的效果如下:6.3、变换 该菜单包括傅里叶变换,

24、离散余弦变换,Radon变换这三项功能,图像的变换使图像处理的一个重要内容,它是许多图像处理技术的基础。为了有效和快速地对图像进行处理和分析,常常需要将原定义在图像的空间的图像以某种形式转换到另一个空间,并利用这些空间的特有性质更方便地进行一些处理,最后再变换会到原空间以得到所需的效果。6.3.1、傅里叶变换为了得到图像的频谱图,先要对数据进行傅里叶变换,用fft2函数对二维数据进行快速傅里叶变换,同时为了更好的观察频谱图,需要把fft2变换后的数据进行平移,利用fftshift函数,把快速傅里叶变换的DC 组件移到光谱中心。这样图像能量的低频成分将集中到频谱中心,图像上的边缘、线条细节信息等

25、高频成分将分散在图像频谱的边缘。执行的相关程序和处理后的效果如下所示:m=fft2(x); %对图像执行二维傅里叶变换y=fftshift(m); %使低频能量集中在中心位置 imshow(log(abs(y),);%使用对数使低频部分显示效果更明显6.3.2、离散余弦变换傅里叶变化的一个最大问题是:它的参数都是复数,在数据的描述上相当于实数的两倍,不易计算,因此希望有一种能达到相同功能但数据量有不大的变换,在这个思想的指导下,产生了离散余弦变换。执行的相关程序和处理后的效果如下所示:gray=rgb2gray(im);d=dct2(gray); %对图像进二维行离散余弦变换axes(hand

26、les.axes2);imshow(log(abs(d),); %使用对数使低频部分显示效果更明显通过变换我们可以看到,图像的低频能量都集中在左上角区域,向着右下角方向,频率越来越高,这主要是以为离散余弦变换核实际上是取傅里叶变化的实部。6.3.2、Radon变换Radon函数计算指定方向上图像矩阵的投影,计算一定方向上平行光束的线积分。光线间隔1个象素单位。为了表示图像,radon变换通过围绕图像中心旋转光源来从不同角度获得图像的平行光投影。执行的相关程序和处理后的效果如下所示:theta=0:1:180;%对每个角度做radon变换处理r,xp=radon(im,theta);images

27、c(theta,xp,r);xlabel(degrees);%为x轴做标注colorbar;%显示颜色条Radon变换域hough变换紧密相关。可以用radon函数实现hough变换的一种形式来找出图像中的直线对象,执行的相关程序和处理后的效果如下所示:im=imread(1.jpg);im=mat2gray(im);BW=edge(im);% 边缘检测imshow(BW);6.4、噪声该菜单包含四种噪声的添加,高斯噪声,椒盐噪声,斑点噪声,泊松噪声。因此我们要对噪声进行研究,找到最好的去处噪声的方法。 6.4.1、高斯噪声所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。

28、高斯噪声是一种随机噪声,它完全由其时变平均值和两瞬时的协方差函数来确定。执行的相关程序和处理后的效果如下所示:y=imnoise(im,gaussian,p1,p2);6.4.2、椒盐噪声椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。去除脉冲干扰级椒盐噪声最常用的算法是中值滤波。执行的相关程序和处理后的效果如下所示:y=imnoise(x,salt & pepper,p1);6.4.3、斑点噪声斑点噪声是SAR成像系统的一大特色,源自基本分辨单元内地物的随机散射,在图像上表现为信号相关(如在空间上相关)的小斑点,它既降低了图像的画面质量,又

29、严重影响图像的自动分割、分类、目标检测以及其它定量专题信息的提取 。SAR斑点噪声的抑制可通过非相干多视处理,也可使用空间域滤波实现。执行的相关程序和处理后的效果如下所示:y=imnoise(im,speckle,p1);6.4.4、泊松噪声执行的相关程序和处理后的效果如下所示: y=imnoise(im,poisson);6.5、滤波该按钮包含了高通,低通滤波,平滑,锐化的线性和非线性滤波,大量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的高斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。因此,实时采集的图像需进行滤波处理

30、。注:对于平滑和锐化滤波都要先添加噪声。6.5.1、高通滤波高通滤波是只对低于某一给定频率以下的频率成分有衰减作用,而允许这个截止频率以上的频率成分通过,并且没有相位移的滤波过程。主要用来消除低频噪声,保留高频部分。图像中的边缘或线条与图像频谱中的高频分量相对应,因为采用高通滤波器让高频成分顺利通过,可以使图像的边缘或线条更加清楚,从而识相图像的锐化。执行的相关程序和处理后的效果如下所示:6.5.2、低通滤波 图像的边缘以及噪声干扰在图像的频域上对应于图像傅里叶变换中的高频部分,而图像的背景区则对应于低频部分,因此可以用频域低通滤波法去除图像的高频部分,以去掉噪声使图像平滑。对于低通滤波器截止

31、频率的不同,会发生不同程度的“振铃”现象,同时图像变模糊了。截止频率月底,滤除噪声越彻底,高频分量损失越严重,但图像就越模糊。执行的相关程序和处理后的效果如下所示:6.5.3、平滑线性滤波(领域平均法)对一些图像进行线性滤波可以去除图像中的某些类型的噪声,如采用领域平均法的均值滤波器就非常适用于去除通过扫描得到的图像中的颗粒噪声。领域平均法是空间域平滑噪声技术。对于给定图像的每个像点,取其领域含有m个像素,取其平均值作为处理后所得到图像像点的灰度,用一像素领域内个像素灰度平均值来代替该像素的灰度。执行的相关程序和处理后的效果如下所示:h=ones(3,3)/9;%产生滤波模板并归一化y=con

32、v2(zs,h);%用均值模板对图像滤波axes(handles.axes2);imshow(y,); 可以看出,领域平均法也平滑了图像信号,特别是可能使图像目标区域的边界变得模糊。可以证明,对图像进行领域平滑处理相当于图像信号通过一低通滤波器。6.5.4、平滑非线性滤波(中值滤波) 中值滤波是抑制噪声的非线性处理方法。给定一个滤波窗口,对于二维图像,窗口形状可以使矩形,圆形及十字形等,对于位于中间位置的那个数值称为这n个数值的中值。中值滤波的算法运算简单,易于实现,而且能较好地保护边界,但有时会失掉图像中的细线和小块的目标区域。执行的相关程序和处理后的效果如下所示:y=medfilt2(zs

33、,5,5);%用5*5的滤波窗口对图像进行中值滤波axes(handles.axes2);imshow(y);6.5.5、锐化线性滤波 拉氏算子比较适用于改善因为光线的漫反射造成的图像模糊,其原理是这样的,在摄影胶片记录图像的光化过程中,光点将漫反射到其它周围区域,造成图像模糊,不模糊图像等于模糊图像减去它的拉氏变换的常数倍。另外,人们还发现,及时模糊不是由于光的漫反射造成的,对图像进行拉氏变换也可以使图像更清晰。执行的相关程序和处理后的效果如下所示:I1=double(im);h=fspecial(laplacian);%拉氏算子I2=filter2(h,I1);%滤波axes(handle

34、s.axes2);I3=I1-I2;%减去模糊图像imshow(I3,);比较原始图像和经拉氏算子运算的图像,可以发现,图像的模糊部分得到了锐化,特别是模糊的边缘部分得到了增强,边界更加明显。但是,图像显示清楚的地方,经滤波后发生了失真,这也是拉氏算子增强的一大缺点。6.5.6、锐化非线性滤波 对一幅图像施加梯度模算子,可以增强灰度变化的幅度,因此我们可以采用梯度模算子作为图像的锐化算子,而且梯度模算子还具有方向同性和位移不变性。Sobel算子的特点是对称的一阶差分,对中心加权,具有一定的平滑作用。执行的相关程序和处理后的效果如下所示:H=fspecial(sobel);%梯度模算子axes(

35、handles.axes2);J=filter2(H,im);%滤波imshow(J);6.6、直方图统计该按钮包含了RGB三基色的直方图统计功能,灰度直方图是表示一幅图像灰度分布情况的统计表。直方图的横坐标是灰度级,纵坐标是具有该灰度级的像素个数或出现这个灰度级的概率。所以说,直方图统计提供了原图的灰度值分布情况,也可说给出了一幅图所有灰度值的整体描述。我们可以根据一幅图的灰度直方图情况来判断其质量,并可以通过一定的变换使原来偏暗或偏亮的图像变换到动态范围正常的区域,如直方图的规定化。6.6.1、R直方图灰度和彩色图形都有R直方图。执行的相关程序和处理后的效果如下所示: x=imhist(i

36、m(:,:,1);%统计图片每个灰度值个数 x1=x(1:10:256);horz=1:10:256;bar(horz,x1);%柱状图显示6.6.2、G直方图对于彩色图形没有G直方图。执行的相关程序和处理后的效果如下所示: x=imhist(im(:,:,2);%统计图片每个灰度值个数 x1=x(1:10:256);horz=1:10:256;bar(horz,x1);%柱状图显示6.6.3、B直方图对于彩色图形没有B直方图。执行的相关程序和处理后的效果如下所示: x=imhist(im(:,:,3);%统计图片每个灰度值个数 x1=x(1:10:256);horz=1:10:256;bar

37、(horz,x1);%柱状图显示6.7、图像增强 该菜单包含灰度图像的伪彩色增强,彩色图像的真彩色增强,图像的直方图均衡,彩色图像的NTSC,YCbCr,HSV颜色模型转换。在图像的生产,传输或变换的过程中,由于多种因素的影响,总要造成图像质量的下降,这就需要进行图像增强,改善图像的视觉效果,提高图像的清晰度。6.7.1、伪彩色增强对于灰度图像,人眼分辨的灰度级只有十几到二十几,而对不同的亮度和色彩图像则可以达到几百甚至上千,因此伪彩色增强是将一个波段或单一的黑白图像变换为彩色图像,从而把人眼不能区分的微小的灰度差别显示为明显的色彩差异,更便于解译和提取有用信息。伪彩色增强的方法主要有以下三种

38、:亮度切割技术,灰度彩色变换,频域滤波法。 我采用的是亮度切割技术,亮度切割技术是伪彩色增强中最简单的一种方法,它是对图像亮度范围进行分割,使一定亮度间隔对应于某一颜色。对于切割平面以下的分配一中颜色,平面以上的再分配一种颜色。这样,便可以把一幅灰度图像变成一幅伪彩色图像,此法比较直观简单,缺点使变换出的彩色数目有限而且颜色生硬不够调和,量化噪声大。执行的相关程序和处理后的效果如下所示: c=zeros(size(a); %a为原灰度图像矩阵 pos=find(a100);%找到灰度值小于100的 c(pos)=a(pos); b(:,:,3)=c;%变为蓝色 %对于其它颜色的变换思路同上,最

39、后显示伪彩色变换后的图像b imshow(b);6.7.2、真彩色增强真彩色增强时从彩色到彩色的一种变换。通过一定的映射函数变换成新的三基色分量,彩色合成使得增强图像中各目标呈现出与原图像不同的彩色。通过真彩色增强我们可以达到变换图像引起人们的特别关注,以及通过人眼对不同颜色的灵敏度的不同,使景物呈现出与人眼色觉相匹配的颜色,以提高人眼对目标的分辨力。执行的相关程序和处理后的效果如下所示:im(:,:,1)=immultiply(im(:,:,1),0.3);%对R基色每个元素乘以0.3im(:,:,2)=immultiply(im(:,:,2),0.2);%对G基色每个元素乘以0.2im(:

40、,:,3)=immultiply(im(:,:,3),0.5);%对B基色每个元素乘以0.5axes(handles.axes2);imshow(im);%最后显示处理变换后的RGB图像6.7.3、直方图均衡如果获得的一幅图像的直方图效果不理想,可以通过直方图均衡化处理技术作适当的修改,实现图像清晰的目的。这种方法的基本思想是对原始图像中的像素灰度做某种映射变换,是变换后的图像灰度概率密度是均匀分布的。执行的相关程序和处理后的效果如下所示:if isrgb(im) %对灰度图像和彩色图像分别处理 a=histeq(im(:,:,1); %对每一种基色直方图均衡 b=histeq(im(:,:,

41、2); c=histeq(im(:,:,3); k(:,:,1)=a; k(:,:,2)=b; k(:,:,3)=c; imshow(k); elseh=histeq(im); %对灰度图像直方图均衡 imshow(h);end通过变换,图像灰度的动态范围得到了增加,从而提高图像的对比度,但是他是以减少图像的灰度等级为代价的,而且均衡化在增加图像反差的同时,也增加了图像的颗粒感,感觉好像图像时由许多细小颗粒组成的。6.7.4、NTSC颜色模型NTSC模型广泛应用于美国等国家的电视信号,它的特点是信号的强度信息相分离,同一个信号可以方便地同时表示彩色图像和黑白图像。在NTSC格式中,图像由三个分

42、量表示:亮度(luminance)用Y表示,色度(hue)用I表示,饱和度(saturation)用Q表示。第一个分量Y,表示灰度信息,后两个分量表示彩色信息。因此NTSC模型使用的是YIQ色彩坐标轴,NTSC模型的色彩空间又称YIQ空间。通过执行相关函数我们可以分析彩色图像的每一个分量的情况。执行的相关程序和处理后的效果如下所示:global imy=rgb2ntsc(im);%将rgb颜色模型转化为ntsc颜色模型subplot(1,3,1); imshow(y(:,:,1);%Y亮度 ;xlabel(luminance);subplot(1,3,2);imshow(y(:,:,2);%I

43、色调 ;xlabel(hue);subplot(1,3,3);imshow(y(:,:,3); %Q饱和度 ;xlabel(saturation);6.7.5、YCbCr颜色模型 在DVD、摄像机、数字电视等消费类视频产品中,常用的色彩编码方案是YCbCr,其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。通过函数变换我们可以比较两种颜色的差异。执行的相关程序和处理后的效果如下所示: y=rgb2ycbcr(im);imshow(y);6.7.6、HSV颜色模型HSV(hu

44、e,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于 角度0 ,绿色对应于角度120,蓝色对应于角度240。在HSV颜色模型中,每一种颜色和它的补色相差180 。 饱和度S取值从0到1,所以圆锥顶面的半径为。在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。通过函数变换我们可以比较两种颜色的差异。执行的相关程序和处理后的效果如下所示:y=rgb2hsv(im);im

45、show(y);6.8、阈值分割一幅图像包括目标,背景和噪声,怎样从灰度图像中取出对象物?灰度阈值法就是把图像的灰度分成不同的等级,然后用设置灰度阈值的方法确定有意义的区域或欲分割物体的边界。设定某一阈值T,对图像进行二值化处理。执行的相关程序和处理后的效果如下所示:global imI=im;I=double(I(:,:,1);%只对灰度进行处理fxy=zeros(1,256);m,n=size(I);for i=1:m %统计每个灰度值的个数 for j=1:n c=I(i,j); fxy(c+1)=fxy(c+1)+1; endend figure(1);plot(fxy);%画出灰度直

46、方图p1=Input Num:;%设置个对话框,选择阈值p2=180;p3=inputdlg(p1,Input Num:1256,1,p2);p=str2num(p31);for i=1:m %小于阈值的为黑,大于阈值的为白 for j=1:n if I(i,j) *Inner matrix dimensions must agree.? Error using = .*Matrix dimensions must agree.这两个问题是关于矩阵和数组的乘法运算。矩阵的乘法运算表达式为A*B,表示矩阵相乘,其中矩阵A的列数必须等于矩阵B的行数;数组的乘法运算表达式为A.*B,运算符为.*,表

47、示数组A和B中对应的元素相乘,A和B数组的大小必须相同。2)? Subscripted assignment dimension mismatch.错误的原因是矩阵的维数没有匹配,不同类型的图片维数不相同。对于灰度图像,它是m*n二维的;对于彩色图像,它是m*n*k三维的。所以在使用函数之前要明确它所支持的图像类型,我们可以通过rgb2gray或gray2rgb这一类函数将图片转换为所支持的类型,我们也可以通过相应函数来判断矩阵的维数,matlab中ndims(cdata)就支持这种功能,它返回值为正整数n,n代表它的维数。3)在实现图像放大,缩小,亮度调整等功能时,为了方便修改,设置对话框输

48、入,但从对话框输入的数其实是字符,并不是真正的整型数值,所以如果没有对字符转数值变化,就会得到错误的结果,举个简单的例子:a=2; b=2; a*bans = 100得到的100并不是我们所想要的4,之所以还会出结果是因为,字符2对应的ASCII码值为50,而matlab有支持这种算法,所以会得到100的结果。正确的做法应该是这样:a=2; a=str2num(s); b=2; a*bans = 4所以说我们在对数据做处理的时候,一定要分清出它的类型,以免到时候查不出错误。4)关于全局变量的设置,打开了一张图片,为了能供每个功能做相应的处理,就得把图片矩阵的属性设置为global im,这样做

49、以后却只能实现对源图像做处理,如果要对处理过后的图像再做处理,我们就要把处理完后的新图像矩阵赋给源图像,im=y,这样就可以实现每次处理的对象都为上次处理完的图像了。5)关于句柄的操作,在设置滑动条来改变图像的亮度是,虽然编译没有出错,但是却实现不了亮度的变化,这是因为没有得到滑动条的句柄。在GUI界面,双击相应的按钮或是滑动条这些元件,都可以得到Property Inspector(属性面板),里面有各种关于这个元件的信息,我们可以在这个界面直接修改,也可以通过函数来修改。对于滑动条,我们可以通过y= get(hObject,Value);来得到每次滑动条的值,其它情况也是类似操作。6)?

50、Error using = *Function * is not defined for values of class uint8.对于不同的图像类型,图像矩阵元素的类型也不一样。对于真彩色图像,数据矩阵类型是uint8;对于索引图像,数据矩阵类型可以是double型或者uint8型;对于灰度图像,数据矩阵类型可以是double型或者uint8型;对于二值图像,数据矩阵类型可以是double型或者uint8型。当类型不支持时,我们可以通过强制类型转换来得到所需数据类型,如:double(m).7)还有一个就是,matlab对中文的支持功能不大好,特别是对版本低的,对于我这个6.5版本的,根本

51、无法再界面直接显示中文,显示出来的是矩形框,而且在回调函数中使用太多中文,有时会出现错误,导致功能无法实现,后来就把回调函数内的中文全用英文代替,性能有所提高。八、 心得体会通过这次“基于matlab的数字图像处理”的GUI课程设计,学到了很多很多,最基本的就是重新熟悉了matlab语言,不仅仅只是在matlab编程上面有所提高和对GUI的熟悉,对数字图像处理也有了更深刻的认识。首先,明白了图像对于matlab而言就是矩阵,灰度图像和彩色图像对应于不同维数的矩阵,分别为二维和三维,其中三维矩阵每一位代表一种颜色。矩阵可以使实数,也可以使复数,不同的图像矩阵的元素对应于不同的类型,有double

52、,uint8,uint16,logic等类型。由于几乎所有的matlab函数及其工具箱函数都可以使用double作为参数类型,不过由于64bit来表示图像数据存储量特别巨大,所以matlab还支持图像数据的无符号整型存储,所以使用时还要注意输出数据类型的转换。其次,学会了要善于使用matlab中现有的函数。当初在实现上一张和下一张功能时,为了比较两张图片路径是否相等,也就是字符串的比较,我使用for循环来逐位比较,不经工程量大,而且效率低,其间花了不少时间来调试和校正,后来才发现matlab中有此功能的函数strcmp,直接用它来替换原程序得到了很好的效果。所以,这就要求我们队matlab的工

53、具箱中的函数都要有所了解,知道它对于的功能,然后通过help来学习它的语法,这样才能又快又好的完成任务。同样的,我们要善于matlab强大的矩阵处理功能。例如:对于提取子矩阵的算法设a=1 2 3 4;5 6 7 8;9 10 11 12,要提取a的前1,2列。m,n=size(a);for i=1:mfor j=1:2 c(i,j)=a(i,j);endendb = 1 2 5 6 9 10其实只要一句就可以实现了:b=a(1:3,1:2)最后,我们必须要明白理论指导实践,要想实现预期的效果,必须明白它实现的机制和相应的算法,只有通过相应的理论来指导,我们才能有所创新,才能有所突破,而不只是

54、单纯的引用相应的处理函数。例如对于截图函数,它只能是截取坐标轴内的图像,对坐标轴意外的图像却不能处理,而且对于同时显示在坐标轴上的几张图像,它只能处理最后显示的那张,如果我们通过对它改进,能实现像qq截图那样的功能就很强大了。不过通过这次的实现,我对图像的模式,彩色空间,存储结构,图像的傅里叶变换,离散余弦变换的原理,图像的平滑和锐化的算子,直方图的用途和直方图均衡化原理,图像的伪彩色和真彩色增强,以及阈值分割原理都有了更清楚的认识,也明白了它们的实现机制。还有就是,如今的GUI只能在matlab环境下运行,如果能转化成exe格式,就能独立于matlab外执行了,还有很多很多新功能等待我们去探索。通过这次的课程设计,我受益匪浅。九、 参考文献【1】 郑阿奇,曹戈,赵阳.MATLAB实用教程M.北京:电子工业出版社

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!