数字图像处理-课程设计

上传人:沈*** 文档编号:85542380 上传时间:2022-05-05 格式:DOC 页数:52 大小:2.71MB
返回 下载 相关 举报
数字图像处理-课程设计_第1页
第1页 / 共52页
数字图像处理-课程设计_第2页
第2页 / 共52页
数字图像处理-课程设计_第3页
第3页 / 共52页
点击查看更多>>
资源描述
word电子科技大学数字图像处理课程设计 课题名称数字图像处理 院系通信与信息工程学院 专 业通信工程 姓 名王亮森 学 号13 起讫日期2015.11.27 2015.12.13 指导教师王登位 2015年12月15日目 录摘要:03课题一:图像的灰度级分辨率调整04课题二:噪声的叠加与频域低通滤波器应用06课题三:顶帽变换在图像阴影校正方面的应用13课题四:利用Hough变换检测图像中的直线15课题五:图像的阈值分割操作与区域属性20课题六:基于MATLAB的GUI程序设计23完毕语:36参考文献:3752 / 52基于MATLAB的数字图像处理课题设计摘 要本文首先对数字图像处理的相关定义、概念、算法与常用变换进展了介绍;并通过七个课题实例,借助MATLAB的图像处理工具箱puter Vision System Toolbox对这些案例逐一实现,包括图像的灰度值调整、图像噪声的叠加、频域低通滤波器、阈值分割、Hough变换等,常用的图像变化与处理;然后通过MATLAB的GUI程序设计,对局部功能进展模块化整合,设计出了数字图像处理的简易软件;最后给出了软件的帮助文件以与该简易程序的系统结构和m代码。关键词:灰度值调整 噪声图像变换MATLAB GUI设计课题一:图像的灰度级分辨率调整设计要求:将图像的灰度级分辨率调整至,并在同一个figure窗口上将它们显示出来。设计思路:灰度级分辨率又称色阶,是指图像中可分辨的灰度级的数目,它与存储灰度级别所使用的数据类型有关。由于灰度级度量的是投射到传感器上的光辐射值的强度,所以灰度级分辨率又称为辐射计量分辨率。随着图像灰度级分辨率的的逐渐降低,图像中所包含的颜色数目将变得越来越少,从而在颜色维度造成图像信息量的退化。MATLAB提供了histeq函数用于图像灰度值的改变,调用格式如下:J = histeq(I,n)其中J为变换后的图像,I为输入图像,n为变换的灰度值。依次改变n的值为 128、64、32、16、8、4、2 就可以得到灰度值分辨率为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(in_photo,i),;);%histeq函数用于改变图像灰度值,用eval函数给变量循环赋值endfigure();set(figure(1),NumberTitle,off,Name,图像的灰度级调整) ;%设置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(Gray 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个图像。课题二:噪声的叠加与频域低通滤波器应用设计要求:往图像中叠加不同类型的噪声,并设计一个频域低通滤波器来去除之。设计思路:一、 噪声叠加:首先需要在输入图片中叠加不同类型的噪声。MATLAB提供了imnoise函数用于在图像中参加噪声,调用格式如下:J = imnoise(I,type)J为叠加噪声后的图像,I为输入图像,type分为:gaussian(Gaussian white noise with constant mean and variance);localvar(Zero-mean Gaussian white noise with an intensity-dependent variance);poisson(Poisson noise);salt & pepper(On and off pixels);speckle(Multiplicative noise).二、低通频域滤波器算法原理空间域滤波和频率域滤波的根底都是卷积定理,这说明两个空间函数的卷积可通过计算两个傅里叶变换函数的乘积的逆变换得到;相反地,两个空间函数的卷积的傅里叶变换恰好等于两个函数傅里叶变换的乘积。然而对于数字图像仅当fx,y和hx,y正确经过零填充后,表达式才严格有效。故在进展傅里叶变换前需先进展填零操作。经过上述分析,可得到傅里叶变换的根本步骤:1计算填充参数2利用填充参数进展傅里叶变换3根据type 生成传递函数Hx,y4传递函数与傅里叶变换相乘5取G 的傅里叶逆变换实部常见的低通频域滤波器有三种,分别为:理想低通滤波器,n阶巴特沃茨低通滤波器和高斯低通滤波器。三、低通频域滤波器在 Matlab中的实现结合傅里叶变换根本步骤和函数 dftuv(M,N),在 Matlab中实现低通频域滤波器的代码如下:function g,F = lpfilter(f,type)%函数参数:彩色图像 f,低通滤波类型 type课题实现:代码分为三局部:1. 用来实现二维数组的meshgrid 表示的函数dftuv.m 滤波器lpfilter/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(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); %采用欧氏距离D0=0.05*PQ(2);% 设定距离初值n=5;switch(type)caseidealH=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).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).point2(1)hold onm,n = size(BW); % 尺寸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;endendendfor x=1:nfor y=1:mif ceil(K1*x+b1)=ceil(K2*x+b2)y1=round(K1*x+b1)BW1(1:y1-1,:)=0;endendendfigure,imshow(BW1)/code end运行结果:课题五:图像的阈值分割操作与区域属性设计要求:对图像执行阈值分割操作并统计出每一个区域块的属性,然后,将每个区域的中心和外接矩形给标注出来。提示:如果分割后的区域块数太多,建议采用Matlab下的bwareaopen函数来筛选掉一局部区域块。设计思路:在对图像的研究和应用中,人们往往仅对图像中的某些局部感兴趣,这些局部一般称为目标或者前景;为了辨识和分析目标,需要将有关区域别离并提取出来,在此根底上方可对目标做进一步利用,如特征提取和参数测量等;图像分割就是指把图像分解成假设干个特定的、各具特性的区域并提取出感兴趣目标的技术和过程,其中的特性可以是灰度、颜色、纹理等,目标可以对应单个区域,也可以对应多个区域。图像分割后提取出的目标可以应用于图像语义识别、图像搜索等领域。灰度阈值分割法是一种最常用的并行区域技术,它是图像分割中应用数量最多的一类。阈值分割方法实际上是输入图像f到输出图像g的如下变换:其中,T为阈值,取值为1的像素属于前景目标,取值为0的像素属于背景。课题实现:使用Matlab置的coins.png 图片,源代码如下:/code beginclc;clear all;fh=figure(NumberTitle,off,Name,OTSU分割,Menubar,none,Color,w);ah=axes(Parent,fh);I=imread(coins.png);level=graythresh(I);%OTSU核心函数BW=im2bw(I,level);%OTSU核心函数subplot(1,2,1);imshow(I);title(输入图像);subplot(1,2,2);imshow(BW);title(分割后图像);%寻找不包括孔连通域的边缘,并且把每个连通域的边界描出来B,L = bwboundaries(BW,4); figure;imshow(label2rgb(L, jet, .5 .5 .5)hold onfor k = 1:length(B)boundary = Bk;plot(boundary(:,2),boundary(:,1),w,LineWidth,2)end% 找到每个连通域的质心stats = regionprops(L,Area,Centroid);% 循环历遍每个连通域的边界for k = 1:length(B)% 获取一条边界上的所有点boundary = Bk;centroid = stats(k).Centroid;plot(centroid(1),centroid(2),ko);% 提取该连通域所对应在二值图像中的矩形区域goalboundary = boundary; s = min(goalboundary, , 1);e = max(goalboundary, , 1);%将目标区域分别向两侧延伸7个像素rectangle(Position,s(2) s(1) e(2)-s(2) e(1)-s(1),EdgeColor,r, LineWidth,2); end/code end运行结果:课题六:基于MATLAB的GUI程序设计设计要求:设计一个简易的Matlab GUI界面程序,要求其具有如下的功能:打开与保存图像时均打开文件名设置对话框;当下拉菜单中的条目被选中时,列表框之中实时的记录下当前的选择;通过编辑框来实现相关参数的交互式输入;将输入图像与处理后结果显示在相应的坐标轴之上;含有工具栏和菜单栏,当选择其下的组件成分时,要有相应的图像处理行为发生;将figure窗口的“Name属性修改为自己的和学号;将所设计的GUI程序编译为“.exe形式的可执行文件。设计思路:首先明确GUI的功能:要求能改变输入图像的灰度值分辨率,并且给图像叠加不同类型的噪声。其中灰度值由于是固定的数值256,128,64,32,16,8,4,2,故采用单项选择按钮组进展实现。噪声叠加分为:高斯噪声,椒盐噪声,speckle噪声,分别置于菜单栏-处理-噪声叠加的子菜单里;而这些噪声函数的自定义参数,如此通过编辑框进展交互式输入。GUI程序打开的图像,和输出图像要分别显示在两个不同的axes中。可以绘制一个图像显示面板,用静态文本加注标签。下拉式菜单用于选择D:下的置图片文件lena.bmp; bank.bmp; jet.bmp; rice.bmp 。所选择的文件以与做出的图像处理操作被实时的记录在列表框里作为Logs。下拉式菜单处于图像选择面板,如如如下图所示:列表框作为操作记录器,效果如如如下图:下面是GUIDE界面截图,即控件布局图:GUI程序中包含的所有对象展示如下:程序结构:打开图片或内置图片选择显示图像axes2显示图像axes1图像处理:确定实时操作记录保存图片参数调节灰度值, M, V, d, v菜单结构:Root 课题实现:基于MATLAB的GUI程序设计核心是回调函数callback function的编写。在此GUIDE自动生成的代码中添加回调函数如下:/code beginfunction varargout = m6(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, .gui_Singleton, gui_Singleton, .gui_OpeningF, m6_OpeningF, .gui_OutputF, m6_OutputF, .gui_LayoutF, , .gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainf(gui_State, varargin:);else gui_mainf(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before m6 is made visible.function m6_OpeningF(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);% - Outputs from this function are returned to the mand line.function varargout = m6_OutputF(hObject, eventdata, handles) varargout1 = handles.output;% -%菜单栏-文件-打开 功能:打开图像文件function Untitled_2_Callback(hObject, eventdata, handles)global im; %定义变量作为输入图像time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);%时间串filename,pathname = uigetfile(*.*;*.bmp;*.tif;*.png,选择图片); str=pathname filename; im=imread(str); %打开文件set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 打开图片成功);%将打开文件操作记录与列表框logsaxes(handles.axes5); imshow(im); % -%菜单栏-文件-保存 功能:保存输出图片function Untitled_3_Callback(hObject, eventdata, handles)global BW; %定义变量作为输出图像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(get(handles.listbox3,string),time_string, 图片已保存);%将文件保存成功的信息记录与logend% -%菜单栏-文件-退出 功能:退出GUIfunction Untitled_5_Callback(hObject, eventdata, handles)clc;clear all;close(gcf);% - Executes on selection change in popupmenu3.%下拉式菜单 功能:置图片选择function popupmenu3_Callback(hObject, eventdata, 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 contentsvalcaselena.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);casecamera.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);% -%菜单栏-帮助-关于 功能:作者信息function Untitled_8_Callback(hObject, eventdata, handles)hObject = msgbox(电子科技大学;通信与信息工程学院;王亮森;13,关于作者,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;%im = rgb2gray(im);%假设输入图像可能为彩色图像 参加 im=rgb2gray(im);BW = histeq(im,x);%参数面板-灰度选择 功能:选择所需灰度值function uibuttongroup4_SelectionChangedF(hObject, eventdata, handles)global x;%定义全局变量作为灰度值参数xx=2;%默认调整至二值图像time_string = num2str(datestr(now,yyyy-mm-dd-HH:MM:SS);switch get(eventdata.NewValue,Tag)caseradiobutton11 x=256; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择256);%实时记录下灰度值选择caseradiobutton12 x=128; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择128);caseradiobutton13 x=64; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择64);caseradiobutton14 x=32; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择32);caseradiobutton15 x=16; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择16);caseradiobutton16 x=8; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择8);caseradiobutton17 x=4; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择4);caseradiobutton18 x=2; set(handles.listbox3,string,strvcat(get(handles.listbox3,string),time_string, 灰度选择2);end% -%菜单栏-处理-gaussian噪声叠加 功能:叠加高斯噪声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.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 = num2str(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, handles)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噪声);%参数编辑框 功能:传递speckle噪声参数vfunction edit21_Callback(hObject, eventdata, handles)global v;v=str2num(get(hObject,String);if(isempty(v)%输入被严格限制,只能是数字 set(hObject,String,0.04);end%参数编辑框 功能:传递椒盐噪声参数dfunction edit20_Callback(hObject, eventdata, handles)global d;d=str2num(get(hObject,String);if(isempty(d) set(hObject,String,0.05);end%参数编辑框
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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