收藏 分享(赏)

数字图像处理课程设计 matlab.doc

上传人:HR专家 文档编号:11255783 上传时间:2020-03-04 格式:DOC 页数:17 大小:1.11MB
下载 相关 举报
数字图像处理课程设计 matlab.doc_第1页
第1页 / 共17页
数字图像处理课程设计 matlab.doc_第2页
第2页 / 共17页
数字图像处理课程设计 matlab.doc_第3页
第3页 / 共17页
数字图像处理课程设计 matlab.doc_第4页
第4页 / 共17页
数字图像处理课程设计 matlab.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、1数字图像处理课程设计文档目录一、 课程设计目的.2二、 课程设计要求.2三、 课程设计的内容.2四、 课题分析.3五、 总体设计.3六、 具体设计.46.1、 文件.46.1.1、打开.46.1.2、保存.46.1.3、打印.46.1.4、退出.46.2、直方图统计46.2.1、R 直方图.46.2.2、G 直方图.46.2.3、B 直方图.46.3、图像增强处里56.3.1、直方图均衡化.56.3.2、对比度展宽.66.3.3、动态范围调整.66.3.4、空间域平滑算法.66.3.4.1、均值滤波.76.3.4.2、中值滤波76.3.4.3、边界保持滤波86.4、图像分割86.4.1、均匀

2、性度量法86.4.2、类间最大距离法.96.4.3、局部阈值法96.5、颜色空间转化965.1、RGB 转HSV106.5.2、RGB 转HIS.1026.6、其他图像处理功能106.6.1、锐化.106.6.2、傅里叶.10七、 程序调试及结果分析.11八、 心得体会.11九、 参考文献.11十、 附录.12基于 MATLAB 的图像处理的课程设计一、课程设计目的1、提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。2、熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。二、课程设计要求1、要求独立完成设计项目,开发工具为 MATLAB,也可为 C、C+、

3、java 等,具体自选。各组长有责任督促组员完成任务并提交报告;2、时间为 4 月 28 日6 月 28 日为其两个月的业余时间。3三、课程设计的内容学习 MATLAB GUI 程序设计,利用 MATLAB 图像处理工具箱,设计和实现自己的Photoshop 。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。 整个系统要完成的基本功能大致如下:1、能对图像文件(bmp、 jpg、 tiff、 gif 等)进行打开、保存、另存、打印、退出等功能操作;2、数字图像的统计信息功能:直方图的统计及绘制;3、数字图像的增强处理

4、功能:(1) 直方图的均衡化(2) 对比度展宽(3) 动态范围调整(4) 空间域平滑算法的各种算法(如均值滤波、中值滤波、边界保持的滤波方法等)4、数字图像由 RGB 转换成 HIS 空间并分别显示其分量图。5、数字图像分割功能:可采用两种以上方法进行图像分割。总体设计由 于 要 实 现 的 功 能 并 不 是 很 多 , 所 以 在 排 版 的 过 程 中 , 把 各 个 功 能 都 安 排 在目 录 栏 上 , 整 体 安 排 如 下 图 所 示 :4四、 具体设计6.1、 文件6.1.1、打开为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择 uigetfile

5、 函数来实现, uigetfile 函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个 GUI 程序的操作对象是图像文件。Uigetfile 函数的调用格式为name,path=yigetfile(), 在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“ name”和“path”中。如果按下取消按钮或是发生错误,则返回值是 0。 根据返回值的情况,如果是 0,则弹出提示错误的对话框,否则,通过 imread 函数读出图像数据,把图像数据赋值给全局变量 handles.image。6.1.2、保存同样也通过对话框的形式来保存图像数据,通过 uige

6、tfile 函数选择文件名和路径,用 getimage(gca)取出坐标 2 变换后的图像数据保存到变量 i,最后用 imwrite 函数,把数据 i 存到指定的文件。6.1.4、退出退出比较简单,程序如下所示:clc;close all;close(gcf); 6.1.3、打印打印功能没能实现,将它设置为不可使用,可用如下代码实现set(handles.print, Enable,off ); %放在open_callback函数末尾set(handles.print, Enable,off );%放在two_OpeningFcn中 6.2、 直方图统计6.2.1、R 直方图由于 RGB 图

7、像是三维图像,所以图像数据是一个三维数组,为了显示R 直方图像,把三维图像降为二维,且是当最后一个参数为 1 时是 R 直方图:x=imhist(handles.image(:,:,1); %当然也可以选择(:,:,2) 或(:,:,3) imshow(y);处理前后图片效果如下:6.2.2、G 直方图G 直方图与 R 直方图的程序差不多只需将数值为 1 的 R 直方图变成 2即可成为 G 直方图5x=imhist(handles.image(:,:,2);6.2.3、B 直方图同理可得 B 直方图x=imhist(handles.image(:,:,3);RGB 三种直方图统计图如下:原图

8、R 直方图G 直方图 B 直方图6.3、 图像增强处理6.3.1、直方图均衡化在 balance_Callback 回退函数中实现直方图均衡化每个回退函数中都要获取图片,上面的 RGB 直方图也一样需获取打开的图片。打开图片的为以下程序代码:set(handles.axes2,HandleVisibility,ON);axes(handles.axes2); 直方图均衡化是判断是否为灰度图。用函数 isrgb 了来判断,不是灰度则将其转化,否则就直接用函数:6histeq(handles.image)% handles.image 是获取的图片来直方图均衡化处理图片图片前后效果如下:6.3.2

9、、 对比度展宽对图像的对比度展宽刻可自己编写算法来处理,同样的, ,处理结果如图:6.3.3、动态范围调整共图像处理功能未能实现,程序中已给出处理其图像的代码,但有错误,不能找出其错位,将其正确的处理,原因是:nw=1./(b-a).*(h-a.*ones(sx,sy);Error:Matrix dimensions must agree 也查过资料修改该语句,有的资料说是乘除和幂方要改成点乘点除,点幂方,7这个是合理,但是改正后仍然有错,是在无能为力,代码在后面将给出,可供参考。6.3.4、空间域平滑算法6.3.4.1、均值滤波经常用到的噪声有两种,高斯噪声,椒盐噪声,可以通过以下两个函数来

10、实现:y=imnoise(handles.img,gaussian,p1,p2);%高斯噪声y=imnoise(x,salt %椒盐噪声均值滤波中可对高斯滤波,也可以对椒盐滤波,设计过程中采用其一种图片进行处理。但两种处理的效果就不同,对高斯噪声处理的效果更加明显均值滤波是一种采取平均灰度值的方法进行滤波,用 imnoise 获得噪声的图片。这个函数可获得高斯噪声,亦可获得椒盐噪声。在采用函数 conv2 进行均值处理,处理前后的图片比较如下:6.3.4.2、中值滤波中值滤波同均值滤波的程序差不多,只是进行滤波的原理不同,则采用不同的函数进行代替,用以下函数可进行中值滤波处理:I = imno

11、ise(handles.image,salt imshow(I);j=medfilt2(I);前后图片效果如下:86.3.4.3、边界保持滤波原理不同,采用 knn 函数是处理边界保持滤波的,程序代码的形式跟前两种滤波差不多:I = imnoise(handles.image,salt imshow(I);j=knn2(I);前后图片效果如下:6.4、 图像分割:图象分割是按照某些特性(如灰度级,频谱,颜色,纹理等)将图象划分成一些区域,在这些区域内其特性是相同的或者说是均匀的,两个相邻区域彼此特性则是不同的,其间存在着边缘或边界6.4.1、均匀性度量法当图像被分为目标物和背景两个类时,属于同

12、一类别的像素值分布方差最小,也即具有均匀性。给定一初始阈值 Th=Th0,将图像分为 C1 和 C2 两类 分别计算两类中的方差分别计算两类在图像中的分布概率选择最佳阈值 Th=Th*, 将图像分为 C1 和 C2 两类,满足21和9均匀性度量方法的处理结果:6.4.2、类间最大距离法.采用最佳阈值分割后,两类之间的差异最大,且差异采用两类中心与阈值间的距离差度量给定一初始阈值 Th=Th0,将图像分为 C1 和 C2 两类 分别计算两类的灰度均值计算相对距离度量值 s选择最佳阈值 Th=Th*, 将图像分为 C1 和 C2 两类图片效果:6.4.3、局部阈值法不均匀照射,物体背景对比明显,

13、不能只使用一门限灰度级校正。图象分成小块,选择局部门限局部阈值法的处理前后结果:21和max|*SSTh106.5、 颜色空间转化65.1、RGB 转 HSV色彩空间相互转化:其中有很多种色彩空间,这里只介绍两种转换关系:RGB 转 HSV,图像处理中有专门的函数将其进行转化,即 rgb2hvs 函数转化图像前后对比如下:6.5.2、RGB 转 HIS首先获取图像的 RGB 3 个通道R=w(:,:,1);G=w(:,:,2);B=w(:,:,3);观察 HSI 通道图像因系统没有 rgb2hsi 函数,只有 rgb2hsv 函数,可自己编写程序实现算法,用一个循环处理,分别得到 HIS 的色

14、度,饱和度以及强度图,代码在后面实现图形处理效果如下:116.6、 其他图像处理功能6.6.1、锐化6.6.2、傅里叶这两个是附加的图像处理功能,在次不做过多的说明,可向大家看看处理图像结果进行对比一下,看看效果,可在后面附上代码锐化. 四种傅里叶变12参考文献【1】 郑阿奇,曹戈,赵阳.MATLAB 实用教程M.北京:电子工业出版社【2】 精通 matlab61.5_(北航_张志涌).pdf【3】MATLAB 编程 (第二版) MATLAB Programming for Engineers Second Edition)Stephen J. Chapman 著 邢树军 郑碧波 译【4】相关

15、的 MATLAB 图像处理函数五、 附录function varargout = two(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, .gui_Singleton, gui_Singleton, .gui_OpeningFcn, two_OpeningFcn, .gui_OutputFcn, two_OutputFcn, .gui_LayoutFcn, , .gui_Callback, );if nargin endif n

16、argoutvarargout1:nargout = gui_mainfcn(gui_State, varargin:);elsegui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before erzhi is made visible.function two_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.

17、-%接下来是菜单的程序-function file_Callback(hObject, eventdata, handles)-%文件打开程序function open_Callback(hObject, eventdata, handles)name,path=uigetfile(*.bmp,载入图像);if isequal(name,0)|isequal(path,0)errordlg(没有选中文件 ,出错 );return;elsex=imread(path,name);axes(handles.axes1);imshow(x);handles.img=x;handles.noise_i

18、mg=x;guidata(hObject,handles)end-function save_Callback(hObject, eventdata, handles)%文件保存filename,pathname = uiputfile(*.bmp,图片保存为);if isequal(filename,pathname,0,0)errordlg(没有保存 ,出错);13return;elsefile=strcat(pathname,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-function exit_Callba

19、ck(hObject, eventdata, handles)clc;close all;close(gcf);-% 直方图-function zhf_Callback(hObject, eventdata, handles)-function red_Callback(hObject, eventdata, handles)% R 直方图data (see GUIDATA)set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);x=imhist(handles.image(:,:,1);x1=x(1:10:256);horz=1:

20、10:256;bar(horz,x1);set(handles.axes2,xtick,0:50:255); -function green_Callback(hObject, eventdata, handles)% G 直方图set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);x=imhist(handles.image(:,:,2); x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,xtick,0:50:255); -function blue_Cal

21、lback(hObject, eventdata, handles)% B 直方图set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);%if isrgb(handles.img)x=imhist(handles.image(:,:,3); x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,xtick,0:50:255);-%图像增强处理-function zhf_Callback(hObject, eventdata, handles)-function ba

22、lance_Callback(hObject, eventdata, handles)%直方图均衡化set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);if isrgb(handles.image)a=histeq(handles.image(:,:,1);b=histeq(handles.image(:,:,2);c=histeq(handles.image(:,:,3);k(:,:,1)=a;k(:,:,2)=b;k(:,:,3)=c;imshow(k);elseh=histeq(handles.image);imshow(

23、h);endfunction zq_Callback(hObject, eventdata, handles)-function duibidu_Callback(hObject, eventdata, handles)%对比度展宽set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);h=im2double(handles.image);sx,sy=size(h);nw=h.0.3;subplot(2,2,1);14imshow(h); title(original);subplot(2,2,2);imshow(nw);title

24、(r=0.4);subplot(2,2,3);imshow(h.0.5);title(r=0.7);subplot(2,2,4);imshow(h.2);title(r=3);-function dongtai_Callback(hObject, eventdata, handles)%动态调整范围set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);h=im2double(handles.image);a=0.01;b=0.35;sx,sy=size(h);w,n=find(h(:)b);h(n1)=1;nw=1./(b-a).

25、*(h-a.*ones(sx,sy);subplot(1,2,1);imshow(h);subplot(1,2,2);imshow(nw);-%空间域平滑算法function pinghua_Callback(hObject, eventdata, handles)-function junzhi_Callback(hObject, eventdata, handles)%均值滤波h=1 1 1;1 1 1;1 1 1;h=h/9;set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);x=imnoise(handles.image

26、,gaussian,0,0.02);imshow(x);j=conv2(x,h);figure,imshow(j,);-function zhongzhi_Callback(hObject, eventdata, handles)%中值滤波set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);% I=imnoise(I,gaussian,0,0.02);I = imnoise(handles.image,salt % j=medfilt2(I);figure,imshow(j,);-function bianjie_Callbac

27、k(hObject, eventdata, handles)% 边界保持滤波set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);% I=imnoise(I,gaussian,0,0.02);I = imnoise(handles.image,salt imshow(I);j=knn2(I);figure,imshow(j,);-function junyunxing_Callback(hObject, eventdata, handles)%均与性度量法set(handles.axes2,HandleVisibility,ON)

28、;axes(handles.axes2);v=double(handles.image);sx,sy=size(v);num=sx*sy;t=;15for th=6:254r1,c1=find(v(:)=th);r2,c2=find(v(:)=l+5);r2,c2=find(v(:)t);R(c)=1;x,y=size(R); q=R;for i=10:x-10for j=10:y-10if R(i,j)=0t=R(i-1,j-1),R(i-1,j),R(i-1,j+1),R(i,j-1),R(i,j+1),R(i+1,j-1),R(i+1,j),R(i+1,j+1);if sum(t)=0

29、q(i,j)=1;endendendendfigure, imshow(q,);-function leijianzuidajuli_Callback(hObject, eventdata, handles)%类间最大法set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);X=rgb2gray(handles.image);r,c=size(X);figure (1)subplot(1,2,1)imshow(X)R=zeros(1,256);for i=50:150Xi0=X0i;N1=sum(sum(Xi1);Xm1=X0(Xi

30、1);u1=sum(Xm1)/N1;R(i+1)=(u1-i)*(i-u0)/(u1-u0)2);endTh=find(R=max(R(51:151)-1X2=zeros(r,c);for i=1:rfor j=1:c16X2(i,j)=X0(i,j)Th;endendsubplot(2,2,2)imshow(X2)-%颜色空间转化-function hsv_Callback(hObject, eventdata, handles)%RGB 转 HSVset(handles.axes2,HandleVisibility,ON);axes(handles.axes2);hv=rgb2hsv(ha

31、ndles.image); subplot(2,2,1);imshow(hv); title(RGBHSV);%RGB=reshape(ones(64,1)*reshape(jet(64),1,192),64,64,3); H=hv(:,:,1); S=hv(:,:,2); V=hv(:,:,3); subplot(2,2,2);imshow(H) ; title();subplot(2,2,3);imshow(S); title();subplot(2,2,4);imshow(V);title();-function HIS_Callback(hObject, eventdata, hand

32、les)%RGB 转 HSIset(handles.axes2,HandleVisibility,ON);axes(handles.axes2);W=im2double(handles.image);%获得 double型的图形矩阵m,n,q=size(W);R=W(:,:,1);G=W(:,:,2);B=W(:,:,3);% 改变通道来观察图像H=zeros(m,n);S=H;for i1=1:mfor i2=1:nnumerator=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2);denominator=sqrt(R(i1,i2)-G(i1,i2)2+(R

33、(i1,i2)-B(i1,i2)*(G(i1,i2)-B(i1,i2);theta=acos(numerator/denominator)*180/pi;if(B(i1,i2)=G(i1,i2)H(i1,i2)=theta;elseH(i1,i2)=360-theta;endmin1=min(R(i1,i2),G(i1,i2);min1=min(B(i1,i2),min1);S(i1,i2)=1-3/(R(i1,i2)+G(i1,i2)+B(i1,i2)*min1;endendI=(R+G+B)/3;figure,subplot(1,3,1),imshow(H,),title(色度图 H);s

34、et(gcf,outerposition,get(0,screensize);set(gcf,NumberTitle,off,Name,HSI 通道图像);subplot(1,2,2),imshow(S),title(饱和度图 S);subplot(1,2,3),imshow(I),title(强度图I);% -%其他图像处理-function fly_Callback(hObject, eventdata, handles)%傅里叶变化set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);17m,n=size(handles.i

35、mage);d=zeros(m,n); d(60:100,60:100)=1;w=fft2(d);w1=fftshift(w);sx,sy=size(d);subplot(2,2,1); imshow(d);subplot(2,2,2); imshow(abs(w1);for i=1:sxt= fft(d(i,:);len=length(t)/2;F1(i,:)=(t(len+1:end),t(1:len);endfor i=1:syF2=fft(F1(:,i);len=length(F2)/2;F(:,i)=(F2(len+1:end);F2(1:len);endsubplot(2,2,3)

36、;imshow(abs(F1);subplot(2,2,4);imshow(abs(F);function ruihua_Callback(hObject, eventdata, handles)%锐化k=2;h1=-1 0 1;-k 0 k;-1 0 1;h2=1 k 1;0 0 0;-1 -k -1;set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);I=rgb2gray(handles.image);subplot(121);imshow(I);J1(:,:)=conv2(I(:,:),h1);J2(:,:)=conv2(I(:,:),h2);J=abs(J1)+abs(J2);subplot(122);imshow(J),0 255);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报