江南大学
《数字图像处理技术》课程设计报告
设计题目: 数字图像处理系统
班 级: 数字媒体 班
姓 名:
学 号:
指导老师:
日 期: 2013.7.2
一、课程设计目的要求:
1、提高分析图像处理问题的能力,进一步巩固在《数字图像处理技术》课程中所学的基本原理与方法。
2、掌握并使用一门计算机语言,进行数字图像处理的应用设计。
二、设计的内容:
根据本次课设完成的系统的主要功能如下:利用matlab的GUI程序设计一个简单的图像处理程序,含有如下基本功能:
1、图像的读取、存储、剪切和粘贴
2、图像转化为灰度图像
3、图像大小的计算
4、直方图均衡化规定化的计算
5、图像求反、动态压缩
6、直接灰度调整
7、空域滤波(均值、中值、对比度增强滤波)
8、非线性锐化滤波(log滤波、prewitt滤波、sobel卷积、sobel滤波)
9、频域增强(高通、低通滤波)
三、总体方案设计:
(1)、软件的总体设计界面布局如下图:
系统的总体设计界面主要分为2个区域:显示区域和操作区域。
显示区域:在原始图像的基础上显示效果图。
操作区域:通过功能菜单实现图像的各种处理。
设计完成后运行的软件界面如下:
(2)、功能模块的划分:
1、图像的读取、存储、退出
2、编辑(还原、剪切、粘贴)
3、图像(图像大小的计算、旋转、直方图均衡化规定化的计算、图像求反、动态压缩)
4、滤波(直接灰度调整、空域滤波、非线性锐化滤波、频域增强)
(3)、系统运行环境:
Windows 7 or SP1、Windows Vista SP2、Windows XP SP3、Windows XP x64 Edition SP2、Windows Server 20## SP2 or R2、Windows Server 20## R2 ,CPU要求:X86架构且支持SSE2指令集,硬盘空间:典型安装需要3-4G,内存:最低1G,推荐2G。
(4)、选用的工具:matlab7.0,win7X64
(5)、主要实现功能的原理:
直方图均衡化方法的基本思想是,对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减。从而达到清晰图像的目的。空域是指图像平面本身,空域滤波这类方法直接对图像的像素进行处理。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。
四、各个功能模块的主要实现程序:
各个功能模块的具体实现,主要步骤实现的效果图如下:
1、图像另存为:
function tp_saveAs_Callback(hObject, eventdata, handles)
global tpdata tp;
[FileName,PathName]=uiputfile({'*.jpg;*.tif;*.png;*.gif';'*.*';'All Files' },'保存图像',tp);
if FileName==0
return;
else
tp=[PathName,FileName];
imwrite(tpdata,tp);
End
2、灰度调整:
function tp_filter_grayhound_Callback(hObject, eventdata, handles)
global tpdata;
I=tpdata;
prompt={'请输入两个0—1之间的数'};
dlgtitle = '输入';
num_lines = 1;
def = { '0.3 0.7'};
answer = inputdlg(prompt,dlgtitle,num_lines,def);
answer =char(answer);
answer=str2num(answer);
if (answer(1)>0&answer(1)<1)&(answer(2)>0&answer(2)<1)
tpdata=imadjust(I,[answer(1) answer(2)],[]);
imshow(tpdata)
else
warndlg('输入错误!!!');
End
3、计算图像大小:
function tp_size_Callback(hObject, eventdata, handles)
global tpdata;
[x,y]=size(tpdata);
msgbox( num2str([ x y ]) ,' 图片大小 ');
4、菜单中图片旋转:
function tp_rotate_Callback(hObject, eventdata, handles)
global tpdata;
prompt={'+:为逆时针 -:为顺时针'};
dlgtitle = '输入角度';
num_lines = 1;
def = { '90'};
answer = inputdlg(prompt,dlgtitle,num_lines,def);
answer =char(answer);
answer=str2num(answer);
if answer>-360&answer<360
tpdata=imrotate(tpdata,answer,'bicubic');
imshow(tpdata);
End
直方图计算:
function tp_squarejs_Callback(hObject, eventdata, handles)
global tpdata;
imhist(tpdata,64);
5、直方图均值计算:
function tp_squareMeanjs_Callback(hObject, eventdata, handles)
global tpdata;
I=tpdata;[m,n]=size(I); GP=zeros(1,256);
for k=0:255
GP(k+1)=length(find(I==k))/(m*n);
end
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=GP(j)+S1(i); %计算Sk
end
end
S2=round(S1*256); %将Sk归到相近级的灰度
for i=1:256
GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率
end
PA=I;
for i=0:255
PA(find(I==i))=S2(i+1);%将各个像素归一化后的灰度值赋给这个像素
end
imshow(PA) %显示均衡化后的图像 tadata=(PA);
figure('NumberTitle','off','Name','直方图'), %显示均衡化后的直方图
bar(0:255,GPeq,'b')
title('Averaging picture')
xlabel('graydegree')ylabel('probability')
6、直方图规定化计算:
function tp_squareOrdainjs_Callback(hObject, eventdata, handles)
global tpdata;
tpdata=histeq(tpdata);
imshow(tpdata);
figure('NumberTitle','off','Name','直方图规定化') ,imhist(tpdata,64);
7、图片求反:
function tp_reverse_Callback(hObject, eventdata, handles)
global tpdata;
X1=tpdata;
f1=200;
g1=256;
k=g1/f1;
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
f=X2(i,j);
g(i,j)=0;
if (f>=0)&(f<=f1)
g(i,j)=g1-k*f;
else
g(i,j)=0;
end
end
end
imshow(mat2gray(g))
tpdata=mat2gray(g);
8、动态压缩:
function tp_compress_Callback(hObject, eventdata, handles)
global tpdata;
X1=tpdata;
c=255/log(256);
x=0:1:255;
y=c*log(1+x);
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
g(i,j)=c*log(X2(i,j)+1);
end
end
imshow(mat2gray(g))
tpdata=mat2gray(g);
9、均值滤波:
function tp_meanfilte_Callback(hObject, eventdata, handles)
global tpdata;
I=tpdata;
J=imnoise(I,'salt & pepper',0.02);
tpdata=filter2(fspecial('average',3),J)/255;
imshow(tpdata)
10、高通滤波:
function tp_highfilite_Callback(hObject, eventdata, handles)
global tpdata;
I1=tpdata;
f=double(I1);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;d0=5;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2);
if d==0;
h=0;
else
h=1/(1+(d0/d)^(2*n));
end
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
tpdata=uint8(real(X2));
imshow(tpdata)
11、低通滤波:
function tp_lowfilite_Callback(hObject, eventdata, handles)
global tpdata;
I1=tpdata;
f=double(I1);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
tpdata=uint8(real(X2));
imshow(tpdata)
12、中值滤波:
function tp_medieafilite_Callback(hObject, eventdata, handles)
global tpdata;
I=tpdata;
J=imnoise(I,'salt & pepper',0.08);
domain=[0 0 1 0 0;
0 0 1 0 0;
1 1 1 1 1;
0 0 1 0 0;
0 0 1 0 0];
tpdata=ordfilt2(J,5,domain);
imshow(tpdata);
13、对比度增强滤波:
function tp_contraststrongfilite_Callback(hObject, eventdata, handles)
global tpdata;
I=tpdata;
prompt={'输入一个0-1之间的数'}; dlgtitle = '输入数字';
num_lines = 1;
def = { '0.8'};
answer = inputdlg(prompt,dlgtitle,num_lines,def);
answer =char(answer);
answer=str2num(answer);
if answer>0&answer<1
h=fspecial('unsharp',answer);
tpdata=filter2(h,I)/255;
imshow(tpdata)
Else warndlg('输入错误!!!');
End
14、log滤波:
function tp_log_Callback(hObject, eventdata, handles)
global tpdata;
I1=tpdata;
h1=fspecial('sobel');
h3=fspecial('log');
tpdata=filter2(h3,I1);
imshow(tpdata);
title('log 滤波');
15、prewitt滤波:
function tp_prewitt_Callback(hObject, eventdata, handles)
global tpdata;
I1=tpdata;
h1=fspecial('sobel');
h2=fspecial('prewitt');
tpdata=conv2(h2,I1);
imshow(tpdata);
title('prewitt 滤波');
16、Sobel卷积滤波:
function tp_sobel_Callback(hObject, eventdata, handles)
global tpdata;
I1=tpdata;
h1=fspecial('sobel');
tpdata=filter2(h1,I1);
imshow(tpdata);
title('sobel 卷积');
I3=conv2(I1,h1);
17、sobel滤波:
function tp_sobellb_Callback(hObject, eventdata, handles)
global tpdata;
I1=tpdata;
h1=fspecial('sobel');
tpdata=conv2(I1,h1);
imshow(tpdata);
title('sobel 滤波');
五、课程设计总结与体会:
本次课程设计,我做的内容主要是根据我们课堂上所学的数字图像处理的一些基本功能函数,实现了直方图的计算(均衡化,规定化),图像求反,动态压缩,以及滤波(空域、非线性锐化、频域增强)功能。但是本次课设还有需要改进的地方,代码中没有将彩色图像分成RGB三张图,分别进行滤波,而是采用了转化为灰度图像进行滤波。通过本次的课程设计,把课堂上的所学运用到图像处理的系统中,加深了对数字图像处理这门课程的理解。在完成作业的过程中,也遇到好多问题,不断的在网上查阅资料,翻阅书本,当然啦,最方便的就是请教同学,最终完成了此次课设。虽然做的比较粗糙,但是还是在过程中学到了好多,理论和实践结合起来才是最重要的。