1、本科毕业论文(科研训练、毕业设计)题 目:图像阈值分割及去噪的实现姓 名: 学 院:物理与机电工程学院系:物理系专 业:物理学年 级:学 号:大学本科毕业论文 摘要1图像阈值分割及去噪的实现摘要 图像在成像的过程中会受到各种干扰信号即噪声的影响,从而会使画面质量下降。为了减弱噪声、还原真实的画面,需要对图像进行处理。本文介绍图像灰度变换和区域分割、降噪技术。采用区域阈值分割法,分别用 Otsu、 Niblack 以及 Kittler 算法实现;选用 4 种图像降噪方法,包括经典的滤波方法即均值滤波、中值滤波和维纳滤波,以及基于小波变换的降噪技术。通过 Matlab 仿真,详细分析比较了几种阈值
2、分割和滤波法在图像处理方面的特点。关键词 阈值分割 中值滤波 均值滤波 维纳滤波 小波分析大学本科毕业论文 Abstract2Image Binaryzation and Denoising RealizationAbstract In many cases, the quality of pictures suffers significant debasements in the imaging processing, owing to the noise. In order to reconstitute them, we need to process the cropped imag
3、es properly. This paper firstly addresses the image gray scale transformation, region segmentation and noise reduction. Otsu, Niblack, and Kittler algorithm are used to realize the second issue;4 kinds of image noise reduction methods are designed and applied, which are mean filtering, median filter
4、ing ,Wiener filtering, and wavelet denoising. The first three issues belongs to classical filtering theory. Matlab simulation based on these methods is built to research the relative benefits and drawbacks.Keywords Region Segmentation Mean Filtering Median Filtering Wiener Filtering Wavelet Denoisin
5、g大学本科毕业论文 目录3目录摘要1Abstract2目录3引言4第一章 图像噪音5第二章 图像缩放和灰度变换处理62.1 图像缩放处理方法62.2 图像灰度变换处理6第三章 图像阈值分割83.1 图像分割技术概要83.2 图像阈值分割原理83.3 图像阈值分割方法9第四章 图像去噪124.1 滤波原理124.2 滤波实现方法12第五章 仿真实验结果和讨论165.1 图像二值化算法对比165.2 图像去噪效果对比17结论21参考文献22致谢语23大学本科毕业论文 引言4引言数字图像处理是从 20 世纪 60 年代以来随着计算机技术和 VLSI 的发展而产生、发展和不断成熟起来的一个新兴技术领域
6、,它在理论上和实际应用上都取得了巨大的成就,并引起各方面人士的广泛重视 1。首先,视觉是人类最重要的感知手段,图像又是视觉的基础。因此数字图像成为心理学、生物医学、计算机科学等诸多方面的学者研究视觉感知的有效工具。其次,数字图像处理在军事、遥感、工业图像处理等大型应用中也有不断增长的需求。为适用特殊的场合和获得较好的视觉效果,常常需要一种有效的方法来对图像进行处理。数字图像处理技术从广义上可看作是各种图像加工技术的总称。它包括利用计算机和其他电子设备完成的一系列工作,如图像分割、图像变换、图像去噪等。本文主要是在整合各种优秀的阈值分割和滤波算法的基础上,实现对图像进行分割和去噪,达到处理和读取
7、图像的目的。在 MATLAB 仿真的基础上,比对各种分割和去噪方法的优缺点。大学本科毕业论文 第一章5第一章 图像噪声大量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的高斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。因此,实时采集的图像需进行滤波处理。消除图像中的噪声成份叫做图像的平滑化或滤波操作。按信号与噪声的关系,噪声主要分为加性噪声和乘性噪声 2:1)加性噪声,即与信号存在与否无关,是独立于信号之外的噪声,叠加方式为 3: (1.1)()()xtsnt其中 表示输出信号, 表示源信号, 表示噪声信号。 比如说放大器噪
8、声。()xt()st2)乘积性噪声又称为卷积噪声,只有在信号出现在信道中才表现出来,它不会主动对信号形成干扰。叠加方式为 4(1.2)()1()xtsnt乘积性噪声可以通过同态变换成为加性噪声。比如说胶片颗粒噪声。本文讨论通过对图像施加高斯噪声、椒盐噪声和乘性噪声,来模拟实际应用中图像损毁的部分情况。其中,高斯噪声和椒盐噪声属于加性噪声。大学本科毕业论文 第二章6第二章 图像缩放和灰度变换处理2.1 图像缩放处理方法在计算机图像处理中,图像缩放(image scaling)是指对数字图像的大小进行调整的过程。图像放大是从一幅低分辨率图像获得其高分辨率版本的一种图像处理技术5。各种插值技术是实现
9、图像放大的最常用的方法,其实质是对源图像建立连续的数学模型,然后按缩放要求进行重采样得到目的图像,如最近邻插值、双线性插值、双三次插值等。最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值,运算量非常小。当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。具体原理为如下 5:最近邻点插值的一个隐含的假设条件是任一网格点 p(x,y) 的属性值都使用距它最近的位置点的属性值,用每一个网格节点的最邻点值作为待定节点值。当数据已经是均匀间隔分布,要先将数据转换为 SURFER 网格文件,可以应用最近邻点插值法;或者在一个
10、文件中,数据紧密完整,只有少数点没有取值,可用最近邻点插值法来填充无值的数据点。最近邻点插值网格化法没有选项,它是均质且无变化的 ,对均匀间隔的数据进行插值很有用,同时,它对填充无值数据的区域很有效2.2 图像灰度变换处理图像的灰度变换(Gray-Scale Transformation GST) 处理是图像增强处理技术中一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分 6。灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。灰度变换有时又被称为图像的对比度增强或对比度拉伸。例
11、如为了显示出图像的细节部分或提高图像的清晰度,需要将图像整个范围的灰度级或其中某一段 灰度级扩展或压缩到 ,这些都要求采用灰(,)ab(,)ab度变换方法。从图像输入装置得到的图像数据,以浓淡表示,各个像素与某一灰度值相对应。设原图像像素的灰度值 ,处理后图像像素的灰度值 。则灰度增强 5可表示为:(,)Dfxy (,)Dgxy大学本科毕业论文 第二章7(,)(,) gxyTfxy (2.2.1)或 D (2.2.2)要求 D 和 D都在图像的灰度范围之内。函数 T 称为灰度变换函数,它描述了输入灰度值和输出灰度值之间的转换关系。根据(2.2.1)式可以将灰度变换分为线性变换和非线性变换。本文
12、采取 rgb2gray 函数来实现灰度变换。其原理如下:以 R、G、B 为轴建立空间直角坐标系,则 RGB 图的每个象素的颜色可以用该三维空间的一个点来表示,而 Gray 图的每个象素的颜色可以用直线 R=G=B 上的一个点来表示。于是 RGB 图转 Gray 图的本质,就是寻找一个三维空间到一维空间的映射 6,最直接的方法是射影(即过 RGB 空间的一个点向直线 R=G=B 做垂线) ,matlab 中也是如此实现的。并且有(2.2.3) 0.29 * 0.587 * 0.14*GrayRGB大学本科毕业论文 第三章8第三章 图像阈值分割3.1 图像分割技术概要图像分割是一种重要的图像技术,
13、在理论研究和实际应用中都得到了人们的广泛重视。图像分割的方法和种类有很多,值得指出的是,没有惟一的标准的分割方法。许多不同种类的图像或景物都可作为待分割的图像数据,不同类型的图像,已经有相对应的分割方法对其分割,同时,某些分割方法也只是适用于某些特殊类型的图像分割。可以说,图像分割结果的好坏直接影响对图像的理解。 在图像研究中,图像分割的方法主要可以分成两大类 1。一类是边界方法,这种方法的假设是图像分割结果的某个子区域在原来图像中一定会有边缘存在;一类是区域方法,这种方法的假设是图像分割结果的某个子区域一定会有相同的性质,而不同区域的像素则没有共同的性质,阈值分割方法属于区域分割。不可否认,
14、这两类方法都有优缺点,限于时间和篇幅,本文将采用阈值法来分割图像。从某种角度讲,图像分割的目的之一就是目标提取将人类感兴趣的区域提取出来。从这一点说,区域分割是最直接的方法,利用这种分割方法可以直接得到感兴趣的目标区域。本文介绍其中的一种方法-阈值分割方法。阈值分割这种方法,作为一种图像预处理方式,图像分割并不考虑图象降质,只将图象中感兴趣的特征有选择地突出,衰减其不需要的特征,故预处理后的输出图象并不需要去逼近原图象。3.2 图像阈值分割原理阈值分割的基本想法是确定一个阈值,然后把每个像素点的像素值和阈值相比较,根据比较的结果把该像素划分成两类前景或者背景。一般阈值分割可以分成以下3步 7。
15、 (1)确定阈值 T。 (2)将阈值 T和像素值比较。 (3)把像素归类。 上面的3个步骤,关键的是第一步,如果能确定一个合适的阈值,就可以对图像进行正确、方便的分割。即:设定某一阈值T,用T将图像的数据分成两大部分:大于T的像素群和小于T 的像素群。这是研究灰度变换最特殊的方法,称为图像的二值化(binarization) 。阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某像素的灰度值小大学本科毕业论文 第三章9于该阈值,则将该像素的灰度值设置为0或255 ,否则灰度值设置为255或0。 阈值方法分全局阈值和局部阈值两种,如果分割过程中对图像上每个像素所使用的阈值都相等,
16、则为全局阈值方法;如果每个像素所使用的阈值可能不同,则为局部阈值方法。前者较简单,但抑制噪声和不均匀光照的能力较差 8。后者则是根据区域灰度分布特性,自适应调节阈值,效果一般好于前者。可以认为局部阈值是全局阈值的一般情况,全局阈值则是最简单的图像分割方法。本文中介绍了三种经典的图像区域阈值分割方法。3.3 图像阈值分割方法一、Otsu 算法Otsu是一种全局阈值算法,是在最小二乘法原理基础上推导出来的。这种方法的基本思想是将直方图在某一阈值处分割成两组,一组对应于背景文字部分,当被分成的两组的组内方差最小,组间方差最大时,决定阈值。这种基于两组间最佳分类而决定阈值的方法也成为最大类间方差阈值分
17、割法。设给定图像具有L 级灰度值,对 1 0varargout1 = fig;endelseif ischar(varargin1) % INVOKE NAMED SUBFUNCTION OR CALLBACKtryif (nargout)varargout1:nargout = feval(varargin:); % FEVAL switchyardelsefeval(varargin:); % FEVAL switchyardendcatchdisp(lasterr);endend% -function varargout = LoadPush_Callback(h, eventdata,
18、 handles, varargin)%回调函数global im_original im_noised im_binary im_filtered%global:定义全局变量filename, pathname = uigetfile(*.bmp;*.pgm;*.tif;*.jpg;*.*, Load input image);%读取文件if isequal(filename,0) | isequal(pathname,0)disp(User pressed cancel)%disp:显示elsedisp(User selected , fullfile(pathname, filename
19、)大学本科毕业论文 附录25endim_original=imread(filename);set(handles.Or_image,HandleVisibility,OFF);%handles:句柄set(handles.Out_image,HandleVisibility,OFF);set(handles.axes10,HandleVisibility,OFF);set(handles.Or_image,HandleVisibility,ON);axes(handles.Or_image);imshow(im_original);colormap(gray(256);axis equal;
20、%让图像的大小与框架吻合axis tight;%同上axis off;%把数轴关掉set(handles.Or_image,HandleVisibility,OFF);set(handles.Or_image,XTickLabel, ,YTickLabel, );% -function varargout = popupmenu1_Callback(h, eventdata, handles, varargin)% -function varargout = popupmenu3_Callback(h, eventdata, handles, varargin)% -function vara
21、rgout = popupmenu5_Callback(h, eventdata, handles, varargin)% -function varargout = ApplyPush_Callback(h, eventdata, handles, varargin)global im_original im_noised im_binary im_filtered imnoise_type = get(handles.popupmenu5,Value); % selected noise typeswitch imnoise_typecase 1 %加入噪声im_noised = gaus
22、sian_bai(im_original); %加入高斯白噪声case 2 im_noised = salt(uint8(im_original); %加入椒盐噪声case 3 大学本科毕业论文 附录26im_noised = speckle(uint8(im_original); %加入乘性噪声endI1=im_noised;I2=I1;I3=rgb2gray(I2);I4= imadjust(I3,0.3 0.4,);%对比度调整法,使图像增强imbinary_type = get(handles.popupmenu1,Value); % selected binary typeswitc
23、h imbinary_typecase 1 %加入噪声im_binary = otsu(im_original); %otsu 二值化法case 2 im_binary = niblack(uint8(im_original); %niblack 二值化法case 3 im_binary = kittlerMet(uint8(im_original); %kittlerMet 二值化法case 34im_binary = wavelet(uint8(im_original); %wavelet1 二值化法endmethod_number = get(handles.popupmenu3,Val
24、ue); % selected filter methodswitch method_numbercase 1 im_filtered = meanfilter(I3);case 2 im_filtered = medfilter(I3);case 3 im_filtered = wienerfilter(I3);case 4 im_filtered = forced_filter(I3);case 5 im_filtered = all_filter(I3);case 6 大学本科毕业论文 附录27im_filtered = setting_filter(I3);end set(handle
25、s.noised_image,HandleVisibility,ON);axes(handles.noised_image);imagesc(im_binary); colormap(gray(256);axis equal;axis tight;axis off;set(handles.noised_image,HandleVisibility,OFF)set(handles.axes10,HandleVisibility,ON);axes(handles.axes10);imagesc(im_noised); colormap(gray(256);axis equal;axis tight
26、;axis off;set(handles.axes10,HandleVisibility,OFF)set(handles.Out_image,HandleVisibility,ON);axes(handles.Out_image);imagesc(im_filtered); colormap(gray(256);axis equal;axis tight;axis off;set(handles.Out_image,HandleVisibility,OFF)labeled,numObjects = bwlabel(im_filter,4);numObjects;% -function var
27、argout = QuitPush_Callback(h, eventdata, handles, varargin)大学本科毕业论文 附录28clear all % to close GUIclose(gcbf)% 加噪函数function newim = gaussian_bai(img)newim = imnoise(img,gaussian);function newim = salt(img)newim = imnoise(img,salt function newim = speckle(img)newim = imnoise(img,speckle);% 去噪函数 functio
28、n out = meanfilter(im)out = filter2(fspecial(average,3),im); %执行二维的均值滤波 function out = medfilter(im)out = medfilt2(im); %执行二维的中值滤波function out = wienerfilter(im)% im = imnoise(I,gaussian,0,0.005); out = wiener2(im,5 5); %执行二维的维纳滤波function out = forced_filter(im)c1,l1=wavedec2(im,2,sym4);a1=wrcoef2(a
29、,c1,l1,sym4,1);a2=wrcoef2(a,c1,l1,sym4,2);out=a2; %执行二维的强制去噪处理function out = all_filter(im)c,l=wavedec2(im,5,sym4);thr=50;sxd,cxd,lxd,perf0,perf12=wdencmp(gbl,im,sym2,2,thr,h,1);out=sxd; %执行全局阈值去噪function out = setting_filter(im)thr_h=75 70;thr_d=74 72;大学本科毕业论文 附录29thr_v=78 68;thr2=thr_h;thr_d;thr_v
30、yxd,cxd,lxd,perf0,perf12=wdencmp(lvd,im,sym2,2,thr2,h);out=yxd; %执行给定阈值去噪% -function varargout = Untitled_1_Callback(h, eventdata, handles, varargin)% -function varargout = Untitled_2_Callback(h, eventdata, handles, varargin)% - Executes on button press in Savepushbutton7.function Savepushbutton7_Ca
31、llback(hObject, eventdata, handles)global im_original im_noised im_filteredfilename, pathname = uiputfile( *.bmp;*.pgm;*.tif;*.jpg;*.*, Save imagecrop image);imwrite(im_filtered,filename);% - Executes on button press in Saveushbutton7.function Saveushbutton7_Callback(hObject, eventdata, handles)glob
32、al im_original im_noised im_filteredfilename, pathname = uiputfile( *.bmp;*.pgm;*.tif;*.jpg;*.*, Save imagecrop image);imwrite(im_filtered,filename);if ispcset(hObject,BackgroundColor,white);elseset(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor);endfunction edit10_Callback(hObject, eventdata, handles)function popupmenu5_CreateFcn(hObject, eventdata, handles)if ispcset(hObject,BackgroundColor,white);elseset(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor);end