基于MATLAB数字图像处理系统的研究与设计.docx
- 文档编号:17989247
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:43
- 大小:242.79KB
基于MATLAB数字图像处理系统的研究与设计.docx
《基于MATLAB数字图像处理系统的研究与设计.docx》由会员分享,可在线阅读,更多相关《基于MATLAB数字图像处理系统的研究与设计.docx(43页珍藏版)》请在冰点文库上搜索。
基于MATLAB数字图像处理系统的研究与设计
MATLAB数字图像处理系统的设计与研究
摘要
数学技术正处于高速发展的时期,其典型代表之一就是MATLAB,MATLAB以其强大的功能迅速成为了主流的科研软件。
本文基于MATLAB对图像处理中的经典算法进行了实验研究和分析,包括多种滤波算法和DCT变换等。
我们利用MATLAB中的GUI程序设计功能,采用贪心算法和多目标规划,开发出了一个带用户操作界面的数字图像处理系统,集成了去噪、压缩、解压、计算并显示压缩率和PSNR等功能。
同时本文着重于图像压缩,以PSNR和压缩率为标准,根据用MATLAB设计的批量处理程序进行实验得到的实验数据和实验结论,利用多目标规划方法给出了算法关键语句中的参数的最优值,为进一步利用MATLAB进行算法研究打下了基础。
关键词:
MATLABGUI数字图像处理系统压缩率PSNR
1.引言
1.1数字信号处理中的图像去噪与压缩
数字信号处理是利用计算机或专用数字处理设备等,采用数值计算的方法对信号进行处理的一门学科,它包括数据采集,以及对信号进行变换、分析、综合、滤波、估值与识别等加工处理,以便于提取信息和应用【1】。
图像处理是数字信号处理的主要应用之一,包括去噪、压缩、解压缩等处理。
现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声等干扰,由此得到的图像称为含噪图像或噪声图像。
减少数字图像中噪声的过程称为图像去噪,即尽可能地还原图像,降低图像失真程度,这对图像的传输具有重要意义。
图像压缩是指利用技术手段消除图像中的大量冗余信息,用尽可能少的字节数来表示原始数据,从而提高图像传输的效率,减少图像的存储容量。
解压则是将压缩后的图像恢复成原图像。
对图像压缩算法进行研究,设计出高效的算法,从而降低图像存储和传输的成本。
由此可见,图像处理意义十分重大,它也是人们长期研究的课题。
1.2MATLAB与数学技术
MATLAB是美国MathWorks公司出品的商业数学软件,其功能非常强大,在数值和符号计算、工程与科学绘图、模拟与仿真等方面都具有很广泛的应用。
在算法研究、模拟仿真上,MATLAB更是具有无可比拟的优越性。
通过简单的编程,就能实现算法,在MATLAB中也可以方便地调整算法中的主要参数,并能对实验数据进行统计,从而根据得到的数据对算法进行研究和改进。
MATLAB也具有GUI程序设计功能,可以用于设计便捷的用户操作界面。
MATLAB与其他优秀的数学研究软件代表了数学技术的发展水平。
1.3我们研究的问题
我们选择的是比赛中的E题:
数字信号处理中的图像压缩。
问题如下:
对一幅灰度图像,首先进行去噪处理,然后根据不同的压缩比对图像进行压缩,压缩后的图像失真要尽可能小(图像失真用峰值信噪比(PSNR)来衡量)。
系统输入:
给定的灰度图像。
系统功能:
去噪、压缩和解压。
系统输出:
包括压缩率和PSNR,同时显示压缩后的图像(所显示的图像应与原图像大小相等)。
算法质量评价:
同一图像,在相同压缩率的情况下PSNR越大越好。
我们在充分理解比赛题目与要求的基础上,进行了算法的设计,并在MATLAB环境下进行了算法的实现和模拟仿真,设计了便捷的操作界面,对算法中若干关键语句中的参数进行调整,获得出了一系列实验数据,并据此进行了算法的优化以及原因的分析。
1.4本文安排
本文先对我们设计的系统进行一个大致的介绍,包括系统的功能和特点,界面操作说明等,然后我们对系统的算法设计部分进行了详细的描述,包括算法的原理和MATLAB实现,接着我们给出了实验内容和结果,包括算法的参数调整和分析等,并分析了导致结果的原因。
最后我们对本文做了总结并分析了本系统的优缺点。
2.系统的总体设计
2.1系统的功能和特点
我们利用MATLAB的GUI(GraphicalUserInterface),设计了一个带用户操作界面的数字图像处理系统,集成了去噪、压缩、解压等功能。
用户只需点击鼠标就可以对灰度图像进行去噪和压缩解压处理,系统会显示去噪和压缩后的图像,并显示压缩比和PSNR(峰值信噪比)。
该系统设计简洁美观,界面友好,操作简单。
系统编程风格良好,有非常好的人机交互性,系统考虑到了用户在使用时可能发生的各种错误,如选择了非灰度图像或者多帧图像等,并且给出中文提示。
2.2系统界面说明
打开我们的fig文件,将看到如下操作界面1:
点击“打开图片”按钮可从电脑中选出一个灰度图像并打开,其将显示在屏幕的正中间位置,图像下方将显示图像的原始大小;再点击“去噪”按钮可对图像进行去噪处理,此时屏幕亦会显示去噪后的图像,再点击“压缩”按钮,系统将对去噪后图像进行压缩处理,得到的压缩率及PSNR值将显示在界面下方空白处,同时系统将自动保存去噪后图像(‘noise.jpg’)和压缩后图像(‘decompress.jpg’)于MATLAB的当前文件夹(CurrentFolder)中;再点“解压”按钮可显示出压缩后图像,图像下方将显示解压后图像的大小;点击“退出”按钮,系统将自动关闭屏幕上显示的一系列图片并清除掉MATLAB命令窗口(CommandWindow)中的所有内容,并关闭界面。
2.3将系统做成独立的应用程序
同时,我们还将该系统做成了一个exe文件,可以让用户在没有安装MATLAB的电脑中就能运行它,但这个的缺点是在没有安装MCR(MATLABCompilerRuntime)installer的电脑上无法运行,但其可在MATLAB的安装目录里找到,可安装好MCRinstaller后再运行该exe文件即可。
为消除执行程序时出现的DOS窗口,我们到mathworks的官网上(suppress.exe就可以执行不含DOS窗口的该数字图像处理系统。
3.系统核心算法及代码
3.1系统去噪部分算法
3.1.1图像噪声和噪声模型
图像在获取、传输和存储过程中,因为各种各样的因素,会受到一些随机信号干扰,从而发生图像不同程度失真的情况,通常把这些随机信号称为图像噪声。
噪声可以理解为妨碍人们感觉器官对所接受的信源信息理解的因素,而图像中各种妨碍人们对其信息接受的因素即可称为图像噪声。
一般情况下,图像噪声被认为是多维随机过程,对图像噪声的描述则被认为是对随机过程的描述,即用其概率分布函数和概率密度分布函数。
图像噪声有多种分类方法,但在众多分类方法中,按概率密度函数分类引入了噪声的数学模型,适用于用数学的方法进行描述和研究,也使图像去噪算法的设计变得简单可行。
按概率密度函数分类,可将图像噪声分为高斯噪声、瑞利噪声、伽马噪声、指数分布噪声、均匀分布噪声、脉冲噪声。
本论文正是基于该分类方法进行的图像去噪算法的设计和算法性能的探讨。
3.1.2重要噪声的概率分布函数【3】
(1)高斯噪声
高斯噪声又称为正态噪声,在数学上容易处理,在现实中也较为普遍。
用z表示灰度值,u表示z的平均值或期望值,σ表示z的标准差,则高斯随机变量z的概率密度函数由下式给出:
该密度函数的曲线如下:
当z服从上述分部时,其值有95%的概率落在[μ-2σ,μ+2σ]范围内
(2)脉冲噪声
脉冲噪声又称为椒盐噪声,概率密度函数如下式:
该密度函数的曲线如下:
如果b>a,则灰度值b在图像中将显示为一个亮点,反之则a的值将显示为一个暗点。
若Pa或Pb为零,则脉冲称为单极脉冲。
如果Pa和Pb均不可能为零,尤其是它们近似相等时,则脉冲噪声值将类似于随机分布在图像上的胡椒和盐粉微粒。
(3)泊松噪声
泊松噪声是指满足泊松分布的噪声。
Poisson分布概率密度函数为:
(n=0,1,2..)
其中e为自然对数的底,µ为总体均数,n为事件发生的阳性数。
该密度函数的曲线如下:
(4)其他噪声
还有其他重要的噪声分布如:
瑞利噪声、伽马噪声、指数分布噪声、均匀噪声等,因篇幅有限,不再一一赘述。
3.1.3图像去噪原理
人们通过对噪声的研究,根据实际图像的特点、噪声的统计特征和频率分布规律等,已发展出各式各样的去噪方法,如空间域滤波,变换域滤波,形态学噪声滤除器等。
从本质上讲,图像去噪的方法都是低通滤波的方法。
【4】我们对去噪算法中较经典的邻域平均滤波、中值滤波和维纳滤波进行了研究和实验。
并据此设计出系统的去噪算法。
3.1.4邻域平均法
邻域平均法的思想是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而滤除一定的噪声。
其数学含义可用下式表示:
每个邻域像素的加权系数或模板系数;mn是加权系数的个数或称为模板大小。
邻域平均法中常用的模板有3*3、5*5、7*7等,下面是领域平均法最常用的3*3模板:
邻域平均法属于线性平滑滤波,算法简单,计算速度快,对满足各分布的噪声都有较强的抑制作用,但会造成图像在一定程度上的模糊。
经过实验发现用不同模板的平滑滤波处理后图像上的噪声消失,但是图像变得模糊,并且,使用的模板越大,对图像的去噪效果越好,同时图像也变得越模糊。
我们认为这是因为算法对图像边缘也进行了处理的缘故。
而且使用的模板越大,算法对图像中的高频值(包括图像的边缘部分)越敏感。
MATLAB中实现邻域平均滤波的函数是filter2,调用格式如下:
IMAGE2=filter2(fspecial('average',3),IMAGE1)/255;
其中参数average用来指定采用邻域平均滤波,参数3表示采用的3*3模板。
3.1.5中值滤波
中值滤波是一种非线性空域滤波方法。
它是可以有效抑制图像噪声,提高图像信噪比(PSNR)的非线性滤波技术。
中值滤波的基本原理是:
设一个一维序列:
{f1,f2,…,fm}
取模板长度为奇数n,模板中的数据设为:
{fi-j,…fi,…fi+j},
其中fi为模板的中心值,j=(n-1)/2,再将这n个点的数值按其数值大小排列,取其序号为中间的那个数作为滤波输出。
其表达式为:
yi=Med{fi-j…fi…fi+j}
其中,i∈Z,j=(n-1)/2.数字图像是以二维数据来描述的,故对其滤波是对二维数据序列滤波。
类似于一维,二维中值滤波输出为:
g(x,y)=Med{f(x-k,y-l),(k,l)∈W}
其中,f(x,y),g(x,y)分别为原图像和处理后图像。
W为二维模板,通常选为3*3,5*5区域,也可选不同的形状,如线状、圆形、十字形、圆环形等。
与均值滤波器和其他线性滤波器相比,中值滤波可以很好的滤除脉冲噪声和椒盐噪声,同时能够很好的保护图像边缘轮廓的细节。
【5】
简易的中值滤波算法实现过程如下:
(1)选择一个(2n+1)*(2n+1)的窗口(一般是3*3或者5*5),使窗口沿图像数据的行方向和列方向从左至右、从上至下沿每个像素滑动。
(2)每次滑动后,对窗口内的像素灰度进行排序,并用中间值代替窗口中心位置的像素灰度值。
经过实验,中值滤波在处理椒盐噪声时表现很好,并且经过中值滤波处理后的大部分含噪图像清晰度优于邻域平均滤波。
中值滤波对于去除椒盐噪声效果明显,是因为这类噪声只在画面上的部分点随机出现,而中值滤波根据数据排序,将未被污染的点代替噪声点的值的概率较大,所以抑制效果好。
且中值滤波输出像素是由邻域图像的中间值决定的,因而中值滤波对极限像素值(与周围像素灰度值差别较大的像素)远不如平均值那么敏感,从而可以消除孤立的噪声点,又可以使图像产生较少的模糊。
MATLAB中对应二维中值滤波的函数为medfilt2,调用格式如下:
IMAGE2=medfilt2(IMAGE1);
系统默认使用3*3模板。
3.1.6维纳滤波
在图像复原领域由于维纳滤波计算量小,复原效果好,从而得到了广泛的应用和发展。
维纳滤波理论用于解决最小均方误差下的线性滤波问题。
维纳滤波器的设计目的是就是滤除按照统计方式干扰信号的噪声,主要为服从高斯分布的白噪声。
维纳滤波器具有以下一些特点:
1假设:
信号以及附加噪声都是已知频谱特性或者自相关和互相关的随机过程;
2性能标准:
最小均方差;
3能够用标量的方法找到最优滤波器。
基于以上假设,可以得知维纳滤波是建立在最小化统计准则的基础上的,它所得的结果只是平均意义上的最优。
【6】维纳滤波的一种描述如下:
从退化图像g(x,y)复原出原图像f(x,y)的估计值,噪声为n(x,y)。
用向量f、g、n来表示f(x,y)、g(x,y)、n(x,y),Q为对f的线性算子。
最小二乘方问题可看成是使形式为‖Qf‖^2的函数服从约束条件:
‖g-Hf‖^2=‖n‖^2
的最小化问题,也就是说,在约束条件‖g-Hf‖^2=‖n‖^2下求||Qf||^2的最小化而得到f的最佳估计。
【7】这种有条件的极值问题可以用拉格朗日乘数法来处理。
经过实验,维纳滤波对高斯噪声的抑制效果非常好,对于椒盐噪声等却几乎没有抑制效果。
我们认为这是由于维纳滤波的基本假设要求输入过程是广义平稳的,而这在现实生活中较难实现,比如椒盐噪声就不符合这一基本假设。
尽管如此,维纳滤波仍然是一种相当优秀的滤波算法。
MATLAB中对应二维维纳滤波函数为:
wiener2。
调用格式如下:
IMAGE2=wiener2(IMAGE1);
3.1.7系统去噪算法
经过实验研究,我们发现各种去噪方法各有优点,采用一种去噪算法难以做到对所有图像处理后都具有较好的处理效果。
为此我们决定采用贪心算法,贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。
对于我们的问题,即分别在去噪跟压缩上做到局部最优(以PSNR为标准),我们利用多种去噪算法分别对同一幅输入图像进行处理并计算PSNR,然后将处理后PSNR最大的图像作为当前输出,供压缩处理。
3.1.8去噪算法对应的核心代码
%三种滤波处理,IMAGE1为系统输入图像
K1=filter2(fspecial('average',3),IMAGE1)/255;
K2=medfilt2(IMAGE1);
K3=wiener2(IMAGE1);
%分别计算PSNR,其中psnr为自定义函数,其m文件【8】见附件2
A=psnr(K1,IMAGE1);
B=psnr(K2,IMAGE1);
C=psnr(K3,IMAGE1);
%判断并选择PSNR最大的去噪函数
D=max([A;B;C]);
ifA==D
IMAGE2=K1;
elseifB==D
IMAGE2=K2;
elseIMAGE2=K3;
end
end
%IMAGE2为系统输出
figure,imshow(IMAGE2);
3.2系统压缩部分算法
3.2.1图像压缩原理
图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。
图像数据的冗余主要表现为:
图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。
数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
3.2.2DCT变换[]
DCT变换的全称是离散余弦变换(DiscreteCosineTransform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。
若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。
压缩时,将原始图像数据分成n*n数据单元矩阵。
在此考虑将原始图像数据分成4*4,8*8,16*16三种数据单元矩阵。
然后对每一个子块进行DCT变换、量化,并对量化后的数据进行Huffman编码。
DCT变换可以消除图像的空间冗余,Huffman编码可以消除图像的信息熵冗余。
【9】
DCT变换是无损的,它只将图像从空间域转换到变换域上,使之更能有效地被编码。
对一个图像子块而言,将对变换后的系数进行量化,对系数采用“Z”字型扫描的方式处理。
这种排列方法有助于将低频非0系数置于高频系数之前,直流系数由于包含了所有图像特征中的关键部分而被单独编码。
量化后的系数经过熵编码进一步无损压缩,通常采用的是Huffman编码。
这种压缩编码方法中,图像质量的降低主要是由于对系数的量化造成,且不可恢复。
假设子图像为f(x,y),则DCT变换可以由下面的公式实现:
其中U,v=1,2,3……n-1
其中f(u,v)表示变换域的高频成分,也称为交流系数;F(0,0)表示变换域中的低频成分,也称为直流系数。
对变换结果进行分析,可以看出能量主要集中到左上角。
DCT变换具有良好的去相关特性。
在此考虑三种不同的DCT变换:
(1)4*4的DCT变换:
I=im2double(x2);
T=dctmtx(4);
dct=@(x)T*x*T';
B=blkproc(I,[44],dct);
mask=[1100
1000
0000
0000];
(2)8*8的DCT变换:
I=im2double(x2);
T=dctmtx(8);
dct=@(x)T*x*T';
B=blkproc(I,[88],dct);
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];
(3)16*16DCT变换
I=im2double(x2);
T=dctmtx(16);
dct=@(x)T*x*T';
B=blkproc(I,[1616],dct);
mask=[1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0];
因为改变了不同的掩膜,但都是使用同一种处理方式,将数据集中到左上角,随着掩膜的变大处理的过程中难度会逐渐变大,会让压缩率变大,但同样会PSNR减小,因此两者的多目标规划问题会在算法的调试与分析中详细讲解。
3.2.3Blkproc图像分块处理
对生成的DCT考虑分块处理的方法,以8*8的DCT变换为例进行说明。
在压缩的过程中为了不影响图片的观察效果,用如下代码舍弃每个块中的高频系数,达到图像压缩的目的。
B2=blkproc(B,[88],@(x)mask.*x)
3.3系统解压部分算法
3.3.1解压原理
在解码时首先得到各点的DCT系数,然后根据下面的DCT反变换即可恢复出原图像。
进行反余弦变换,得到压缩后的图象。
DCT的反变换公式为:
以8*8为例,用下述代码实现上述操作I2=blkproc(B2,[88],invdct);
4.算法的调试与分析
4.1问题的产生
在压缩算法中给出了3种不同的DCT变换,分别用4*4、8*8、16*16的掩膜进行变化,这就造成了压缩率和psnr的不同,因此产生了多目标规划问题。
我们要在压缩率尽量小的情况下,使得PSNR值尽量大。
4.1.1图像的来源
由于MATLAB自带的灰度图像较少,我们将部分自带的彩色图像批量转换成了灰度图像【10】,与MATLAB自带的灰度图像一起,放入一个文件夹中,用自制的一个图像处理系统noise(界面见下图,代码见附录3)对其进行了批量加噪处理,得到我们本次实验的图像。
由于这些灰度图像大部分加噪后以BMP格式保存下来的都变成了二值图像(binaryimage),不符合题目要求,故我们再次将图片都未以BMP格式保存
4.1.2数据的来源
用自制的compression_ratio_and_psnr程序(界面见下图,源代码见附录4)对165张含不同噪声的图像进行了批量处理,将每张图的压缩率和psnr写入excel表格进行分析。
4.2数据的处理与分析
4.2.1数据汇总
两个数据各自的总平均值如下:
压缩率:
64.44%
PSNR:
28.1151
4.2.2做总散点图并分析压缩率和PSNR的总体变化趋势
数据总量为396,由上图可见压缩率和PSNR的变化幅度不大
4.2.3评判掩膜优劣
(1)对数据分类并给出相应评分
对压缩率和PSNR取其数据的前40%定为优秀,则优秀数据的要求满足压缩率小于62.31%或psnr大于等于28.9808
对三组实验数据,我们记两项均优秀的数据得3分,只有一项为优秀的数据得1分,一项优秀都没有的数据得0分,对三种掩膜方法进行评分:
4*4:
1*3+48+23=74分
8*8:
21*3+34+110=207分
16*16:
10*3+44+58=132分
此种评判方式下8*8的掩膜效果最好
(2)比较相关系数
用x表示压缩率,用y表示PSNR。
压缩率的最小值为39.37%,最大值为89.81%,
=50.44%;
PSNR的最小值为36.5781,最大值为23.2586,
=15.3195。
在此对x、y进行无纲化多目标规划,用
、
分别表示x和y的平均值,z表示相关系数,有以下公式:
将公式带入Excel三张不同变换的表格中,做散点图并计算出
值如下:
4*4:
53.8103
8*8:
58.9964
16*16:
55.8873
此种评判方式下也是8*8的掩膜效果最好
4.3实验结果
综合上述结果不难发现选用8*8DCT变换的得分远高于其他两种,其
值高于其余DCT变化,而从压缩率与psnr的散点图看来,8*8DCT变换的分布相对集中,也处于汇总ps
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 数字图像 处理 系统 研究 设计