图像处理演示系统课程设计_第1页
图像处理演示系统课程设计_第2页
图像处理演示系统课程设计_第3页
图像处理演示系统课程设计_第4页
图像处理演示系统课程设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、图像处理演示系统课程设计 院、系(部) 专业及班级 学 号 姓 名 日 期 摘要数字图像处理的目的在于改善图像的质量,主要以改善人的视觉效果为目的。目前,图像处理技术应用领域广泛医学、军事、科研、商业等领域。因为数字图像处理技术易于实现非线性处理,处理程序和处理参数可变,故是一项通用性强,精度高,处理方法灵活,信息保存、传送可靠的图像处理技术。本图像处理演示系统以数字图像处理理论为基础,对部分常用功能进行可视化设计,简洁大方,方便用户操作。本文使用MATLAB设计良好的用户界面,从加载、显示、输出及图像的几何变换(平移、缩放、旋转、翻转)与图像增强(空间域的平滑滤波与锐化滤波)等方面提供了简单

2、但实用的基本图像处理功能。1主要内容1.1 图像处理演示系统设计要求1)能加载和显示原始图像,显示和输出处理后的图像;2)实现各部分功能且便于维护和具备可扩展性;3)界面美观并且便于操作;1.2图像处理演示系统设计任务 数字图像处理演示系统应该具备图像的图像增强(空间域的平滑滤波与锐化滤波)、几何变换(平移、缩放、旋转、翻转)、绘制直方图的简单处理功能。1.2.1图像增强图像增强是数字图像处理的基本内容之一,其目的是根据应用需要突出图像中的某些“有用”的信息,削弱或去除不需要的信息,以达到扩大图像中不同物体特征之间的差别,使处理后的图像对于特定应用而言,比原始图像更合适,或者为图像的信息提取以

3、及其他图像分析技术奠定了基础。一般情况下,经过增强处理后,图像的视觉效果会发生改变,这种变化意味着图像的视觉效果得到了改善,某些特定信息得到了增强。1.2.2几何变换几何变换又称为几何运算,它是图像处理和图像分析的重要内容之一。通过几何运算,可以根据应用的需要使原图像产生大小、形状、和位置等各方面的变化。简单的说,几何变换可以改变像素点所在的几何位置,以及图像中各物体之间的空间位置关系,这种运算可以被看成是将各物体在图像内移动,特别是图像具有一定的规律性时,一个图像可以由另外一个图像通过几何变换来产生。实际上,一个不受约束的几何变换,可将输入图像的一个点变换到输出图像中的任意位置。几何变换不仅

4、提供了产生某些特殊图像的可能,甚至还可以使图像处理程序设计简单化。从变换性质来分可以分为图像的位置变换、形状变换等2.设计思想:2.1 图像处理演示系统实现工具的选择使用MATLAB软件进行界面设计及程序编写。22 系统结构框图3图形用户界面设计GUI是实现人机交互的中介,可以通过它实现数据输入、处理和输出。MATLAB提供了一个专门的GUI设计工具图形用户界面开发环境(GUIDE),使用该工具,可以快速完成GUI设计任务。利用MATLAB提供的有关数据,还可以创建工具栏控件和多种对话框。3.1启动GUIDE在命令窗口输入GUIDE,则显示如下的“GUIDE Quick Start”对话框。打

5、开“GUIDE Quick Start”对话框,利用GUIDE模板创建新的GUI,选择一个模板后,点击OK按钮,在输出编辑器中打开GUI。添加菜单以及选择模板后点击运行显示如下:4.图像处理演示系统各功能的实现4.1文件的打开与保存4.1.1文件的打开在主菜单“文件”的下拉菜单中,有个“打开”选项,在其回调函数中添加打开某个文件的相关代码: filename, pathname = uigetfile( .*.bmp;*.jpg;*.gif;,Files (*.bmp,*.jpg,*.gif); *.bmp, 位图文件(*.bmp); . *.jpg,Figures (*.jpg); . *.

6、gif,MAT-files (*.gif); . *.*, All Files (*.*), . Open a file);global w h img xx;L=length(filename);if filename hhh(q) temp=hhh(p); hhh(p)=hhh(q); hhh(q)=temp; end end end img2(i,j)=hhh(5); end endimg = img2;imshow(img);中值滤波处理(平滑处理)后的结果为:4.2.2图像的锐化滤波处理1) 锐化滤波的作用:图像的平滑处理会使图像的边缘纹理信息受到损失,图像变得比较模糊。如果需要突出

7、图像的边缘纹理信息,则可以通过锐化滤波器实现,它可以消除或减弱图像的低频分量从而增强图像中物体的边缘轮廓信息,使得除边缘以外的像素点的灰度值趋向于零。2)锐化滤波原理 锐化滤波器是以对图像的微分运算或差分运算为基础。微分运算是求像素点灰度值的变化率,而图像内不同物体边缘处的像素点的灰度值往往变化比较明显,因此微分运算或差分运算可以起到增强边缘信息的作用。锐化算子: 0 -1 0 H = -1 4 -1 0 -1 03)实现方法:global w h img;img1=im2double(img);a=img1(:,:,1);b=img1(:,:,2);c=img1(:,:,3);img2=im

8、g1;for i=2:w-1 for j=2:h-1 img2(i,j)=abs(4*img1(i,j)-img1(i-1,j)-img1(i+1,j)-img1(i,j-1)-img1(i,j+1); endendimg = im2uint8(img2);imshow(img);其锐化处理结果为:4.3 图像的几何变换4.3.1 对图像进行平移1)图像平移的作用: 将图像中的某点从一个位置(X,Y)移动到另外一个位置(X0,Y0),而使平移后的图像与原始图像完全相同。2)图像平移原理:图像的平移是图像变换中最简单的变换之一,其特点是平移后的图像与原图像完全相同,平移后新图像上的每一个点都可以

9、在原图像中找到对应的点。若点A0(X0,Y0)进行平移后,被移到A(X,Y),其中X方向的平移量为X.Y方向的平移量为Y,那么点A(X,Y)的坐标为:X=X0+XY=Y0+Y实现方法:global w h img;prompt=请输入横向平移量; title=;ansa=inputdlg(prompt,title);x1=str2num(ansa1); handles.my_data4=x1;prompt=请输入纵向平移量; title=;ansa=inputdlg(prompt,title);y1=str2num(ansa1);handles.my_data5=y1;guidata(hObj

10、ect,handles) %上段代码中的x1,y1即为需要输入的横向平移量与纵向平移量for x=1:w for y=1:h PosSourceX=uint16(x+x1); PosSourceY=uint16(y+y1); if(PosSourceXw) | (PosSourceYh) if (xx.BitDepth=24) Transfor(x, y,1:3) = uint8(1); else Transfor(x, y) = uint8(1);end else if (xx.BitDepth=24)img(x,y,1:3) = BmpImage(PosSourceX,PosSourceY

11、,1:3); else img(x,y) = BmpImage(PosSourceX,PosSourceY); end end end end imshow(img)%(PosSourceX和 PosSourceY是平移后坐标点,Transfor为平移后图片)4.3.2 对图像进行缩放1)图像缩放的作用: 对图像进行缩小和放大的处理,可分别对其宽和高的缩放量进行设置。2)图像缩放原理:通常情况下,数字图像的比例缩放是将给定的图像在X方向和Y方向按相同比例缩放a倍。从而获得一副新的图像,如果X方向和Y方向缩放的比例不同,则图像的比例缩放会改变原始图像像素之间的相对位置,产生几何畸变。设原始图像中

12、的点A0(X0,Y0)比例缩放后,在新图像中的对应点为A1(X1,Y1),则坐标关系可表示为:X1=aX0Y1=bX0 若比例缩放所产生的图像中的像素在原图像中没有相对应的像素点时,就需要进行灰度值的插值运算,一般有以下两种插值处理方法。(1) 直接赋值为和它最相近的像素灰度值,这种方法称为最邻近插值法,该方法的主要特点是简单、计算量很小、但可能会产生马赛克现象;(2) 通过其他数学插值算法来计算相应像素点的灰度值,这类方法处理效果好,但运算量会有所增加3)实现方法:prompt=请输入X向缩放倍数:;title=;ansa=inputdlg(prompt,title);sx=str2num(

13、ansa1);handles.my_data3=sx;guidata(hObject,handles)m=xx.Width;n=xx.Height;m1=m*sx;n1=n*sy; %设置Y向缩放倍数sy.for h=1:m1;for w=1:n1;b(h,w)=i(round(h/sx),round(w/sy);%round 取最邻近整数 endend(m,n为原始图像的二维数据,m1,n1为缩放后的图像二维数据,xx为读取的原始图像信息)缩放处理结果显示如下:4.3.3 对图像进行旋转1)图像旋转的作用:对图像进行任意角度的旋转。2)图像旋转原理:图像的旋转变换是几何学中研究的重要内容之一

14、,一般情况下,图像的旋转变换是指以图像的中心为原点,将图像上的所有像素都旋转同一个角度的变换。图像经过旋转变换之后,图像的位置发生了改变,但旋转后,图像的大小一般会改变。和平移变换一样,在图像旋转变换中既可以把转出显示区域的图像截去,又可以扩大显示区域的图像范围以显示图像的全部。设原始图像的任意点A0(X0,Y0)经过旋转角度以后到新的位置A(X,Y),为表示方便,采用极坐标形式表示,原始点的角度为。如下图所示 P r A(X,Y) r A0(X0,Y0) 根据极坐标与二维垂直坐标的关系,原始图像的点A0(X0,Y0)的X0和Y0坐标如下: X0=rcos Y0=rsin 旋转到新位置以后点A

15、(X,Y)的坐标如下:X=rcos(-)=rcoscos+rsinsin=X0cos+Y0sinY=rsin(-)=rsincos-rcossin=-X0sin+Y0cos图像的旋转变换用矩阵形式表示如下: X cos sin 0 X0 Y = -sin cos 0 Y0 1 0 0 1 1对图像进行旋转操作时需要输入旋转(该题中旋转角为90度)角度,相关实现代码如下:global w h img;prompt=请输入旋转角度:;title=Angle Degrees;ansa=inputdlg(prompt,title);n=str2num(ansa1);i=im2double(img);p

16、ai=3.14;n=pai*n/180; %将角度转换为直观的表示方法,便于直接输入度数。img1=zeros(w,h);for i=1:(w-1) for j=1:(h-1) img1(int32(i*cos(n)+sin(n)*j),int32(j*cos(n)-i*1*sin(n)=i(i,j); end endimg=im2unit8(img1);imshow(img);旋转处理如下图所示:4.3.4对图像进行翻转 1)图像翻转的作用:实现图像的水平翻转2)图像翻转原理:垂直方向:yh-y+1水平方向:xw-x+1其中为h图像高,w为图像宽3)实现方法:global xx img w

17、h;img1=img;for i=1:w for j=1:h img1(i,j,1:3)=img(w-i+1,h-j+1,1:3); endendimg=img1;imshow(img);其结果如下显示:对翻转后的图像锐化所显示的图像为:4.4 图像直方图的绘制1) 图像直方图绘制的作用:实现图像直方图的均衡化。 2)图像直方图均衡原理:直方图均衡化是将原图像的直方图通过变换函数修正为均匀的直方图,然后按均衡直方图修正原图像。 图像均衡化处理后,图像的直方图是平直的,即各灰度级具有相同的出现频数,那么由于灰度级具有均匀的概率分布,图像看起来就更清晰了。 首先假定连续灰度级的情况,推导直方图均衡

18、化变换公式,令r代表灰度级,P ( r ) 为概率密度函数。 (注:r值已归一化,最大灰度值为1)。3)实现方法:global xx img w h;img1=rgb2gray(img);img1 = double(img1); %img1 = uint8(255 * img1 * 0.5 + 0.5);grey_grade=28;for i=1:grey_grade grey_friq(i)=0;endfor y=1:w for x=1:h grey_friq(img1(y,x)+1)= grey_friq(img1(y,x)+1)+1; endendbar(1:256,grey_friq)

19、;该图像的直方图显示如下:5.小结从通常意义上讲,数字图像处理技术更加普遍、可靠和准确,比起模拟方法,它们也更容易实现,专用的硬件被用于数字图像处理。今天,硬件解决方案被广泛的用于视频处理系统,但商业化的图像处理任务基本上仍以软件形式实现,运行在通用个人电脑上,掌握进一步的图像处理技能对今后的学习和工作生活也都有其积极的影响!通过这个阶段的努力本图像处理演示系统已基本完成了对文件的打开保存,以及对图像的平移、图像的旋转、翻转、图像的缩放、图像的增强等功能的实现,由于个人水平和时间的有限,此次课程设计还存在许多想法没有很好的实现,扩展功能上也有一定的局限性,希望能在今后的学习中逐渐弥补和改善!

20、6.源程序function varargout = graph(varargin)% GRAPH M-file for graph.fig% GRAPH, by itself, creates a new GRAPH or raises the existing% singleton*.% H = GRAPH returns the handle to a new GRAPH or the handle to% the existing singleton*.% GRAPH(CALLBACK,hObject,eventData,handles,.) calls the local% funct

21、ion named CALLBACK in GRAPH.M with the given input arguments.% GRAPH(Property,Value,.) creates a new GRAPH or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before graph_OpeningFunction gets called. An% unrecognized property name or invalid valu

22、e makes property application% stop. All inputs are passed to graph_OpeningFcn via varargin.% *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help graph% Last Modified

23、by GUIDE v2.5 10-Jul-2014 13:33:34% Begin initialization code - DO NOT EDITgui_Singleton = 1;global w h img xx;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, graph_OpeningFcn, . gui_OutputFcn, graph_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin

24、& isstr(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);Else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before graph is made visible.function graph_OpeningFcn(hObject, even

25、tdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to graph (see VARARGIN)% Choose default

26、 command line output for graphhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes graph wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are returned to the command line.function varargout = graph_OutputFcn(hObject,

27、 eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - 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 structurevarargo

28、ut1 = handles.output;% -function file_Callback(hObject, eventdata, handles)% hObject handle to file (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% -function openFile_Callback(hObject, eventdata, handles)% hObj

29、ect handle to openFile (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)filename, pathname = uigetfile( .*.bmp;*.jpg;*.gif;,MATLAB Files (*.bmp,*.jpg,*.gif); *.bmp, 位图文件(*.bmp); . *.jpg,Figures (*.jpg); . *.gif,MA

30、T-files (*.gif); . *.*, All Files (*.*), . Open a file);global w h img xx;L=length(filename);if filename hhh(q) temp=hhh(p); hhh(p)=hhh(q); hhh(q)=temp; end end end img2(i,j)=hhh(5); end endimg = img2; imshow(img);% -function sharping_Callback(hObject, eventdata, handles)% hObject handle to sharping

31、 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global w h img;img1=im2double(img);a=img1(:,:,1);b=img1(:,:,2);c=img1(:,:,3);img2=img1;for i=2:w-1 for j=2:h-1 img2(i,j)=abs(4*img1(i,j)-img1(i-1,j)-img1(i+1,j)-im

32、g1(i,j-1)-img1(i,j+1); endendimg = im2uint8(img2);imshow(img);% -function trans_Callback(hObject, eventdata, handles)% hObject handle to trans (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% -function translati

33、on_Callback(hObject, eventdata, handles)% hObject handle to translation (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global w h img;prompt=请输入横向平移量;title=;ansa=inputdlg(prompt,title);x1=str2num(ansa1); handles

34、.my_data4=x1;prompt=请输入纵向平移量;title=;ansa=inputdlg(prompt,title);y1=str2num(ansa1);handles.my_data5=y1;guidata(hObject,handles)%上段代码中的x1,y1即为需要输入的横向平移量与纵向平移量for x=1:w for y=1:hPosSourceX=uint16(x+x1);PosSourceY=uint16(y+y1);if(PosSourceXw) | (PosSourceYh) if (xx.BitDepth=24) Transfor(x, y,1:3) = uint

35、8(1); else Transfor(x, y) = uint8(1); end else if (xx.BitDepth=24) img(x,y,1:3) = BmpImage(PosSourceX,PosSourceY,1:3); else img(x,y) = BmpImage(PosSourceX,PosSourceY); end end end end figure; imshow(img)%(PosSourceX和 PosSourceY是平移后坐标点,Transfor为平移后图片)% -function zoom_Callback(hObject, eventdata, hand

36、les)% hObject handle to zoom (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)prompt=请输入X向缩放倍数:;title=;ansa=inputdlg(prompt,title);sx=str2num(ansa1);handles.my_data3=sx;guidata(hObject,handles)m=xx.Width;n=xx.Heig

37、ht;m1=m*sx;n1=n*sy; %设置Y向缩放倍数sy.for h=1:m1;for w=1:n1;b(h,w)=i(round(h/sx),round(w/sy);%round 取最邻近整数 endend% -function revolve_Callback(hObject, eventdata, handles)% hObject handle to revolve (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global w h img;prompt=请输入旋转角度:;title=Angle Degrees;ansa=inputdlg(prompt,title

温馨提示

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

评论

0/150

提交评论