摘要本课程设计基于对matlab软件以及数字图象处理的学习,制作了一个GUI界面显示的图像处理框。可以实现对图像的读取、保存、显示,以及直方图均衡化、阈值化、小波分解、小波重构、加噪、去噪、平滑、锐化、边缘检测、图像分割等功能。通过对此课题的制作,对基于matlab的图像处理函数以及小波变换等工程及其应用有了更深入的了解。设计目的1、掌握有关数字图像的常用方法。2、掌握Matlab图形工具箱中常用函数的使用方法。3、能用Matlab完成简单的图像处理。4、学会使用Matlab的GUI界面。设计要求和设计指标1、编写基本的数字图象处理程序,包括图象的读取、存储、显示、直方图均衡化、阈值化、小波分解、小波重构、加噪、去噪、平滑、锐化、边缘检测、图像分割等功能(可自己任意设计、增减功能)。2、尽量使用界面GUI(选做)。3、要求使用Matlab编制程序,写出报告。报告包括:设计思路、算法、源程序代码、运行示例、界面GUI等内容。GUI界面图设计思路一、设计GUI编辑界面4、在Matlab中CreateNewGUI,并保存为new.fig,即出现GUI编辑界面,如图一所示。5、在GUI编辑界面设置PushButton按钮,并在PropertyInspector里更改属性。依次命名为读取图片、保存图片、退出、加噪、去噪、直方图均值化、阈值化、边缘监测、图像分割、理想平滑、锐化、一维离散小波变换、二维离散小波变换。6、点击Axes键,划定图像显示区域,如图一所示。二、添加图像处理程序1、选中“读取图片”按钮,右键点击viewcallbacks——callback,Editor框自动跳到该按钮对应的编程区——functionpushbutton1_Callback(hObject,eventdata,handles)。在注释的后面添加“读取图片”所需要的程序,如下:%选择图片路径[filename,pathname]=...uigetfile({'*.jpg';'*bmp';'*gif'},'选择图片');%合成路径+文件名str=[pathnamefilename];globalI;%读取图片I=imread(str);%显示图片imshow(I);2、点击运行按钮,即挑出GUI运行界面,如图二所示。此时点击“读取图片”按钮,即可在指定路径添加图片,并在axes窗口中显示。3、依次按照前两个步骤,分别添加保存图片、退出、加噪、去噪、直方图均值化、阈值化、边缘监测、图像分割、理想平滑、锐化、一维离散小波变换、二维离散小波变换等程序,并分别调试运行即可。4、详细程序代码及运行示例及GUI界面见附件。算法的应用在此次数字图像处理中运用了多种算法,甚至在有些功能,如锐化就运用了5种算法来实现。算法的具体说明与描述请见附件。边缘监测:edge函数、Soble边界探测器和Canny边界探测器分别进行边缘监测,用以比较。加噪:叠加均值为0,方差为0.02的高斯噪声以及叠加密度为0.04的椒盐噪声。去噪:先叠加密度为0.04的椒盐噪声,再加以去噪。平滑:运用低通滤波器锐化:分别采用空间高通滤波法以及四种频域高通滤波法来锐化。其中频域锐化分别采用理想高通滤波器、巴特沃斯高通滤波器、指数型高通滤波器和梯形高通滤波器来实现。5种算法同时输出图片,进行比较。附主要程序代码如下:读取图片:%选择图片路径[filename,pathname]=...uigetfile({'*.jpg';'*bmp';'*gif'},'选择图片');%合成路径+文件名str=[pathnamefilename];globalQ;%定义全局变量Q%读取图片Q=imread(str);%显示图片imshow(Q);保存图片:globalQ;imwrite(Q,'my.png');%图片保存为my.png退出:close(gcf)直方图均值化:globalQ;figure,imhist(Q);I2=histeq(Q);figure,imshow(I2);阈值化将灰度图像转化为索引图像:globalQ;X=grayslice(Q,16);figure(1);imshow(X,hot(16));边缘检测:globalQ;RGB=Q;figure(1);imshow(RGB);Q=rgb2gray(RGB);figure(2);imshow(Q);colorbar('horiz');ED=edge(Q,'sobel',0.08);figure(3);imshow(ED);图像分割:globalQ;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&pepper',0.04);%叠加密度为0.04的椒盐噪声。figure,imshow(J2);去噪:J2=imnoise(Q,'salt&pepper',0.04);%叠加密度为0.04的椒盐噪声。figure,imshow(J2);Q_Filter1=medfilt2(J2,[33]);%窗口大小为3×3figure,imshow(Q_Filter1);Q_Filter2=medfilt2(J2,[55]);%窗口大小为5×5figure,imshow(Q_Filter2);Q_Filter3=medfilt2(J2,[77]);%窗口大小为7×7figure,imshow(Q_Filter3);理想平滑:figure;imshow(A);A=double(A);[m,n]=size(A);fori=1:mforj=1:nA(i,j)=A(i,j)*(-1)^(i+j);endendfigure;imshow(A,[0255]);A=fft2(A);figure;imshow(A,[0255]);B=abs(A);C=10*log(1+B);figure;imshow(C,[0255]);D=zeros(m,n);H=zeros(m,n);Dt=50;fori=1:mforj=1:nD(i,j)=sqrt((i-m/2-1)*(i-m/2-1)+(j-n/2-1)*(j-n/2-1));ifD(i,j)=DtH(i,j)=1;elseH(i,j)=0;endendendG=A.*H;figure;imshow(G,[0255]);B=abs(G);C=10*log(1+B);figure;imshow(C,[0255]);A=ifft2(G);fori=1:mforj=1:nA(i,j)=A(i,j)*(-1)^(i+j);endendfigure;imshow(A,[0255]);A=uint8(A);imwrite(A,'test2_change.jpg');锐化:5种方式实现锐化clc;[I,map]=imread(str);figuresubplot(3,2,1),imshow(I,map);I=double(I);[IX,IY]=gradient(I);GM=sqrt(IX.*IX+IY.*IY);OUT1=GM;subplot(3,3,2),imshow(OUT1,map);OUT2=I;J=find(GM=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);OUT4(J)=255;subplot(3,2,5),imshow(OUT4,map);OUT5=I;J=find(GM=10);OUT5(J)=255;Q=find(GM10);OUT5(Q)=0;subplot(3,2,6),imshow(OUT5,map);一维离散小波变换:loadleleccum;s=leleccum(1:3920);ls=length(s);figure,plot(s)%读入预先存储的信号[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');%第三层小波分解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,plot(d2);figure,plot(d1);%重构3层细节信号a0=waverec(C,L,'db1');figure,plot(a0);%重构信号在第1层的近似信号二维离散小波变换:loadwoman2nbcol=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=wcodemat(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(ca1,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