电子科技大学-数字图像处理-课程设计(共40页)_第1页
电子科技大学-数字图像处理-课程设计(共40页)_第2页
电子科技大学-数字图像处理-课程设计(共40页)_第3页
电子科技大学-数字图像处理-课程设计(共40页)_第4页
电子科技大学-数字图像处理-课程设计(共40页)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子(dinz)科技(kj)大学(dxu)数字图像处理课程设计 课题名称 数字图像处理 院(系) 通信与信息工程学院 专 业 通信工程 姓 名 学 号 起讫日期 指导教师 2015年12月15日目 录摘要(zhiyo): 03课题(kt)一:图像(t xin)的灰度级分辨率调整04课题二:噪声的叠加与频域低通滤波器应用06课题三:顶帽变换在图像阴影校正方面的应用13课题四:利用Hough变换检测图像中的直线15课题五:图像的阈值分割操作及区域属性20课题六:基于MATLAB的GUI程序设计23结束语: 36参考文献: 37基于(jy)MATLAB的数字(shz)图像处理(t xin ch l)

2、课题设计摘 要本文首先对数字图像处理的相关定义、概念、算法与常用变换进行了介绍;并通过七个课题实例,借助MATLAB的图像处理工具箱(Computer Vision System Toolbox)对这些案例逐一实现,包括图像的灰度值调整、图像噪声的叠加、频域低通滤波器、阈值分割、Hough变换等,常用的图像变化与处理;然后通过MATLAB的GUI程序设计,对部分功能进行模块化整合,设计出了数字图像处理的简易软件;最后给出了软件的帮助文件以及该简易程序的系统结构和m代码。关键词:灰度值调整 噪声 图像变换 MATLAB GUI设计课题一:图像的灰度级分辨率调整设计(shj)要求(yoqi):将图

3、像(t xin)的灰度级分辨率调整至,并在同一个figure窗口上将它们显示出来。设计思路:灰度级分辨率又称色阶,是指图像中可分辨的灰度级的数目,它与存储灰度级别所使用的数据类型有关。由于灰度级度量的是投射到传感器上的光辐射值的强度,所以灰度级分辨率又称为辐射计量分辨率。随着图像灰度级分辨率的的逐渐降低,图像中所包含的颜色数目将变得越来越少,从而在颜色维度造成图像信息量的退化。MATLAB提供了histeq函数用于图像灰度值的改变,调用格式如下:J = histeq(I,n)其中J为变换后的图像,I为输入图像,n为变换的灰度值。依次改变n的值为 128、64、32、16、8、4、2 就可以得到

4、灰度值分辨率为128、64、32、16、8、4、2的输出图像。利用MATLAB的subplot命令可以将不同灰度的图像放在同一个figure中方便对比。课题实现:该思路的MATLAB源代码如下:in_photo=imread(lena.bmp);%读入图片“lena.bmp”,位置在matlab当前工作区路径下D:TempProjectMatlabWorksfor i = 128,64,32,16,8,4,2 syms(out_photo,num2str(i); %利用for循环定义7个变量,作为不同灰度值分辨率的输出变量 eval(out_photo,num2str(i), =histeq(

5、in_photo,i),;); %histeq函数(hnsh)用于改变图像灰度值,用eval函数(hnsh)给变量循环赋值end figure();set(figure(1),NumberTitle,off,Name,图像(t xin)的灰度级调整) ;%设置figure名称subplot(2, 4, 1); imshow(in_photo,); title(Orginal);subplot(2, 4, 2); imshow(out_photo128,); title(Gray value 128);subplot(2, 4, 3);imshow(out_photo64,);title(Gra

6、y value 64);subplot(2, 4, 4);imshow(out_photo32,);title(Gray value 32);subplot(2, 4, 5);imshow(out_photo16,);title(Gray value 16);subplot(2, 4, 6);imshow(out_photo8,);title(Gray value 8);subplot(2, 4, 7);imshow(out_photo4,);title(Gray value 4);subplot(2, 4, 8);imshow(out_photo2,);title(Gray value 2)

7、;%输出所有图形程序运行结果如下图:可以看出原图lena.bmp被转化为灰度值分辨率不同的7个图像。课题(kt)二:噪声(zoshng)的叠加与频域低通滤波器应用(yngyng)设计要求:往图像中叠加不同类型的噪声,并设计一个频域低通滤波器来去除之。设计思路:噪声叠加:首先需要在输入图片中叠加不同类型的噪声。MATLAB提供了imnoise函数用于在图像中加入噪声,调用格式如下:J = imnoise(I,type)J为叠加噪声后的图像,I为输入图像,type分为:gaussian(Gaussian white noise with constant mean and variance);lo

8、calvar(Zero-mean Gaussian white noise with an intensity-dependent variance);poisson(Poisson noise);salt & pepper(On and off pixels);speckle(Multiplicative noise).二、低通频域滤波器算法原理空间域滤波和频率域滤波的基础都是卷积定理,这说明两个空间函数的卷积可通过计算两个傅里叶变换函数的乘积的逆变换得到;相反地,两个空间函数的卷积的傅里叶变换恰好等于两个函数傅里叶变换的乘积。然而对于数字图像仅当f(x,y) 和h(x,y) 正确经过零填充

9、后, 表达式才严格有效。故在进行傅里叶变换前需先进行填零操作。经过上述分析, 可得到傅里叶变换的基本步骤:(1) 计算填充参数(2) 利用填充参数进行傅里叶变换(3) 根据type 生成传递函数H(x,y)(4) 传递函数与傅里叶变换(binhun)相乘(5) 取G 的傅里叶逆变换实部常见(chn jin)的低通频域滤波器有三种(sn zhn),分别为:理想低通滤波器,n阶巴特沃茨低通滤波器和高斯低通滤波器。三、低通频域滤波器在 Matlab中的实现结合傅里叶变换基本步骤和函数 dftuv(M,N),在 Matlab中实现低通频域滤波器的代码如下:function g,F = lpfilter

10、(f,type)%函数参数:彩色图像 f,低通滤波类型 type课题实现:代码分为三部分:1. 用来实现二维数组的meshgrid 表示的函数dftuv.m ;2.低通滤波器lpfilter.m ;3.主函数/codebeginfunction U,Y = dftuv( X,N )%dftuv (M,N) 来实现二维数组的meshgrid 表示u=0:(X-1);w=0:(N-1);idx=find(uX/2);u(idx)=u(idx)-X;idy=find(wN/2);w(idy)=w(idy)-N;Y,U=meshgrid(w,u);endfunction g,F = lpfilter(

11、f,type)%函数参数:彩色图像f,低通滤波类型type%函数返回值:低通模糊图像g,低通频率图像F%D0 取填充后图像宽度的5%当type 为ideal 时,表理想低通滤波器%当type 为 btw 时,表n 阶巴特低通沃兹滤波器%当type 为 gaussian 时,表高斯低通滤波器f=im2double(f);PQ=2*(size(f);%DFT 之前补零F=fft2(f,PQ(1),PQ(2);%U,V=dftuv(PQ(1),PQ(2);D=sqrt(U.2+V.2); %采用(ciyng)欧氏距离D0=0.05*PQ(2);% 设定(sh dn)距离初值n=5;switch(ty

12、pe)case idealH=double(D max_len)max_len = lenxy_long = xyendend % highlight the longest line segmentplot(xy_long(:,1),xy_long(:,2),LineWidth,2,Color,blue); L1 Index1=max(Len(:)Len(Index1)=0L2 Index2=max(Len(:) x1=lines(Index1).point1(1) lines(Index1).point2(1)y1=lines(Index1).point1(2) lines(Index1)

13、.point2(2)x2=lines(Index2).point1(1) lines(Index2).point2(1)y2=lines(Index2).point1(2) lines(Index2).point2(2) K1=(lines(Index1).point1(2)-lines(Index1).point2(2)/(lines(Index1).point1(1)-lines(Index1).point2(1)K2=(lines(Index2).point1(2)-lines(Index2).point2(2)/(lines(Index2).point1(1)-lines(Index2

14、).point2(1) hold onm,n = size(BW); % 尺寸(ch cun)BW1=zeros(m,n);b1=y1(1)-K1*x1(1)b2=y2(1)-K2*x2(1)for x=1:nfor y=1:mif y=round(K1*x+b1)|y=round(K2*x+b2)BW1(y,x)=1; end endendfor x=1:nfor y=1:m if ceil(K1*x+b1)=ceil(K2*x+b2)y1=round(K1*x+b1)BW1(1:y1-1,:)=0;endendendfigure,imshow(BW1)/code end运行(ynxng)结

15、果(ji gu):课题(kt)五:图像(t xin)的阈值分割操作(cozu)及区域属性设计要求:对图像执行阈值分割操作并统计出每一个区域块的属性,然后,将每个区域的中心和外接矩形给标注出来。(提示:如果分割后的区域块数太多,建议采用Matlab下的bwareaopen函数来筛选掉一部分区域块)。设计思路:在对图像的研究和应用中,人们往往仅对图像中的某些部分感兴趣,这些部分一般称为目标或者前景;为了辨识和分析目标,需要将有关区域分离并提取出来,在此基础上方可对目标做进一步利用,如特征提取和参数测量等;图像分割就是指把图像分解成若干个特定的、各具特性的区域并提取出感兴趣目标的技术和过程,其中的特

16、性可以是灰度、颜色、纹理等,目标可以对应单个区域,也可以对应多个区域。图像分割后提取出的目标可以应用于图像语义识别、图像搜索等领域。灰度阈值分割法是一种最常用的并行区域技术,它是图像分割中应用数量最多的一类。阈值分割方法实际上是输入图像f到输出图像g的如下变换:gi,j=1 fi,jT0 fi,j 打开图片成功);%将打开文件操作记录与列表框(logs)axes(handles.axes5); imshow(im); % %菜单栏-文件-保存 功能:保存输出图片function Untitled_3_Callback(hObject, eventdata, handles)global BW;

17、 %定义变量作为输出图像time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);filename,pathname,filterindex=uiputfile(*.bmp;*.tif;*.png,保存输出图片);if filterindex=0return %如果取消操作,返回elsestr=pathname filename; %合成路径+文件名axes(handles.axes6); %使用axes6输出图像imwrite(BW,str); %写入图片信息,即保存图片set(handles.listbox3,string,strvcat

18、(get(handles.listbox3,string),time_string, 图片已保存);%将文件保存成功的信息记录与(log)end % %菜单栏-文件(wnjin)-退出(tuch) 功能(gngnng):退出GUIfunction Untitled_5_Callback(hObject, eventdata, handles) clc;clear all;close(gcf); % Executes on selection change in popupmenu3.%下拉式菜单 功能:内置图片选择function popupmenu3_Callback(hObject, ev

19、entdata, handles)contents = cellstr(get(hObject,string);time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);item_index = get(hObject,value);set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, ,contentsitem_index);%实时的记录当前选择的图片global im;val=get(hObject,Value);switch conte

20、ntsval case lena.bmp im=imread(D:lena.bmp); %内置图片放在D盘根目录下 axes(handles.axes5); imshow(im); casebank.bmp im=imread(D:bank.bmp); axes(handles.axes5); imshow(im); casejet.bmp im=imread(D:jet.bmp); axes(handles.axes5); imshow(im); caserice.bmp im=imread(D:rice.bmp); axes(handles.axes5); imshow(im); case

21、camera.bmp im=imread(D:camera.bmp); axes(handles.axes5); imshow(im);end %操作面板-确定 功能:在输出图像坐标系(axes6)中显示图像function pushbutton3_Callback(hObject, eventdata, handles) global BW;axes(handles.axes6);imshow(BW); % %菜单栏-帮助(bngzh)-关于(guny) 功能(gngnng):作者信息function Untitled_8_Callback(hObject, eventdata, handl

22、es) hObject = msgbox(电子科技大学;通信与信息工程学院;王;201401,关于作者,none,non-modal);ht = findobj(hObject, Type, text);set(ht, FontSize, 12, Unit, normal);set(hObject, Position, 200 200 150 150);%固定窗口位置 % %菜单栏-处理-灰度调整 功能:调整输入图像的灰度function Untitled_9_Callback(hObject, eventdata, handles) global BW;global im;global x;

23、%im = rgb2gray(im);%若输入图像可能为彩色图像 加入 im=rgb2gray(im);BW = histeq(im,x); %参数面板-灰度选择 功能:选择所需灰度值function uibuttongroup4_SelectionChangedFcn(hObject, eventdata, handles) global x;%定义全局变量作为灰度值参数xx=2;%默认调整至二值图像time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);switch get(eventdata.NewValue,Tag) case ra

24、diobutton11 x=256; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择(xunz)256); %实时(sh sh)记录下灰度值选择 case radiobutton12 x=128; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择(xunz)128); case radiobutton13 x=64; set(handles.listbox3,st

25、ring,strvcat(get(handles.listbox3,string),time_string, 灰度选择64); case radiobutton14 x=32; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择32); case radiobutton15 x=16; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择16); case radiobu

26、tton16 x=8; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择8); case radiobutton17 x=4; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择4); case radiobutton18 x=2; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),tim

27、e_string, 灰度选择2);end % %菜单栏-处理(chl)-gaussian噪声(zoshng)叠加 功能:叠加高斯(o s)噪声function Untitled_12_Callback(hObject, eventdata, handles) global BW;global im;global M;global V;%M,V为gaussian函数的参数time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);M=str2num(get(handles.edit18,String);V=str2num(get(handles.

28、edit19,String);%从编辑框传递参数M,V;BW = imnoise(im,gaussian,M,V);set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, gaussian噪声);%实时记录下处理类型 % %菜单栏-处理-椒盐噪声叠加 功能:叠加椒盐噪声function Untitled_13_Callback(hObject, eventdata, handles) global im;global BW;global d; %d为椒盐噪声参数time_string = num

29、2str(datestr(now,yyyy-mm-dd-HH:MM:SS);d=str2num(get(handles.edit20,String);%从参数编辑框传递参数BW = imnoise(im,salt & pepper,d);set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, salt&pepper噪声); % %菜单栏-处理-speckle噪声叠加 功能:叠加speckle噪声function Untitled_14_Callback(hObject, eventdata, h

30、andles) global im;global BW;global v;time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);v=str2num(get(handles.edit21,String);BW = imnoise(im,speckle,v);set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, speckle噪声); %参数(cnsh)编辑框 功能(gngnng):传递speckle噪声(zoshng)参数vfunction

31、 edit21_Callback(hObject, eventdata, handles) global v;v=str2num(get(hObject,String);if(isempty(v)%输入被严格限制,只能是数字 set(hObject,String,0.04);%v默认值0.04end %参数编辑框 功能:传递椒盐噪声参数dfunction edit20_Callback(hObject, eventdata, handles) global d;d=str2num(get(hObject,String);if(isempty(d) set(hObject,String,0.05

32、);%d默认值0.05end %参数编辑框 功能:传递高斯噪声参数Vfunction edit19_Callback(hObject, eventdata, handles) global V;V = str2num(get(hObject,String);if(isempty(V) set(hObject,String,0.01);%V默认值0.01end %参数编辑框 功能:传递高斯噪声参数Mfunction edit18_Callback(hObject, eventdata, handles) global M;M=str2num(get(hObject,String);if(isem

33、pty(M) set(hObject,String,0);%M默认值0end % %工具栏-打开文件图标 功能:打开图片文件function uipushtool1_ClickedCallback(hObject, eventdata, handles) global im;time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);filename,pathname = uigetfile(*.*;*.bmp;*.tif;*.png,选择(xunz)图片); str=pathname filename; im=imread(str); set

34、(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 图片打开(d ki)成功);axes(handles.axes5); imshow(im); % %工具栏-保存(bocn)文件图标 功能:保存输出图像function uipushtool2_ClickedCallback(hObject, eventdata, handles) global BW;time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);filename,pathname,filterindex=uiputfile(*.bmp;*.tif;*.png,save picture);if filterindex=0retur

温馨提示

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

评论

0/150

提交评论