《数字图像处理-程序.doc》由会员分享,可在线阅读,更多相关《数字图像处理-程序.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除摘要本课程设计基于对matlab软件以及数字图象处理的学习,制作了一个GUI界面显示的图像处理框。可以实现对图像的读取、保存、显示,以及直方图均衡化、阈值化、小波分解、小波重构、加噪、去噪、平滑、锐化、边缘检测、图像分割等功能。通过对此课题的制作,对基于matlab的图像处理函数以及小波变换等工程及其应用有了更深入的了解。设计目的1、掌握有关数字图像的常用方法。2、掌握Matlab图形工具箱中常用函数的使用方法。3、能用Matlab完成简单的图像处理。4、学会使用Matlab的GUI界面。设计要求和设计指标1、 编写基本的数字图象处理程序,包括图
2、象的读取、存储、显示、直方图均衡化、阈值化、小波分解、小波重构、加噪、去噪、平滑、锐化、边缘检测、图像分割等功能(可自己任意设计、增减功能)。2、 尽量使用界面GUI(选做)。3、 要求使用Matlab编制程序,写出报告。报告包括:设计思路、算法、源程序代码、运行示例、界面GUI等内容。GUI界面图设计思路一、 设计GUI编辑界面4、 在Matlab中Create New GUI,并保存为new.fig,即出现GUI编辑界面,如图一所示。5、 在GUI编辑界面设置Push Button按钮,并在Property Inspector里更改属性。依次命名为读取图片、保存图片、退出、加噪、去噪、直方
3、图均值化、阈值化、边缘监测、图像分割、理想平滑、锐化、一维离散小波变换、二维离散小波变换。6、 点击Axes键,划定图像显示区域,如图一所示。二、 添加图像处理程序1、 选中“读取图片”按钮,右键点击view callbackscallback,Editor框自动跳到该按钮对应的编程区function pushbutton1_Callback(hObject, eventdata, handles)。在注释的后面添加“读取图片”所需要的程序,如下:%选择图片路径filename,pathname=.uigetfile(*.jpg;*bmp;*gif,选择图片);%合成路径+文件名str=pat
4、hname filename;global I;%读取图片I=imread(str);%显示图片imshow(I);2、 点击运行按钮,即挑出GUI运行界面,如图二所示。此时点击“读取图片”按钮,即可在指定路径添加图片,并在axes窗口中显示。3、 依次按照前两个步骤,分别添加保存图片、退出、加噪、去噪、直方图均值化、阈值化、边缘监测、图像分割、理想平滑、锐化、一维离散小波变换、二维离散小波变换等程序,并分别调试运行即可。4、 详细程序代码及运行示例及GUI界面见附件。算法的应用在此次数字图像处理中运用了多种算法,甚至在有些功能,如锐化就运用了5种算法来实现。算法的具体说明与描述请见附件。边缘
5、监测:edge函数、Soble边界探测器和Canny边界探测器分别进行边缘监测,用以比较。加噪:叠加均值为0,方差为0.02的高斯噪声以及叠加密度为0.04的椒盐噪声。去噪:先叠加密度为0.04的椒盐噪声,再加以去噪。平滑:运用低通滤波器锐化:分别采用空间高通滤波法以及四种频域高通滤波法来锐化。其中频域锐化分别采用理想高通滤波器、巴特沃斯高通滤波器、指数型高通滤波器和梯形高通滤波器来实现。5种算法同时输出图片,进行比较。附主要程序代码如下:读取图片:%选择图片路径filename,pathname=.uigetfile(*.jpg;*bmp;*gif,选择图片); %合成路径+文件名str=p
6、athname filename; global Q; % 定义全局变量Q%读取图片Q=imread(str);%显示图片imshow(Q);保存图片:global Q;imwrite(Q,my.png); % 图片保存为my.png退出:close(gcf)直方图均值化:global Q;figure,imhist(Q);I2=histeq(Q);figure,imshow(I2);阈值化将灰度图像转化为索引图像:global Q; X=grayslice(Q,16); figure(1); imshow(X,hot(16);边缘检测:global Q;RGB=Q; figure(1); i
7、mshow(RGB);Q=rgb2gray(RGB); figure(2); imshow(Q); colorbar(horiz);ED=edge(Q,sobel,0.08); figure(3); imshow(ED);图像分割:global Q; BW=roicolor(Q,128,255); figure(1),imshow(Q) figure(2),imshow(BW);加噪:J1=imnoise(Q,gaussian,0,0.02); % 叠加均值为0,方差为0.02的高斯噪声,可以用 % localvar代替figure,imshow (J1);J2=imnoise(Q,salt
8、& pepper,0.04); % 叠加密度为0.04的椒盐噪声。 figure,imshow(J2);去噪:J2=imnoise(Q,salt & pepper,0.04); % 叠加密度为0.04的椒盐噪声。 figure,imshow(J2);Q_Filter1=medfilt2(J2,3 3); %窗口大小为33figure,imshow(Q_Filter1);Q_Filter2=medfilt2(J2,5 5); %窗口大小为55figure,imshow(Q_Filter2);Q_Filter3=medfilt2(J2,7 7); %窗口大小为77figure,imshow(Q_F
9、ilter3);理想平滑:figure;imshow(A);A=double(A);m,n=size(A);for i=1:m for j=1:n A(i,j)=A(i,j)*(-1)(i+j); endendfigure;imshow(A,0 255);A=fft2(A);figure;imshow(A,0 255);B=abs(A);C=10*log(1+B);figure;imshow(C,0 255);D=zeros(m,n);H=zeros(m,n);Dt=50;for i=1:m for j=1:n D(i,j)=sqrt(i-m/2-1)*(i-m/2-1)+(j-n/2-1)*
10、(j-n/2-1); if D(i,j)=10);OUT2(J)=GM(J);subplot(3,2,3),imshow(OUT2,map);OUT3=I;J=find(GM=10);OUT3(J)=255;subplot(3,2,4),imshow(OUT3,map);OUT4=I;J=find(GM=10);OUT5(J)=255;Q=find(GM10);OUT5(Q)=0;subplot(3,2,6),imshow(OUT5,map);一维离散小波变换:load leleccum; s=leleccum(1:3920); ls=length(s); figure,plot(s) %读入
11、预先存储的信号ca1,cd1=dwt(s,db1);subplot(1,2,1),plot(ca1);subplot(1,2,2),plot(cd1) %小波分解第一层a1=upcoef(a,ca1,db1,1,ls);d1=upcoef(d,cd1,db1,1,ls);subplot(1,2,1),plot(a1);subplot(1,2,2),plot(d1); %重构得到的近似信号和细节信号figure,plot(a1+d1); %近似与细节相加a0=idwt(ca1,cd1,db1,ls);figure,plot(a0); %小波反变换重构C,L=wavedec(s,3,db1); %
12、第三层小波分解ca3=appcoef(C,L,db1,3);figure,plot(ca3); %近似分量cd3=detcoef(C,L,3);cd2=detcoef(C,L,2);cd1=detcoef(C,L,1);plot(cd3);figure,plot(cd2);figure,plot(cd1); %三层细节分量a3=wrcoef(a,C,L,db1,3);figure,plot(a3); %重构第三层近似信号d3=wrcoef(d,C,L,db1,3);d2=wrcoef(d,C,L,db1,2);d1=wrcoef(d,C,L,db1,1);plot(d3);figure,plo
13、t(d2);figure,plot(d1); %重构3层细节信号a0=waverec(C,L,db1);figure,plot(a0); %重构信号在第1层的近似信号二维离散小波变换:load woman2nbcol=size(map,1);colormap(pink(nbcol);cod_X=wcodemat(X,nbcol);image(cod_X);axis(square); %编码后的原始图像ca1,ch1,cv1,cd1=dwt2(X,db1);cod_ca1=wcodemat(ca1,nbcol);cod_ch1=wcodemat(ch1,nbcol);cod_cv1=wcodem
14、at(cv1,nbcol);cod_cd1=wcodemat(cd1,nbcol);image(cod_ca1,cod_ch1;cod_cv1,cod_cd1); %对图像小波分解ca2,ch2,cv2,cd2=dwt2(ca1,db1);cod_ca2=wcodemat(ca2,nbcol);cod_ch2=wcodemat(ch2,nbcol);cod_cv2=wcodemat(cv2,nbcol);cod_cd2=wcodemat(cd2,nbcol);image(cod_ca2,cod_ch2;cod_cv2,cod_cd2);axis(square) %第2层 a0=idwt2(ca
15、1,ch1,cv1,cd1,db1,size(X);a0=wcodemat(a0,nbcol);image(a0);axis(square); %第1层重构C,S=wavedec2(X,2,db1);ca2=appcoef2(C,S,db1,2);ch2=detcoef2(h,C,S,2);cv2=detcoef2(v,C,S,2);cd2=detcoef2(d,C,S,2);cod_ca2=wcodemat(ca2,nbcol);cod_ch2=wcodemat(ch2,nbcol);cod_cv2=wcodemat(cv2,nbcol);cod_cd2=wcodemat(cd2,nbcol
16、);image(cod_ca2,cod_ch2;cod_cv2,cod_cd2);axis(square);ca1=appcoef2(C,S,db1,1);ch1=detcoef2(h,C,S,1);cv1=detcoef2(v,C,S,1);cd1=detcoef2(d,C,S,1);cod_ca1=wcodemat(ca1,nbcol);cod_ch1=wcodemat(ch1,nbcol);cod_cv1=wcodemat(cv1,nbcol);cod_cd1=wcodemat(cd1,nbcol);image(cod_ca1,cod_ch1;cod_cv1,cod_cd1);axis(
17、square) %第二层细节分量a2=wrcoef2(a,C,S,db1,2);cod_a2=wcodemat(a2,nbcol);subplot(2,2,1),image(cod_a2);axis(square);h2=wrcoef2(h,C,S,db1,2);v2=wrcoef2(v,C,S,db1,2);d2=wrcoef2(d,C,S,db1,2);cod_h2=wcodemat(h2,nbcol);cod_v2=wcodemat(v2,nbcol);cod_d2=wcodemat(d2,nbcol);subplot(2,2,2),image(cod_h2);axis(square);
18、subplot(2,2,3),image(cod_v2);axis(square);subplot(2,2,4),image(cod_h2);axis(square); %第二层重构C,S=upwlev2(C,S,db1);ca1=appcoef2(C,S,db1,1);ch1=detcoef2(h,C,S,1);cv1=detcoef2(v,C,S,1);cd1=detcoef2(d,C,S,1);siz=S(size(S,1),:);a1=upcoef2(a,ca1,db1,1,siz);hd1=upcoef2(h,ch1,db1,1,siz);vd1=upcoef2(v,cv1,db1,
19、1,siz);dd1=upcoef2(d,cd1,db1,1,siz);cod_a1=wcodemat(a1,nbcol);cod_hd1=wcodemat(hd1,nbcol);cod_vd1=wcodemat(vd1,nbcol);cod_dd1=wcodemat(dd1,nbcol);subplot(2,2,1),image(cod_a1);axis(square)subplot(2,2,2),image(cod_hd1);axis(square)subplot(2,2,3),image(cod_vd1);axis(square)subplot(2,2,4),image(cod_dd1);axis(square)a0=waverec2(C,S,db1);cod_a0=wcodemat(a0,nbcol);image(cod_a0)axis(square) %重构附GUI界面如下: 读取图片直方图均衡化 阈值化边缘检测图像分割 5种锐化加噪去噪理想平滑二维离散小波变换一维离散小波变换:(运行示例图片过多,仅选取少数附上)【精品文档】第 8 页
限制150内