《数字视音频技术》
课程设计报告
题
目:基于 MATLAB GUI 的数字图像
增强系统
专业名称:
电子信息工程
班
学
姓
级:
号:
名:
091
910706131
2012 年 12 月
基于 MATLAB GUI 的数字图像增强系统
摘要:GUI(Graphical User Interface)是指用图形的方式显示的计算机操作用户界面, 即人机交互图
形化用户界面设计。他极大地方便了非专业用户的使用,通过窗口、菜单、按键等方式来方便地进行操作。
本设计即采用了 MATLAB GUI 进行设计,通过菜单和快键来取代命令,方便的实现我们设计的功能,如对图
像进行各种方式的滤波,增强等运算。
关键词:MATLAB 软件 GUI 工具 菜单 滤波
1、设计的基本内容和环境条件
1.1 课程设计目的
提高分析问题、解决问题的能力,熟悉数字图像处理系统中的基本原理与方法;熟悉掌
握 MATLAB,可以进行数字图像的应用处理的开发设计。
1.2 设计的基本功能
1)图像的读取、另存为(包括格式转换)、退出。
2)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和
缩小整数倍的操作,并保存,比较几种插值的效果并进行初始图片大小的统计
3)设计图形用户界面,让用户能够对图像进行二维离散傅里叶变换和二维离散余弦变
换,图像直方图、中值滤波、频域锐化、同态滤波、锐化算法等效果的图片显示。
5)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。
1.3 设计环境
MATLAB 软件 GUI 工具。
2、方案论证
本设计采用 MATLAB 的 GUI 工具进行,通过创建菜单和快捷按钮来对图形图像进行基本
的操作,设计的主要内容包括:
2.1 最近邻插值和双线性插值
最邻近点插值取插值点的 4 个邻点中距离最近的邻点灰度值作为该点的灰度值。设插值
点(i,j)到周边 4 个邻点 fk(i,j)(k = 1,2,3,4)的距离为 dk(k = 1,2,3,4),
则:g(i,j)=fk(i,j),dl = min{d1,d2,d3,d4},l= 1,2,3,4;双线性插值[1,3]
是利用了需要处理的原始图像像素点周围的四个像素点的相关陛,通过双线眭算法计算得出
的。对于一个目的坐标,通过向后映射法得到其在原始图像的对应的浮点坐标(i+u,j+v),
其中 i,j 均为非负整数,u,v 为[0,l]区间的浮点数,则这个像素的值 f(i+u,j+v)可由
原图像中坐标为(i,j)、(i+l,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,
即: f(i+u,j+v)=(1-u)×(1-v)×f(i,j)+(1-u)×V× f(i,j+1)+u×(1-v)×f(i+l,j)+u
×v×f(i+l,j+1),其中 f(i,j)表示源图像(i,j)处的的像素值,以此类推,这就是双线
性内插值法[1]。
最近邻插值的特点是造成的空间偏移误差为 像素单位,计算简单。但当图像中的像素
灰度级有细微变化时,该方法会在图像中产生人工的痕迹。双线性插值核心思想是在两个方
向分别进行一次线性插值。
插值可以用函数 griddata 实现,其调用方法为:
griddata 调用方法:
ZI = griddata(x,y,z,XI,YI)
[XI,YI,ZI] = griddata(x,y,z,XI,YI)
[...] = griddata(...,method)
[...] = griddata(...,method,options)
method 的值 为
'linear' -- 则,以三角形为基础的线性内插(默认)
'cubic' -- 则,以三角形为基础的三次方程内插
'nearest' -- 则,用最邻近的点 内插
'v4'-- -- 则,MATLAB 4 格点样条函数内插
2.2 高通、低通滤波器
高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于
设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不
同的滤波程序(目的)而改变,而低通滤波刚与之相反。因为图像的边缘对应于高频分量,
所以要锐化图像可以使用高通滤波器。而图像中的边缘和噪声对应于傅里叶变换的中的高频
部分,所以要想在频域中消弱其影响就要设法减弱高频成分。我们根据需要选择一个合适的
H(u,v),可以得到消弱了 F(u,v)高频分量后的 G(u,v)。
2.3 噪声
噪声是造成图像退化的重要因素之一。数字图像的噪声主要来源于图像获取和传输过
程。图像传感器的工作情况受各种因素的影响,如图父获取中的环境条件和传感元器件自身
的质量,图像中的最常见的噪声有高斯噪声、瑞利噪声、伽马噪声、指数噪声、均匀噪声、
脉冲噪声等,对噪声的添加都可以通过 Matlab 函数 imnoise[2]来完成,设置相应的参数即可。
Imnoise 的主要参数及其含义;
'gaussian'
Gaussian white noise with constant mean and variance
'localva
r'Zero-mean Gaussian white noise with an intensity-dependent
variance
'poisson'
Poisson noise
'salt & pepper'
On and off pixels
'speckle'
Multiplicative noise
去除噪声则可以选择空域滤波的方法来复原,常见的空间滤波器有中值滤波,线性滤波
等。中值滤波将模板与其相对应的图像像素值相运算,相所得值进行顺序排列,并取中值做
为该模板最中间所对应的像素点的像素值。它对很多随机噪声都有良好的去噪能力,且在相
同的尺寸下比线性平滑滤波器引起的模糊更小。
2.4 图像变换
一幅静止的图像可以看成是二维的数据阵列,因此数据图像处理主要是在二维数据处
理。二维傅立叶变换的主要性质有:分离性、线性、周期性与共轭对称性、位移性、尺度变
换、旋转性等,基于分离性,二维离散 FFT 算法可以用两个一维 FFT 算法来实现[3]。Matlab
提供了 fft2 函数来计算图像的快速傅立叶变换。
离散余弦在图像压缩中广泛应用。例如,在 JPEG 图像压缩算法中,首先将输入图像划
分成 8X8 的方块,然后对每一个方块执行二维离散余弦变换,最后将变换得到的量化的 DCT
系数进行编码和传送,形成压缩的图像格式。在接收端,将量化的 DCT 系数进行解码,并对
每个 8X8 方块进行二维 IDCT,最后交操作完成后的块组合成一幅完整的图像。
2.5 图像的锐化
图像锐化则是与图像模糊相反的处理效果,其可用于提取骨干信息,有利于图像边缘检
测,边缘的处理之前。
3、设计过程
对 GUI 图形界面的处理可以分模块分步骤进行,将更有序的完成设计。
3.1 菜单设计
菜单的设计如下图 1 所示。
图 1 菜单设计
在 GUI 中的 Menu Editor 中进行菜单的设计,可以同时设定菜单的显示名称与 Tag,在
GUI 的设计窗口中菜单是不可见的,只有在运行之后才可见。
3.2 窗口设计
设计好菜单之后,进行 GUI 的窗口设计,将其分为显示模块和控制模块。为了界面的简
洁,可以将控制模块的控制按钮初始化为隐藏。在运行时,通过菜单先调出控制按钮,然后
再对图像进行处理。总体设计界面如下图 2 所示。
3.3 图像的打开、保存、退出
图 2 总体界面设计
图像保存的主要程序如下:
像 ');
%对初始打开图像对话框中的打
[filename,pathname]=uigetfile({'*.jpg
开的图像进行格式过滤
';'*.bmp';'*.tiff';'*.gif'},' 载入图
if
isequal(filename,0)|isequal(pathname,
axes(handles.axes2);
0)
imshow(x);
errordlg('no select','error');
handles.img=x;
return;
else
图像另存菜单的主要程序:
[sfilename ,sfilepath]=uiputfile({'*.j
file=[pathname,filename];
pg';'*.bmp';'*.tif';'*.*'},'±£´save',
global S
S=file;
'untitled.jpg');
x=imread(file);
if
~isequal([sfilename,sfilepath],[0,0])
set(handles.axes1,'HandleVisibility',
sfilefullname=[sfilepath ,sfilename];
'ON');
imwrite(handles.img,sfilefullname);
axes(handles.axes1);
else
imshow(x);
msgbox('cancle','failed');
set(handles.axes1,'HandleVisibility',
end
'OFF');
3.4 还原功能
在还原功能中设置一个全局变量,当打开图像后即将其值设为该图像的初始值,以后不
管对图像进行怎样的处理,都可以通过这个功能找回图像最原始的数据。其主要程序如下所
%
示:
global S
axes(handles.axes2);
y=imread(S);
f=imshow(y);
handles.img=y;
guidata(hObject,handles);
3.5 直方图
图像的直方图是图像的重要统计特征,它表示了数字图像中每一个灰度级与该灰度级出
现的频率间的统计关系。直方图提供了图像的灰度值分布情况,也就是给出了图像灰度值的
整体描述。如图 3 所示。
图 3 图像的直方图
从图中可以看出直方图的组成成分集中分布在灰度级较低的一侧,而大于 100 像素值以
上的则只有在 250 之前有一段突出的分布。说明图像总体色调偏暗,有某一小块则为鲜明的
亮色调。准确描述了左边图像所显示的情况。
3.6 频域锐化
频域锐化的主要程序如下;
global S
f1=imread(S);
f1=rgb2gray(f1);
F= double(f1);
G = fft2(F);
G = fftshift(G);
[M,N]=size(G);
nn = 2;
d0 = 5;
m = fix(M/2);
n = fix(N/2);
for i = 1 : M
d = sqrt((i-m)^2+(j-n)^2);
if (d == 0)
h = 0;
else
h=1/(1+0.414*(d0/d)^(2*nn));
end;
result(i,j) = h * G(i,j);
end;
end;
result = ifftshift(result);
J2= ifft2(result);
for j = 1 : N
J3= uint8(real(J2));
在图像的传输和变换过程中,因会受到干扰而退化。图像的锐化就是使边缘和轮廓的图
像变得清晰,使细节变得更加清晰。设计程序时先将真彩色图像用double函数转化为灰度图
像,再进行傅立叶变换,然后转换数据矩阵。使其通过二阶巴特沃斯高通滤波器,对其滤化。
交锐化后的图像与原图的灰度图像进行对比,如图4所示。
图4 滤波效果
空域和频域之间的联系是建立在卷积理论的基础之上。将图像的模板在图像中逐像素
的移动,并对每个像素进行指定数量的计算,这个过程就是卷积过程。在频域中进行增强的
主要步骤有:1、计算需增强的图像的傅立叶变换;2、将其与一个传递函数相乘;3、再将
结果进行傅立叶逆变换可以得到增强的图像。
图像的边缘检测算子有 Sobel、Roberts 等,本设计采用 Sobel 算子进行边缘检测,先
将图像转化为灰度图,进行归一化处理,再进行检测。其主要程序如下;
I=rgb2gray(Ijpg)
BW1=im2bw(I,0.95);
BW2=double(BW1);
BW3=edge(BW2,'sobel')
3.7 二维离散余弦变换
二维离散余弦变换,其主要程序如下所示;
[m,n]=size(handles.img);
d=zeros(m,n);
d(60:100,60:100)=1;
w=fft2(d);
w1=fftshift(w);
[sx,sy]=size(d);