数字图像处理程序.docx
- 文档编号:11282377
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:18
- 大小:1.05MB
数字图像处理程序.docx
《数字图像处理程序.docx》由会员分享,可在线阅读,更多相关《数字图像处理程序.docx(18页珍藏版)》请在冰豆网上搜索。
数字图像处理程序
摘要
本课程设计基于对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×3
figure,imshow(Q_Filter1);
Q_Filter2=medfilt2(J2,[55]);%窗口大小为5×5
figure,imshow(Q_Filter2);
Q_Filter3=medfilt2(J2,[77]);%窗口大小为7×7
figure,imshow(Q_Filter3);
理想平滑:
figure;imshow(A);
A=double(A);
[m,n]=size(A);
fori=1:
m
forj=1:
n
A(i,j)=A(i,j)*(-1)^(i+j);
end
end
figure;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:
m
forj=1:
n
D(i,j)=sqrt((i-m/2-1)*(i-m/2-1)+(j-n/2-1)*(j-n/2-1));
ifD(i,j)<=Dt
H(i,j)=1;
else
H(i,j)=0;
end
end
end
G=A.*H;
figure;imshow(G,[0255]);
B=abs(G);
C=10*log(1+B);
figure;imshow(C,[0255]);
A=ifft2(G);
fori=1:
m
forj=1:
n
A(i,j)=A(i,j)*(-1)^(i+j);
end
end
figure;imshow(A,[0255]);
A=uint8(A);
imwrite(A,'test2_change.jpg');
锐化:
5种方式实现锐化
clc;
[I,map]=imread(str);
figure
subplot(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(GM<10);
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层的近似信号
二维离散小波变换:
loadwoman2
nbcol=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);
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('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');
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',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种锐化
加噪
去噪
理想平滑
二维离散小波变换
一维离散小波变换:
(运行示例图片过多,仅选取少数附上)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 程序