当前位置:文档之家› 图像jpeg及MATLAB仿真

图像jpeg及MATLAB仿真

图像jpeg及MATLAB仿真
图像jpeg及MATLAB仿真

《电视技术》三级项目

基于MATLAB的JPEG压缩算法实现

成员:赵勐 130104020008

刘帅 130104020016

董智锐 120104020028

班级:13级电子信息一班

指导教师:侯春良

燕山大学

2016年7月

摘要

现代社会,随着计算机网络、多媒体技术的发展,出现了信息大爆炸的现象。这就对图像处理技术要求越来越高。在几种有损和无损编码中,图像编码长期以来主要利用离散余弦变换(DCT)作为主要技术。本项目用Matlab实现对JPEG算法的仿真。

关键词:Matlab JPEG压缩算法离散余弦变换

前言

本项目主要目的是了解学习图像压缩方法,学习JPEG算法的基本原理,并通过使用Matlab更加深入直观了解图像压缩过程以及掌握Matlab编程。JPEG算法包括基于空间预测(DPCM)的无损压缩和基于DCT的有损压缩算法

正文

1、图像压缩方法研究的背景及意义

数字化到来使得数字图像技术得到广泛应用。相应的也使得数字图像技术得到不断的进步。在多媒体计算机系统、电子出版、视频会议、数字化图书馆等许多领域,数字图像都有着广泛的应用。但是越来越多的数据存贮、传送,巨大的信息量催生了图像编码理论,并且迅速发展。例如:从图像存储角度来说,一幅512*512像素8bit/pixel的黑白图像占256KB;一幅512*512像素8bit/pixel的彩色图像则占3*256KB;播放一小时的数字视频图像要占大约22G字节的空间,更别说现在超清蓝光视频了。从传输角度来看,压缩技术可以帮助减少传输所需带宽。因此图像数据十分必要。

图像编码,即图像压缩,就是在保证一定重构质量的前提下,通过除去图像中的冗余尽量减少比特数来表征图像信息。传统的图像编码是以香农信息论为出发点,用概率论模型来描述信源,但是他没有考虑到接受者的主观性、图像信息具体含义和重要程度,JPEG、MPEG 等就是由此产生。而新一代的基于内容的图像编码方法则补充了前者的缺陷。其中代表为小波变换。小波变化也从一开始的利用频率压缩特性发展到如今空间压缩特性。

2、算法选择

现今的图像压缩算法有:huffman编码,行程编码,预测编码,LZW编码,小波变换。(1)Huffman编码

Huffman编码是无损编码的一种,是一种基于统计特性的可变长的编码方法。

特点:对于出现概率大的符号编码成短字长的编码,对于概率小的符号,编以较长的编码。如果码字长严格按照所对应符号出现概率逆顺序排列,则平均码长一定小于其他任何符号顺序方式,这是一种最接近熵值的“最佳编码”。

优点:简单易行;缺点:解码时必须知道所使用的码表,这给存储和通信带来不便;它还依赖于原始数据的概率,这在实际应用中受到许多限制。

(2)行程编码(RLE)

特点:在给定的图像数据中寻找连续重复的数值,然后用两个字符值取代这些连续值。

优缺点:处理包含大量重复信息时可以得到很好的压缩效率,但在连续重复数据少时效果差。

(3)预测编码

特点:根据过去已编码的像素来预测当前的像素值(预测值),然后对当前的像素值与预测值之间进行编码,亦称之差分编码。

优点:可以用很少的比特表示一个差值,达到数据压缩的目的。缺点:抗御误码能力差。若有一个错码,会扩散到图像一个较大的区域。

(4)LZW压缩算法

特点:采用先进的串码压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存储数字,不存储串,提高图像的压缩率。

优点:对连续出现的相同字符组成的字符串进行压缩,而且可以对经常出现的由不同字符组成的字符串进行压缩,所以在压缩处理不同值数据串方面,LZW优于RLE。

缺点:有随机噪声图像很难压缩。

(5)小波变换

特点:它能将图像分解成交织在一起的多种尺度成分,并对不同的尺度成分采用对应粗细的时域或空域取样步长,对高频信号采用细处理,对低频信号采用粗处理,因此可以不断聚焦到对象的任意微小细节,优于傅里叶变换和盖博变换。

优点:图像压缩比高,压缩速度快。缺点:冗余度大,降噪预处理的重构图像会失去其时域特征。

综上所述:我们组选择了前三组算法研究,主要考虑到编程实现方便。

3、图像压缩方法的基本理论

JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。JPEG 算法中首先对图像进行分块处理,在对每一快进行二维离散余弦变换,变换后的系数基本不相关,且系数矩阵的能量集中在低频区,通过保留低频区部分系数,去掉高频区的部分,从而达到压缩目的,余弦变换时经典谱分析的工具,它考察的是整个时域过程中的频域特性,或者整个频域过程中的时域特性,该算法具有较强的块内去相关的能力,适于较平坦的压缩,它的特点是没有利用图像中局域间的相关特性,在压缩倍数高时,恢复图像出现明显的方块效应。

JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。例如,在DVD-Video电视图像压缩技术中,就使用JPEG 的有损压缩算法来取消空间方向上的冗余数据。为了在保证图像质量的前提下进一步提高压缩比.

JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结

合来去掉视角的冗余信息和数据本身的冗余信息。

JPEG压缩编码步骤:

1.颜色模式转换

2.采样

3.分块

4.离散余弦变换(DCT)

5.Z型扫描

6.量化

7.DC系数的差分脉冲编码

8.DC系数的中间格式转换

9.AC系数游程编码

10.AC系数中间格式转换

11.熵编码

JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同彩色空间的数据,如RGB, YCbCr和CMYK。所以彩色图像要经过灰度变换才能进行压缩。

步骤详细分析

1、颜色模式转换

JPEG采用的是YCrCb颜色空间。YCrCb颜色空间中,Y代表亮度,Cr,Cb则代表色度和饱和度,三者通常以Y,U,V来表示,即用U代表Cb,用V代表Cr。RGB和YCrCb之间的转换关系如下所示:

Y = 0.299R+0.587G+0.114B

Cb = -0.1687R-0.3313G+0.5B+128

Cr = 0.5R=0.418G-0.0813B+128

一般来说,C 值应该是一个有符号的数字, 但这里通过加上128,使其变为8位的无符号整数,从而方便数据的存储和计算。

R = Y+1.402(Cr-128)

G = Y-0.34414(Cb-128)-0.71414(Cr-128)

B = Y+1.772(Cb-128)

2、采样

研究发现,人眼对亮度变换的敏感度要比对色彩变换的敏感度高出很多。因此,我们可以认为Y分量要比Cb,Cr分量重要的多。在JPEG图片中,通常采用两种采样方式:YUV411和YUV422,它们所代表的意义是Y,Cb,Cr三个分量的数据取样比例一般是4:1:1或者4:2:2。4:1:1含义就是:在2x2的单元中,本应分别有4个Y,4个U,4个V值,用12个字节进行存储。经过4:1:1采样处理后,每个单元中的值分别有4个Y、1个U、1个V,只要用6个字节就可以存储了。这样的采样方式,虽然损失了一定的精度但也在人眼不太察觉到的范围内减小了数据的存储量,图像从这一步开始有一定的失真。

3、分块

由于后面的DCT变换是是对8x8的子块进行处理的,因此,在进行DCT变换之前必须把源图象数据进行分块。源图象中每点的3个分量是交替出现的,先要把这3个分量分开,存放到3张表中去。然后由左及右,由上到下依次读取8x8的子块,存放在长度为64的表中,即可以进行DCT变换。说明:编码时,程序从源数据中读取一个8x8的数据块后,进行DCT 变换,量化,编码,然后再读取、处理下一个8*8的数据块。

JPEG 编码是以每8x8个点为一个单位进行处理的. 所以如果原始图片的长宽不是 8 的

倍数, 都需要先补成8的倍数, 使其可以进行一块块的处理。将原始图像数据分为8*8的数据单元矩阵之后,还必须将每个数值减去128,然后一一带入DCT变换公式,即可达到DCT 变换的目的。图像的数据值必须减去128,是因为DCT公式所接受的数字范围是-128到127之间。

4、离散余弦变换

DCT(Discrete Cosine Transform,离散余弦变换),是码率压缩中常用的一种变换编码方法。DCT是先将整体图像分成N*N的像素块,然后针对N*N的像素块逐一进行DCT操作。说明:JPEG的编码过程需要进行正向离散余弦变换,而解码过程则需要反向离散余弦变换。二维正向离散余弦变换计算公式:

二维逆向离散余弦变换计算公式:

N为水平、垂直方向的像素数目,一般取值为8。8*8的二维像素块经过DCT操作之后,就得到了8*8的变换系数矩阵。这些系数,都有具体的物理含义。例如,U=0,V=0时的F(0,0)是原来的64个数据的均值,相当于直流分量。随着U,V的增加,相另外的63个系数则代表了水平空间频率和垂直空间频率分量(高频分量)的大小,多半是一些接近于0的正负浮点数,称之为交流系数AC。DCT变换后的8*8的系数矩阵中,低频分量集中在矩阵的左上角。高频成分则集中在右下角。

有图可见图像信号被分解为直流成分和一些从低频到高频的各种余弦成分。而DCT系数只表示了该种成分所占原图像信号的份额大小。恢复图像信息可以表示为F(n) = C(n)*E(n),

这里,E(n)是一个基底,C(n)是DCT系数,F(n)则是图像信号;如果考虑垂直方向的变化,那就需要一个二维的基底。

大多数图像的高频分量比较小,相应的图像高频分量的DCT系数经常接近于0,再加上高频分量中只包含了图像的细微的细节变化信息,而人眼对这种高频成分的失真不太敏感,所以,可以忽略这些高频成分,从而降低传输的数据量。所以,传送DCT变换系数的所需要的编码长度要远远小于传送图像像素的编码长度。到达接收端之后通过反离散余弦变换就可以得到原来的数据,虽然这么做有一定的失真,但人眼是可接受的,而且对这种微小的变换是不敏感的。

5、Z型扫描

DCT 将一个 8x8 的数组变换成另一个 8x8 的数组. 但是内存里所有数据都是线形存放的, 如果我们一行行的存放这 64 个数字, 每行的结尾的点和下行开始的点就不相干, 所

64 个DCT的系数值。

式,是从8*8矩阵的左上角开始,按照英文字母Z的形状进行扫描的,如下图所示:

6、量化

图像数据转换为DCT频率系数之后,还要进行量化,才能进入编码。量化阶段需要两个8*8量化矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值之后取整,即完成了量化过程。当频率系数经过量化之后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。因此,经过量化之后,所有的数据只保留了整数近似值,也就再度损失了一些数据内容。在JPEG算法中,由于对亮度和色度的精度要求不同,分别对亮度和色度采用不同的量化表。前者细量化,后者粗量化。

这两张表依据心理视觉阀制作, 对 8bit 的亮度和色度的图象的处理效果不错。量化表是控制 JPEG 压缩比的关键,这个步骤除掉了一些高频量, 损失了很多细节信息。但事实上人眼对高频信号的敏感度远没有低频信号那么敏感。所以处理后的视觉损失很小,从上面的量化表也可以看出,低频部分采用了相对较短的量化步长,而高频部分则采用了相对较长的量化步长,这样做,也是为了在一定程度上得到相对清晰的图像和更高的压缩率。另一个重要原因是所有的图片的点与点之间会有一个色彩过渡的过程,而大量的图象信息被包含在低频率空间中,经过DCT处理后, 在高频率部分, 将出现大量连续的零。

7、DC系数的差分脉冲调制编码

8*8的图像块经过DCT变换之后得到的DC系数有两个特点:

(1)系数的数值比较大

(2)相邻的8*8图像块的DC系数值变化不大

根据这两个特点,DC系数一般采用差分脉冲调制编码DPCM(Difference Pulse Code Modulation),即:取同一个图像分量中每个DC值与前一个DC值的差值来进行编码。对差值进行编码所需要的位数会比对原值进行编码所需要的位数少了很多。假设某一个8*8图像块的DC系数值为12,而上一个8*8图像块的DC系数为7,则两者之间的差值为5。

8、DC系数的中间格式计算

JPEG中为了更进一步节约空间,并不直接保存数据的具体数值,而是将数据按照位数分为16组,保存在表里面。这也就是变长整数编码VLI。即,第0组中保存的编码位数为0,其编码所代表的数字为0;第1组中保存的编码位数为1,编码所代表的数字为-1或者1......,如下面的表格所示:

前面提到的那个DC差值为5的数据,通过查找VLI可以发现,整数5位于VLI表格的第3组,因此,可以写成(3)(6)的形式,该形式,称之为DC系数的中间格式。

9、AC系数的游程编码(RLC)

量化之后的AC系数的特点是,63个系数中含有很多值为0的系数。因此,可以采用行程编码RLC(Run Length Coding)来更进一步降低数据的传输量。利用该编码方式,可以将一个字符串中重复出现的连续字符用两个字节来代替,其中,第一个字节代表重复的次数,第二个字节代表被重复的字符串。例如,(3,5)就代表字符串“555”。但是,在JPEG编码中,RLC的含义就同其原有的意义略有不同。在JPEG编码中,假设RLC编码之后得到了一个(M,N)的数据对,其中M是两个非零AC系数之间连续的0的个数(即,行程长度),N 是下一个非零的AC系数的值。采用这样的方式进行表示,是因为AC系数当中有大量的0,而采用Z扫描也会使得AC系数中有很多连续的0的存在,如此一来,便非常适合于用RLC 进行编码。

例如,现有一个字符串,如下所示:

55,0,42,0,0,0,18,0,-15,-6,0,0,0,2,000.....

经过RLC之后,将呈现出以下的形式:

(0,55) ; (,1,42) ; (3,18) ; (1,-15) ; (0,-6) ; (3,2) ; (0,0)

说明:如果AC系数之间连续0的个数超过16,则用一个扩展字节(15,0)来表示16连续的0。

10、C系数的中间格式

根据前面提到的VLI表格,对于前面的字符串: (0,55) ; (,1,42) ; (3,18) ; (1,-15) ; (0,-6) ; (3,2) ; (0,0)

只处理每对数右边的那个数据,对其进行VLI编码: 查找上面的VLI编码表格,可以发现,55在第6组当中,因此,可以将其写成(0,6),55的形式,该形式,称之为AC系数的中间格式。

同样的(1,42)的中间格式为:(1,6),42;

11、熵编码

在得到DC系数的中间格式和AC系数的中间格式之后,为进一步压缩图象数据,有必要对两者进行熵编码。JPEG标准具体规定了两种熵编码方式:Huffman编码和算术编码。JPEG 基本系统规定采用Huffman编码。

Huffman编码:对出现概率大的字符分配字符长度较短的二进制编码,对出现概率小的字符分配字符长度较长的二进制编码,从而使得字符的平均编码长度最短。Huffman编码的原理为最优二叉树。

Huffman编码时DC系数与AC系数分别采用不同的Huffman编码表,对于亮度和色度也采用不同的Huffman编码表。因此,需要4张Huffman编码表才能完成熵编码的工作。具体的Huffman编码采用查表的方式来高效地完成。然而,在JPEG标准中没有定义缺省的Huffman 表,用户可以根据实际应用自由选择,也可以使用JPEG标准推荐的Huffman表。或者预先定义一个通用的Huffman表,也可以针对一副特定的图像,在压缩编码前通过搜集其统计特征来计算Huffman表的值。下面举例来说明8*8图像子块经过DCT及量化之后的处理过程:假设一个图像块经过量化以后得到以下的系数矩阵:

12 0 -1 0 0 0 0 0

-2 -1 0 0 0 0 0 0

-1 -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

显然,DC系数为15,假设前一个8*8的图像块的DC系数量化值为9,则当前DC系统同上一个DC系数之间的差值为3,通过查找VLI编码表,可以得到DC系数的中间格式为(2)(3),这里的2代表后面的数字(3)的编码长度为2位;之后,通过Zigzag扫描之后,遇到第一个非0的AC系数为-2,遇到0的个数为1,AC系数经过RLC编码后可表示为(1,-2),通过查找VLI表发现,-2在第2组,因此,该AC系数的中间格式为(1,2)-2;

其余的点类似,可以求得这个8*8子块熵编码的中间格式为

(DC)(2)(3);AC(1,2)(-2),(0,1)(-1),(0,1)(-1),(0,1)(-1),(2,1)(-1),(EOB)(0,0)

对于DC系数的中间格式(2)(3)而言,数字2查DC亮度Huffman表得到011,数字3通过查找VLI编码表得到其被编码为11;

对于AC系数的中间格式(1,2)(-2)而言,(1,2)查AC亮度Huffman表得到11011,-2通过查找VLI编码表得到其被编码为01;

对于AC系数的中间格式(0,1)(-1)而言,(0,1)查AC亮度Huffman表得到00,数字-1通过查找VLI编码表得到其被编码为0;

对于AC系数的中间格式(2,1)(1)而言,(2,1)查AC亮度Huffman表得到11100,数字-1通过查找VLI编码表得到其被编码为0;

对于AC系数的中间格式(0,0)而言,查AC亮度Huffman表得到1010;

因此,最后这个8*8子块亮度信息压缩后的数据流为01111,1101101,000,000,000,111000,1010。总共31比特,其压缩比是64*8/31=16.5,大约每个像素用半个比特。

4、图像压缩算法设计

算法设计基于上述原理理论

3.1 为量化因子,默认值为1,决定了截去系数和压缩比,增加quality 的值,可增加压缩比,使压缩编码后的图像存储空间更小。

代码如下:

quality = input('请输入量化参数(数值型,默认为1)= ');

if isempty(quality)

quality =1;

end

if quality <= 0

error('请输入大于0的数字!');

End

3.2 获取图像

采用Imread格式

I=imread('F:\use\f1.jpg')

3.3 DCT 变换

因为原始图像为彩色图像所以先进行灰度变换

myImage=rgb2gray(I);

再进行图像数据双精度转换

OriginalImage=double(myImage);

为了计算压缩比先测算原图大小

[am,an]=size(OriginalImage);

为方便数据的存储计算,原图像素层次-128

ImageSub=OriginalImage-128;

最后调用dct函数,得到变换矩阵

fun1=@dct2;

DTCM=blkproc(ImageSub,[8,8],fun1);

3.4 量化

调用量化表,进行8*8变换,得到量化后的量化矩阵

Q=[16 11 10 16 24 40 51 61

12 12 14 19 26 58 60 55

14 13 16 24 40 57 69 56

14 17 22 29 51 87 80 62

18 22 37 56 68 109 103 77

24 35 55 64 81 101 113 92

49 64 78 87 103 121 120 101

72 92 95 98 112 100 103 99]*quality;% 亮度量化表

DTCM_Q=blkproc(DTCM,[8,8],'round( x./P1)',Q);

3.5 Z形扫描

先将每个8*8 数据块的量化系数排成列向量,得到64* 数据块总数大小的矩阵DTCM_Q_col。再得到DTCM_Q_col的列数,即数据块的个数Num_col。

DTCM_Q_col=im2col(DTCM_Q,[8,8],'distinct');

Num_col=size(DTCM_Q_col,2);

最后用z 型扫描方式对变换系数重新排列

orderM=[1 9 2 3 10 17 25 18 ...

11 4 5 12 19 26 33 41 ...

34 27 20 13 6 7 14 21 ...

28 35 42 49 57 50 43 36 ...

29 22 15 8 16 23 30 37 ...

44 51 58 59 52 45 38 31 ...

24 32 39 46 53 60 61 54 ...

47 40 48 55 62 63 56 64];

DTCM_Q_colZ=DTCM_Q_col(orderM,:);

3.6 编码

编码分为直流编码和交流编码

先进行直流编码;

3.6.1直流编码

先编直流系数表和直流差值表,然后将他们放入进一个矢量

dc=zeros(Num_col,1); %直流系数表

dcdpcm=zeros(Num_col,1); %直流差值表

for j=1:Num_col

dc(j)=DTCM_Q_colZ(1,j); % 将DC 系数排列到一个矢量中

end

再求dc系数dpcm编码

dcdpcm(1)=dc(1);

for j=2:Num_col

dcdpcm(j)=dc(j)-dc(j-1); % 求DC 系数的DPCM 编码

End

最后一步为Huffman编码,但先要求其的统计特性,形成编码表后,才进行编码

dcdmax=max(dcdpcm); %最大直流

dcdmin=min(dcdpcm); %最小直流

dch=histc(dcdpcm,[dcdmin:dcdmax]); %统计各个值的直方图

dcnum=length(dcdpcm);

dcp=dch/dcnum; %计算各个值的概率

dcsymbols=[dcdmin:dcdmax]; %直流分量值

[dcdict,dcavglen]=huffmandict(dcsymbols,dcp); %生成字典dcdict,计算平均码长dcencoded=huffmanenco(dcdpcm,dcdict); % 对DC 系数的DPCM 进行Huffman 编码,得到直流编码dcencoded

3.6.2交流编码

将非零AC元素重新排列放到ac中,每一列均以eob 作为结束,共有count个非零元素

eob=max(ImageSub(:))+1;% 创建一个块结束符号

num=numel(DTCM_Q_colZ)+size(DTCM_Q_col,2);

ac=zeros(num,1);

count=0;

for j=1:Num_col

i=max(find(DTCM_Q_colZ(:,j)));%find 函数为寻找yy 函数中非零元素的位置,max 函数为取里面的最大值,若无非零元素或者为空,返回empty

if isempty(i)

i=1;

end

p=count+1;

q=p+i-1;

if i==1

ac(q)=eob;

end

ac(p:q)=[DTCM_Q_colZ(2:i,j);eob];

count=q;

end

最后一步为Huffman编码,但先要求其的统计特性,形成编码表后,才进行编码

ac((count+1):end)=[];% 删除ac中的无用元素

acmax=max(ac); %最大交流

acmin=min(ac); %最小交流

ach=histc(ac,(acmin:acmax)); %统计各个值的直方图

acnum=length(ac);

acp=ach/acnum; %计算各个值的概率

acsymbols=[acmin:acmax]; %交流分量值

[acdict,acavglen]=huffmandict(acsymbols,acp); %生成字典dcdict,计算平均码长acencoded=huffmanenco(ac,acdict); % 对AC 系数进行Huffman编码,得到交流编码acencoded

3.7解码

分为直流解码和交流解码

先直流解码

3.7.1直流解码

先Huffman解码,再根据直流解码恢复直流分量,并放入DTCM_Q_colZ_Rec的第一行dcdecoded=huffmandeco(dcencoded,dcdict);

DTCM_Q_colZ_Rec(1,1)=dcdecoded(1);

for i=2:Num_col

DTCM_Q_colZ_Rec(1,i)=DTCM_Q_colZ_Rec(1,i-1)+dcdecoded(i);

end

3.7.2交流解码

先Huffman解码,再根据交流解码恢复交流分量,放入DTCM_Q_colZ_Rec的第2-64行acdecoded=huffmandeco(acencoded,acdict);

j=1; %j用来记录第几列

k=2; %k用来记录第几行

maxk=1;

count=0; %count用来记录连续不等于eob的个数,当count=63时,下一个eob仅作为结束符,不解码。

for i=1:size(acdecoded)

if acdecoded(i)==eob

DTCM_Q_colZ_Rec(k:64,j)=0;

j=j+1;

k=2;

else

DTCM_Q_colZ_Rec(k,j)=acdecoded(i);

k=k+1;

end

end

3.8反Z型解码

利用一个反Z的扫描表,再用反z 型扫描方式对变换系数重新排列,还原图像大小。order2M=[

1 3 4 10 11 21 2

2 36

2 5 9 12 20 2

3 35 37

6 8 13 19 24 34 38 49

7 14 18 25 33 39 48 50

15 17 26 32 40 47 51 58

16 27 31 41 46 52 57 59

28 30 42 45 53 56 60 63

29 43 44 54 55 61 62 64];

DTCM_Q_col_Rec=DTCM_Q_colZ_Rec(order2M,:); %用反z 型扫描方式对变换系数重新排列DTCM_Q_Rec=col2im(DTCM_Q_col_Rec,[8,8],[am,an],'distinct'); % 将DTCM_Q_col_Rec 的每个列向量排成8*8数据块,将矩阵变为图像size。

3.9反量化

DTCM_Rec=blkproc(DTCM_Q_Rec,[8,8],'round( x.*P1)',Q);

3.10反DCT变换

fun2=@idct2;

ImageSub_Rec=blkproc(DTCM_Rec,[8,8],fun2);% 使用idct2函数进行二维反DCT变换,得到ImageSub_Rec

ReImage=double(ImageSub_Rec)+128;

3.11输出压缩后原图,但只能显示为灰色

subplot(1,2,1);

imagesc(I);

colormap(gray);

title('原始图像');

subplot(1,2,2);

imagesc(ReImage);

colormap(gray);

3.12压缩性能的计算

3.12.1压缩时间

利用toc和tic 可以计算压缩和解压时间

3.12.2编码长度

AC和DC的编码长度

encoded_lenght=numel(dcencoded)+numel(acencoded);

3.12.3编码比特率

每个像素所占的比特数

AverageBit=encoded_lenght/(am*an);

3.12.4压缩比

cr=am*an*8/encoded_lenght

3.12.5峰值信噪比

e=double(myImage)-double(ReImage);

MSE=sqrt(sum(e(:).^2)/(an*am)); % 均方误差:指参数估计值与参数真值之差平方的期望值,记为MSE

PSNR=10*log(255*255/MSE)/log(10); %计算峰值信噪比(dB)

至此分析完毕

5、MATLAB 仿真

f1

f2

f3

结论(1)由上表,图像大小越大,压缩时间越长,解压时间越长,压缩比越小,编码比特

率越大。

(2)图像经过压缩后,会有一定的失真,失真程度用峰值信噪比来衡量,可以看出,信噪比值较大,失真度较小,即压缩效果好。

结论:(1)由上表,给定图像,控制变量量化系数Q.Q 越大,压缩时间越长,解压时间越长,压缩比越大,编码比特率越小。

(2)图像的峰值信噪比差别不大,所以失真度基本相同,人眼看上去无区别。

5、图像压缩算法性能分析

评价图像压缩算法性能参数主要有三个:图像质量、压缩效率、计算复杂度。

图像质量

评价准则主要是图像的可读性,因为图像就是要让人欣赏观看的,所以最主要的还是人眼看上去的直观感受。另外还有客观评价方法。定义了这样的公式: 均方误差:

M ,N 为图像宽和高。中括号内为原始图像的灰度值与重构图像的灰度值之差。 峰值信噪比:

MSE

PSNR 255

*255log 1010

=

从公式上也不难理解,MSE 越小,PSNR 越大图像质量越好。这与上面比较所得结果也是一致的。

压缩效率

定义压缩比为原始图像的平均码长与压缩后图像的平均码长:c

L L C =

压缩效率还可以用比特率来表征。压缩比越大或比特率越低,则压缩率越高。

总结

在做这个JPEG 算法设计时,我和我和组员查阅了的大量资料,对基于DCT 编码的JPEG 算法有了深刻的认识,我觉得最难攻克的是MATLAB 仿真,我们参照别人的步骤模仿,然后一一对应对应JPEG 算法步骤,一点一滴的搭建起整个平台。我们大概花了5天编程,改程序,再编,最终完成了仿真程序。第一点体会是MATLAB 编程不似众人所认为的那样简单;第二点是用MA TLAB 仿真误差较小,实验的精度和可靠性大大提高。

()()[]

2

1010

,,1

∑∑-=-='-=

M i N j j i f j i f MN

MSE

参考文献

王文娟、陶杰、荆娜基于MATLAB的JPEG图像压缩标准的仿真实现[期刊论文]-中国科技信息

俞斯乐主编电视原理(第6版)国防工业出版社

图像峰值信噪比的计算https://www.doczj.com/doc/c911655191.html,/p-232369488.html

黄伟、龚沛曾图像压缩中的几种编码方法[期刊论文]-中国科技信息

分工

赵勐组长负责代码和仿真 40%

刘帅组员负责算法和PPT制作 35%

董智锐组员负责查阅资料的报告撰写25%

附录

clear all;

%设定量化因子quality。

%quality 为量化因子,默认值为1。决定了截去的系数和压缩比,增加quality 的值,可增大压缩比,使压缩编码后的图像占用存储空间更小。

quality = input('请输入量化参数(数值型,默认为1)= ');

if isempty(quality)

quality =1;

end

if quality <= 0

error('请输入大于0的数字!');

end

%1.获取图像

tic %计算压缩时间

I=imread('F:\use\f1.jpg');

基于Matlab基本图像处理程序

图像读入 ●从图形文件中读入图像 imread Syntax: A = imread(filename, fmt) filename:指定的灰度或彩色图像文件的完整路径和文件名。 fmt:指定图形文件的格式所对应的标准扩展名。如果imread没有找到filename所制定的文件,会尝试查找一个名为filename.fmt的文件。 A:包含图像矩阵的矩阵。对于灰度图像,它是一个M行N列的矩阵。如果文件包含 RGB真彩图像,则是m*n*3的矩阵。 ●对于索引图像,格式[X, map] = imread(filename, fmt) X:图像数据矩阵。 MAP:颜色索引表 图像的显示 ●imshow函数:显示工作区或图像文件中的图像 ●Syntax: imshow(I) %I是要现实的灰度图像矩阵 imshow(I,[low high],param1, val1, param2, val2,...) %I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数 imshow(RGB) imshow(BW) imshow(X,map) %map颜色索引表 imshow(filename) himage = imshow(...) ●操作:读取并显示图像 I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据 imshow(I);%显示原图像 图像增强 一.图像的全局描述 直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。 图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。 灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图 像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。 归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像

基于DCT的数字图像压缩及Matlab实现

实验三基于DCT的数字图像压缩及Matlab实现兰州大学信息学院08级通信工程一班赵军伟 一、课程设计的目的和要求等内容 实验目的:掌握基于DCT变换的图像压缩的基本原理及其实现步骤;通过使用MATLAB,对同一幅原始图像进行压缩,进一步掌握DCT和图像压缩。 实验要求: 1、学生在实验操作过程中自己动手独立完成,2人为1组。 2、上机过程中由指导老师检查结果后方可做其他内容。 3、完成实验报告:按照实验的每个题目的具体要求完成 二、基本原理或方法 (一)图像压缩基本原理 图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。压缩技术分为无损压缩和有损压缩两大类,前者在解码时可以精确地恢复原图像,没有任何损失;后者在解码时只能近似原图像,不能无失真地恢复原图像。 假设有一个无记忆的信源,它产生的消息为{ai},1≤i≤N,其出现的概率是已知的,记为P(ai)。则其信息量定义为: 由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的贡献量越大,反之亦然。 信源的平均信息量称为“熵”(entropy),可以表示为: 对上式取以2为底的对数时,单位为比特(bits):

根据香农(Shannon)无噪声编码定理,对于熵为H的信号源,对其进行无失真编码所可能达到的最低比特数为,这里为一任意小的正数,因此可能达到的最大压缩比为: 其中B是原始图像的平均比特率。 在图像压缩中,压缩比是一个重要的衡量指标。可以定义压缩比为: (二)图像压缩的基本模型 图像编码包括两个阶段,前一个阶段就是利用预测模型或正交模型对图像信号进行变换;后一个阶段是利用已变换信号的统计特性,对其分配适当的代码来进行编码传输。 编码器与解码器的结构分别如图(a)、(b)。 在发送端,输入的原始图像首先经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图像的主要信息,而高频分量与之相比就不那么重要了,所以可以忽略高频分量,从而达到压缩的目的。将高频分量去掉就要用到量化,这是产生信息损失的根源。 “量化”的主要任务是用有限个离散电平来近似表达已抽取出的信息。在此采用均匀量化,通过改变程序中的量化因子Q的值以得到不同压缩比的图像。Huffman编码时,首先对经DCT变换及量化后的图像收据扫描一遍,计算出各种像素出现的概率;然后按概率的大小指定不同长度的唯一码字,由此得到一张Huffman表。编码后的图像记录的是每个像素的码字,而码字与量化后像素值的对应关系记录在码表中。生成的一维字符矩阵即为实际中要传输的序列,压缩后

数字图像平滑滤波在MATLAB上的实现

第 5 章图像平滑滤波在MATLAB上的实现 本课程设计在MATLAB上实现的程序和结果 I=imread('b.bmp'); v=0.5*ones(size(I)); I1=imnoise(I,'localvar',v); I2=imnoise(I,'salt & pepper',0.02); I3=imnoise(I,'speckle',0.02); figure; subplot(221); hold on; title('原图像'); imshow(I); hold off; subplot(222); hold on; title('受高斯噪声污染的图像'); imshow(I1); hold off; subplot(223); hold on; title('受椒盐噪声污染的图像'); imshow(I2); hold off; subplot(224); hold on; title('受乘性噪声污染的图像'); imshow(I3); hold off;

原图像受高斯噪声污染的图像 受椒盐噪声污染的图像受乘性噪声污染的图像 h=ones(3,3)/9; J1=imfilter(I1,h); J2=imfilter(I2,h); J3=imfilter(I3,h); figure; subplot(221); hold on; title('原图像'); imshow(I); hold off; subplot(222); hold on; title('对有高斯噪声的3*3邻域平均后的图像'); imshow(J1); hold off; subplot(223); hold on; title('对有椒盐噪声的3*3邻域平均后的图像'); imshow(J2); hold off; subplot(224); hold on; title('对有乘性噪声的3*3邻域平均后的图像'); imshow(J3);

基于matlab的图像识别与匹配

基于matlab的图像识别与匹配 摘要 图像的识别与匹配是立体视觉的一个重要分支,该项技术被广泛应用在航空测绘,星球探测机器人导航以及三维重建等领域。 本文意在熟练运用图像的识别与匹配的方法,为此本文使用一个包装袋并对上面的数字进行识别与匹配。首先在包装袋上提取出来要用的数字,然后提取出该数字与包装袋上的特征点,用SIFT方法对两幅图进行识别与匹配,最终得到对应匹配数字的匹配点。仿真结果表明,该方法能够把给定数字与包装袋上的相同数字进行识别与匹配,得到了良好的实验结果,基本完成了识别与匹配的任务。

1 研究内容 图像识别中的模式识别是一种从大量信息和数据出发,利用计算机和数学推理的方法对形状、模式、曲线、数字、字符格式和图形自动完成识别、评价的过程。 图形辨别是图像识别技术的一个重要分支,图形辨别指通过对图形的图像采用特定算法,从而辨别图形或者数字,通过特征点检测,精确定位特征点,通过将模板与图形或数字匹配,根据匹配结果进行辨别。 2 研究意义 数字图像处理在各个领域都有着非常重要的应用,随着数字时代的到来,视频领域的数字化也必将到来,视频图像处理技术也将会发生日新月异的变化。在多媒体技术的各个领域中,视频处理技术占有非常重要的地位,被广泛的使用于农业,智能交通,汽车电子,网络多媒体通信,实时监控系统等诸多方面。因此,现今对技术领域的研究已日趋活跃和繁荣。而图像识别也同样有着更重要的作用。 3 设计原理 3.1 算法选择 Harris 角点检测器对于图像尺度变化非常敏感,这在很大程度上限制了它的应用范围。对于仅存在平移、旋转以及很小尺度变换的图像,基于Harris 特征点的方法都可以得到准确的配准结果,但是对于存在大尺度变换的图像,这一类方法将无法保证正确的配准和拼接。后来,研究人员相继提出了具有尺度不变性的特征点检测方法,具有仿射不变性的特征点检测方法,局部不变性的特征检测方法等大量的基于不变量技术的特征检测方法。 David.Lowe 于2004年在上述算法的基础上,总结了现有的基于不变量技术的特征检测方法,正式提出了一种基于尺度空间的,对图像平移、旋转、缩放、甚至仿射变换保持不变性的图像局部特征,以及基于该特征的描述符。并将这种方法命名为尺度不变特征变换(Scale Invariant Feature Transform),以下简称SIFT 算法。SIFT 算法首先在尺度空间进行特征检测,并确定特征点的位置和特征点所处的尺度,然后使用特征点邻域梯度的主方向作为该特征点的方向特征,以实现算子对尺度和方向的无关性。利用SIFT 算法从图像中提取出的特征可用于同一个物体或场景的可靠匹配,对图像尺度和旋转具有不变性,对光照变化、

基于DCT的图像压缩及Matlab实现

通信专业课程设计一 太原科技大学 课程设计(论文) 设计(论文)题目:基于DCT的图像压缩及Matlab实现 姓名____ 学号_ 班级_ 学院____ 指导教师____ 2010年12月31日

太原科技大学课程设计(论文)任务书 学院(直属系):时间: 学生姓名指导教师 设计(论文)题目基于DCT的图像压缩及Matlab实现 主要研究内容 掌握DCT变换实现图像压缩的基本方法,在不损害图像信源的有效信息量的情况下保证图像的质量,在MATLAB环境中进行图像压缩技术的仿真,并对仿真结果进行分析。 研究方法 主要运用实验法与观察法,通过编写程序实现对图像的DCT变换,观察图像结果进而实现对DCT变换的研究。 主要技术指标(或研究目标) 利用DCT变换编码方法进行图像压缩,提高信息传输的有效性及通信质量。 教研室 意见 教研室主任(专业负责人)签字:年月日

目录 摘要.............................................................................................................................................II 第1章绪论. (1) 第2章DCT变换概述 (2) 2.1DCT函数介绍 (2) 2.2DCT变换介绍 (2) 2.2.1DCT变换原理 (2) 2.2.2DCT变换编码的步骤 (3) 第3章程序运行及结果分析 (5) 3.1程序代码 (5) 3.2运行结果分析 (7) 第4章结论 (11) 参考文献 (12)

MATLAB实现频域平滑滤波以及图像去噪代码

用MATLAB实现频域平滑滤波以及图像去噪代码 悬赏分:50 - 解决时间:2008-11-8 14:21 是数字图象处理的实验,麻烦高人给个写好的代码,希望能在重要语句后面附上一定的说明,只要能在MATLAB上运行成功,必然给分。具体的实验指导书上的要求如下: 频域平滑滤波实验步骤 1. 打开Matlab 编程环境;

2. 利用’imread’函数读入图像数据; 3. 利用’imshow’显示所读入的图像数据; 4. 将图像数据由’uint8’格式转换为’double’格式,并将各点数据乘以 (-1)x+y 以便FFT 变换后的结果中低频数据处于图像中央; 5. 用’fft2’函数对图像数据进行二维FFT 变换,得到频率域图像数据; 6. 计算频率域图像的幅值并进行对数变换,利用’imshow’显示频率域图 像; 7. 在频率图像上去除滤波半径以外的数据(置0); 8. 计算频率域图像的幅值并进行对数变换,利用’imshow’显示处理过的 频域图像数据; 9. 用’ifft2’函数对图像数据进行二维FFT 逆变换,并用’real’函数取其实部,得到处理过的空间域图像数据; 10. 将图像数据各点数据乘以(-1)x+y; 11. 利用’imshow’显示处理结果图像数据; 12. 利用’imwrite’函数保存图像处理结果数据。 图像去噪实验步骤: 1. 打开Matlab 编程环境; 2. 利用’imread’函数读入包含噪声的原始图像数据; 3. 利用’imshow’显示所读入的图像数据; 4. 以3X3 大小为处理掩模,编写代码实现中值滤波算法,并对原始噪声 图像进行滤波处理; 5. 利用’imshow’显示处理结果图像数据; 6. 利用’imwrite’函数保存图像处理结果数据。 即使不是按这些步骤来的也没关系,只要是那个功能,能实现就OK,谢谢大家 %%%%%%%%spatial frequency (SF) filtering by low pass filter%%%%%%%% % the SF filter is unselective to orientation (doughnut-shaped in the SF % domain). [FileName,PathName,FilterIndex] = uigetfile ; filename = fullfile(PathName, FileName) ; [X map] = imread(filename, fmt); % read image L = double(X); % transform to double %%%%%%%%%%%%% need to add (-1)x+y to L % calculate the number of points for FFT (power of 2) fftsize = 2 .^ ceil(log2(size(L))); % 2d fft Y = fft2(X, fftsize(1), fftsize (2));

(完整版)数字图像处理MATLAB程序【完整版】

第一部分数字图像处理

实验一图像的点运算 实验1.1 直方图 一.实验目的 1.熟悉matlab图像处理工具箱及直方图函数的使用; 2.理解和掌握直方图原理和方法; 二.实验设备 1.PC机一台; 2.软件matlab。 三.程序设计 在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。 I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 四.实验步骤 1. 启动matlab 双击桌面matlab图标启动matlab环境; 2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像, 如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出; 五.实验结果 观察图像matlab环境下的直方图分布。 (a)原始图像 (b)原始图像直方图 六.实验报告要求 1、给出实验原理过程及实现代码; 2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。

实验1.2 灰度均衡 一.实验目的 1.熟悉matlab图像处理工具箱中灰度均衡函数的使用; 2.理解和掌握灰度均衡原理和实现方法; 二.实验设备 1.PC机一台; 2.软件matlab; 三.程序设计 在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。 I=imread('cameraman.tif');%读取图像 subplot(2,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(2,2,3),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 a=histeq(I,256); %直方图均衡化,灰度级为256 subplot(2,2,2),imshow(a) %输出均衡化后图像 title('均衡化后图像') %在均衡化后图像中加标题 subplot(2,2,4),imhist(a) %输出均衡化后直方图 title('均衡化后图像直方图') %在均衡化后直方图上加标题 四.实验步骤 1. 启动matlab 双击桌面matlab图标启动matlab环境; 2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像, 如:cameraman图像;再调用相应的灰度均衡函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出; 五.实验结果 观察matlab环境下图像灰度均衡结果及直方图分布。 (a)原始图像 (b)均衡化后图像

最常用的matlab图像处理的源代码

最常用的一些图像处理Matlab源代 码 #1:数字图像矩阵数据的显示及其傅立叶变换 #2:二维离散余弦变换的图像压缩 #3:采用灰度变换的方法增强图像的对比度 #4:直方图均匀化 #5:模拟图像受高斯白噪声和椒盐噪声的影响 #6:采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波 #7:采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波 #8:图像的自适应魏纳滤波 #9:运用5种不同的梯度增强法进行图像锐化 #10:图像的高通滤波和掩模处理 #11:利用巴特沃斯(Butterworth)低通滤波器对受噪声干扰的图像进行平滑处理 #12:利用巴特沃斯(Butterworth)高通滤波器对受噪声干扰的图像进行平滑处理 1.数字图像矩阵数据的显示及其傅立叶变换 f=zeros(30,30); f(5:24,13:17)=1; imshow(f, 'notruesize'); F=fft2(f,256,256); % 快速傅立叶变换算法只能处矩阵维数为2的幂次,f矩阵不 % 是,通过对f矩阵进行零填充来调整 F2=fftshift(F); % 一般在计算图形函数的傅立叶变换时,坐标原点在 % 函数图形的中心位置处,而计算机在对图像执行傅立叶变换 % 时是以图像的左上角为坐标原点。所以使用函数fftshift进 %行修正,使变换后的直流分量位于图形的中心; figure,imshow(log(abs(F2)),[-1 5],'notruesize');

2 二维离散余弦变换的图像压缩I=imread('cameraman.tif'); % MATLAB自带的图像imshow(I); clear;close all I=imread('cameraman.tif'); imshow(I); I=im2double(I); T=dctmtx(8); B=blkproc(I,[8 8], 'P1*x*P2',T,T'); Mask=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 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]; B2=blkproc(B,[8 8],'P1.*x',Mask); % 此处为点乘(.*) I2=blkproc(B2,[8 8], 'P1*x*P2',T',T); figure,imshow(I2); % 重建后的图像 3.采用灰度变换的方法增强图像的对比度I=imread('rice.tif'); imshow(I); figure,imhist(I); J=imadjust(I,[0.15 0.9], [0 1]); figure,imshow(J); figure,imhist(J);

图像平滑方法综述与MATLAB实现之欧阳家百创编

江苏科技大学 数字图像处理本科生课程论文 论文题目:图像平滑方法综述与MATLAB实现完成时间:11月20日 所在专业:信息与计算科学

图像平滑方法综述与MATLAB实现 摘要:在图像的生成、传输或变换的过程中,由于多种因素的影响,总要造成图像质量的下降,这就需要进行图像增强。随着图像处理领域的迅速发展,图像平滑作为图像增强的重要环节,也逐渐受到人们的关注。图像平滑的目的为了消除噪声。图像平滑可以在空间域进行,也可以在频率域进行。空间域常用的方法有领域平均法、中值滤波和多图像平均法;在频率域,因为噪声频谱多在高频段,因此可以采用各种形式的低通滤波方法进行平滑处理。 关键词:图像平滑;消除噪声;领域平均法;中值滤波;低通滤波法……… 1 研究背景 总所周知,实际获得的图像在形成、传输接收和处理的过程中,不可避免地存在着外部干扰和内部干扰,如光电转换过程中敏感元件灵敏度的不均匀性、数字化过程中的量化噪声、传输过程中的误差以及人为因素等,均会使图像质量变差,需要进行图像的平滑处理。 图像平滑是一种实用的熟悉图像处理技术,一个较好的平滑处理方法应该既能消除图像噪声,又不使图像边缘轮廓和线条变模糊,这就是研究数字图形平滑处理要追求的目标。 2.主要理论概况 2.1 邻域平均法 邻域平均法就是对含噪声的原始图像的每一个像素点取一个邻域,计算中所有像素灰度级的平均值,作为邻域平均处理后的图像的像素值。即 式中, ),为邻域中像素的点数。

是预先设定的阈值,当某些点的灰度值与其邻域点灰度平均值之差不超过阈值式中, 时,仍保留这些点的灰度值。当某些点的灰度值与其邻点灰度的均值差别较大时,这些点必然是噪声,这时再取其邻域平均值作为这些点的灰度点。这样平滑后的图像比单纯的进行邻域平均后的图像要清晰一些,平滑效果仍然很好。 2.2 中值滤波 中值滤波是一种非线性处理技术,由于它在实际运算过程中并不需要知道图像的统计特性,所以比较方便。中值滤波最初是应用在一维信号处理技术中,后来被二维的图像处理技术所引用。在一定条件下,中值滤波可以克服线性滤波器所带来的图像细节模糊,而且对滤波除脉干扰及图像扫描噪声非常有效。但是对一些细节多,特别是点、线、尖顶较多的图像则不宜采用中值滤波的方法。中值滤波的目的是保护图像边缘的同时去除噪声。 2.2.1 中值滤波的主要原理 中值滤波实际上就是用一个含有奇数个像素的滑动窗口,将窗口正中点的灰度值用窗口内各点的中值代替。例如若窗口长度为5,窗口中像素的灰度值分别为80、90、200、110、120,则中值为110,于是原来窗口正中的200就由110代替。 设有一个一维序列,用窗口长度为m(m为奇数)的窗口对该序列进行中值 滤波,就是从序列中相继抽出m 个数其中为窗口中心值,,再将这m个点的值按其数值大小排列,取其序号为正中间的那个值作为滤波器的输出。用数学公式可表示为 对二维序列进行中值滤波时,滤波窗口也是二维的,只不过这种二维窗口可以有各种不同的形状,如线状、方形,圆形、十字形和圆环形等。二维数据的中值滤波可以表示为 A为窗口

图像处理matlab程序实例

程序实例 1旋转: x=imread('d:\MATLAB7\work\flower.jpg'); y=imrotate(x,200,'bilinear','crop'); subplot(1,2,1); imshow(x); subplot(1,2,2); imshow(y) 2.图像的rgb clear [x,map]=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shh1.jpg');y=x(90:95,90:95);imshow(y)R=x(90:95,90:95,1);G=x(90:95,90:95,2);B=x(90:95,90:95,3);R,G,B 3.加法运算clear I=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shh3.jpg');J=imnoise(I,'gaussian',0,0.02);%向图片加入高斯噪声subplot(1,2,1),imshow(I);%显示图片subplot(1,2,2),imshow(J);K=zeros(242,308);%产生全零的矩阵,大小与图片的大小一样for i=1:100%循环100加入噪声J=imnoise(I,'gaussian',0,0.02);J1=im2double(J);K=K+J1;end K=K/100; figure,imshow(K);save

4.减法 clear I=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao.jpg'); J=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao1.jpg'); K=imsubtract(I,J);%实现两幅图相减 K1=255-K;%将图片求反显示 figure;imshow(I); title('有噪声的图'); figure;imshow(J); title('原图'); figure;imshow(K1); title('提取的噪声'); save 5.图像的乘法 H=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao.jpg'); I=immultiply(H,1.2);将此图片乘以1.2 J=immultiply(H,2); subplot(1,3,1),imshow(H); title('原图'); subplot(1,3,2),imshow(I); title('·放大1.2'); subplot(1,3,3),imshow(J); title('放大2倍'); 6除法运算 moon=imread('moon.tif'); I=double(moon); J=I*0.43+90; K=I*0.1+90; L=I*0.01+90; moon2=uint8(J); moon3=uint8(K); moon4=uint8(L); J=imdivide(moon,moon2); K=imdivide(moon,moon3); L=imdivide(moon,moon4); subplot(2,2,1),imshow(moon); subplot(2,2,2),imshow(J,[]); subplot(2,2,3),imshow(K,[]); subplot(2,2,4),imshow(L,[]);

图像边缘检测各种算子MATLAB实现以及实际应用

《图像处理中的数学方法》实验报告 学生姓名:赵芳舟 教师姓名:曾理 学院:数学与统计学院 专业:信息与计算科学 学号: 联系方式: 梯度和拉普拉斯算子在图像边缘检测中的应用

一、数学方法 边缘检测最通用的方法是检测灰度值的不连续性,这种不连续性用一阶和二阶导数来检测。 1.(1)一阶导数:一阶导数即为梯度,对于平面上的图像来说,我们只需用到二维函数 的梯度,即:,该向量的幅值: ,为简化计算,省略上式平方根,得到近似值;或通过取绝对值来近似,得到:。 (2)二阶导数:二阶导数通常用拉普拉斯算子来计算,由二阶微分构成: 2.边缘检测的基本思想: (1)寻找灰度的一阶导数的幅度大于某个指定阈值的位置; (2)寻找灰度的二阶导数有零交叉的位置。 3.几种方法简介 (1)Sobel边缘检测器:以差分来代替一阶导数。Sobel边缘检测器使用一个3×3邻域的行和列之间的离散差来计算梯度,其中,每行或每列的中心像素用2来 加权,以提供平滑效果。 -1-21 000 121 -101 -202 -101

(2)Prewitt边缘检测器:使用下图所示模板来数字化地近似一阶导数。与Sobel检测器相比,计算上简单一些,但产生的结果中噪声可能会稍微大一些。 -1-1-1 000 111 -101 -101 -101 (3)Roberts边缘检测器:使用下图所示模板来数字化地将一阶导数近似为相邻像素之间的差,它与前述检测器相比功能有限(非对称,且不能检测多种45°倍数的边缘)。 -10 01 0-1 10 (4)Laplace边缘检测器:二维函数的拉普拉斯是一个二阶的微分定义: 010 1-41 010

模板匹配MATLAB实现及算法优化

模板匹配MATLAB实现及算法优化 一、引言 现代社会已进入信息时代,随着计算机技术、通信技术和数学的发展,图像信息处理能力和水平也不断提高,相应的也得到和更多关注、研究和更加广泛的应用。图像匹配是图像处理的一项关键技术,可广泛用于目标识别与跟踪、立体视觉、变化检测、车场车牌识别、人脸识别、机器人导航、测绘、等领域,已成为一门新兴的分支学科。由于拍摄时间、拍摄角度、自然环境的变化、多种传感器的使用和传感器本身的缺陷,使拍摄的图像不仅受噪声的影响,而且存在严重的灰度失真和几何畸变。在这种条件下,如何有效地进行图像匹配一直是人们研究的热点和难点。 要研究模板匹配,首先必须明确模板匹配的定义:模板匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜

索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。简单的讲就是,要判读一幅大图像中是否存在某种已知的图案,则以一幅与该图案有着相同尺寸和方向的小图像为模板,通过一定的算法可以在图中找到目标,确定其坐标位置。 那么如何实现模板与原图像的匹配呢?下面将结合一个具体例子说明模板匹配的实现过程。 二、 问题描述及解决方法 1. 问题描述 现有模板如下图: 原图如下图: 问题:如何在原图中找到模板所处的位置,并把该位置标记出来。 2. 解决方法 首先必须建立判断模板与原图相应位置相似程度的准则。对于彩色图像,是基于图像的特征匹配;而灰度图像,则是基于相关函数。本实验的处理对象主要是灰度图片。 相关函数又分成两类: (1) 差值测度。计算公式如下: max |(,)(,)|f x y g x y ε=- |(,)(,)|D f x y g x y dxdy ε=-?? 22[(,)(,)]D f x y g x y dxdy ε=-??

图像运算的MATLAB实现

rice=imread(‘rice.png’); % 读入图像 I=double(rice); % 数据类型转换 J=I*0.43+60; % 像素点算术运算 rice2=uint8(J) % 数据类型转换subplot(1,2,1),imshow(rice); % 原图绘制subplot(1,2,2),imshow(rice2); % 计算后图像绘制

X = uint8([ 255 10 75; 44 225 100]); Y = uint8([ 50 20 50; 50 50 50 ]); Z = imdivide(X,Y)

I = imread('rice.png'); % 读入图像background = imopen(I,strel('disk',15)); % 图像开运算Ip = imdivide(I,background); % 图像除法运算imshow(Ip,[]) % 显示运算后的图像

I = imread('rice.png'); % 读入图像 J = imdivide(I,2); % 图像除以一个常数subplot(1,2,1), imshow(I) % 显示原始图像subplot(1,2,2), imshow(J) % 显示运算后的图像

I = imread('cameraman.tif'); % 读入图像J = imlincomb(2,I); % 灰度值放大imshow(J) % 显示运算后的图像

I = imread('cameraman.tif'); % 读入图像 J = uint8(filter2(fspecial('gaussian'), I)); % 图像滤波 K = imlincomb(1,I,-1,J,128); % K(r,c) = I(r,c) - J(r,c) + 128 % 图像相减后加上一个常数figure, imshow(K) % 显示运算后的图像

一种基于MATLAB的JPEG图像压缩具体实现方法

一种基于MATLAB的JPEG图像压缩具体实现方法 说明:该方法主要是对FPGA硬件实现编码的一个验证,MATLAB处理时尽量选择了简单化和接近硬件实现需要。 JPEG编码解码流程:BMP图像输入、8*8分块、DCT变换、量化、Zig_Zag 扫描、获取DC/AC系数中间格式、Huffman熵编码、DC/AC系数Huffman熵解码,反zig_zag扫描、反量化、反DCT变换、8*8组合、解码图像显示。 下面根据具体代码解释实现过程。 1.BMP图像输入 A=imread('messi_b.bmp'); %读取BMP图像矩阵 R=int16(A(:,:,1))-128; %读取RGB矩阵,由于DCT时输入为正负输入, G=int16(A(:,:,2))-128; %使得数据分布围-127——127 B=int16(A(:,:,3))-128; 通过imread函数获取BMP图像的R、G、B三原色矩阵,因为下一步做DCT 转换,二DCT函数要求输入为正负值,所以减去128,使得像素点分布围变为-127~127,函数默认矩阵A的元素为无符号型(uint8),所以如果直接相减差值为负时会截取为0,所以先用int16将像素点的值转为带符号整数。网上很多都提到了第一步的YUV转换,但是由于MATLAB在实验时YUV转换后色差失真比较严重,这里没有进行YUV转换。个人理解为YUV转换后经过非R/G/B原理显示器显示效果可能会比较好,或者如果图像有色差可以选择YUV调整。为了方便,读入的图像像素为400*296,是8*8的50*37倍,所以代码里没有进行8*8的整数倍调整。 2. 8*8分块 R_8_8=R(1:8,1:8);%取出一个8*8块 这里以R色压缩解码为例,后边解释均为R色编码解码过程,最后附全部代码。R_8_8为: 3.DCT变换 R_DCT=dct2(R_8_8); 使用MATLAB函数dct2进行DCT变换,也可使用DCT变换矩阵相乘的方法,即R_DCT=A* R_8_8*A T,其中A为DCT变换矩阵。R_DCT为:

图像平滑的matlab实现论文

图像平滑的Matlab实现 20101602310035 黄汉杰 摘要 随着图像处理领域的迅速发展,图像平滑作为图像处理中的重要环节,也逐渐受到人们的关注。图像平滑的目的主要是消除噪声。图像平滑方法按空间域和频率域的分类及各种方法的特点,图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用均值滤波、中值滤波等;频率域图像平滑常用的低通滤波器有理想低通滤波器、布特沃斯低通滤波器、低通指数滤波器、低通梯形滤波器等。 关键词:图像平滑;噪声;空间域低通滤波;频域低通滤波 引言: (1)在图像的获取和传输过程中原始图像会受到各种噪声的干扰,使图像质量下降。为了抑制噪声、改善图像质量,要对图像进行平滑处理。抑制或消除这些噪声而改善图像质量的过程称为图像的平滑。图像平滑的目的是为了消除噪声。噪声消除的方法又可以分为空间域或频率域,亦可以分为全局处理或局部处理,亦可以按线性平滑、非线性平滑和自适应平滑来区别。图像的平滑是一种实用的数字图像处理技术,一个较好的平滑处理方法应该既能消除图像噪声,又不使图像边缘轮廓和线条变模糊,这就是研究数字图像平滑处理要追求的目标。一般情况下,减少噪声的方法可以在空间域或频率域进行处理,主要有邻域平均法、中值滤波法、低通滤波法等,邻域平均法即通过提高信噪比,取得较好的平滑效果;空间域低通滤波采用低通滤波的方法去除噪声;以及频域低通滤波法通过除去其高频分量就能去掉噪声,从而使图像得到平滑。 (2)本设计将对图像平滑处理的两大方面即空间域和频率域,以及两种处理

方向里的几种处理方法进行介绍,并对一些常用的简单平滑算法进行分析。 (3)图像平滑主要是为了消除被污染图像中的噪声,这是遥感图像处理研究的最基本内容之一,被广泛应用于图像显示、传输、分析、动画制作、媒体合成等多个方面。该技术是出于人类视觉系统的生理接受特点而设计的一种改善图像质量的方法。处理对象是在图像生成、传输、处理、显示等过程中受到多种因素扰动形成的加噪图像。在图像处理体系中,图像平滑是图像复原技术针对“一幅图像中唯一存在的退化是噪声”时的特例。 1.论文目的 1.1 通过几种图像平滑的方法,实现被噪声污染过的图像的平滑处理,其中包括空间域和频率域; 1.2 在加深对数字图像处理课本知识理解的基础上,学会运用已学的知识对图像 平滑的处理方法的结果进行分析。 2.理论及方案 (1)图像噪声来源及类型 一幅图像在获取和传输等过程中,会受到各种各样噪声的干扰,其主要来源有三:一为在光电、电磁转换过程中引入的人为噪声;二为大气层电(磁)暴、闪电、电压、浪涌等引起的强脉冲性冲激噪声的干扰;三为自然起伏性噪声,由物理量的不连续性或粒子性所引起,这类噪声又可分成热噪声、散粒噪声等。一般在图像处理技术中常见的噪声有:加性噪声、乘性噪声、量化噪声、“盐和胡椒”噪声等。下面介绍两种主要的噪声。 2.1.1、高斯噪声(Gaussian noise) 这种噪声主要来源于电子电路噪声和低照明度或高温带来的传感器噪声,也

模板匹配MATLAB实现及算法优化

模板匹配MATLAB实现及算法优化

一、引言 现代社会已进入信息时代,随着计算机技术、通信技术和数学的发展,图像信息处理能力和水平也不断提高,相应的也得到和更多关注、研究和更加广泛的应用。图像匹配是图像处理的一项关键技术,可广泛用于目标识别与跟踪、立体视觉、变化检测、车场车牌识别、人脸识别、机器人导航、测绘、等领域,已成为一门新兴的分支学科。由于拍摄时间、拍摄角度、自然环境的变化、多种传感器的使用和传感器本身的缺陷,使拍摄的图像不仅受噪声的影响,而且存在严重的灰度失真和几何畸变。在这种条件下,如何有效地进行图像匹配一直是人们研究的热点和难点。 要研究模板匹配,首先必须明确模板匹配的定义:模板匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。简单的讲就是,要判读一幅大图像中是否存在某种已知的图案,则以一幅与该图案有着相同尺寸和方向的小图像为模板,通过一定的算法可以在图中找到目标,确定其坐标位置。 那么如何实现模板与原图像的匹配呢?下面将结合一个具体例子说明模板匹配的实现过程。 二、问题描述及解决方法 1.问题描述 现有模板如下图: 原图如下图: 问题:如何在原图中找到模板所处的位置,并把该位置标记出来。 2.解决方法

首先必须建立判断模板与原图相应位置相似程度的准则。对于彩色图像,是基于图像的特征匹配;而灰度图像,则是基于相关函数。本实验的处理对象主要是灰度图片。 相关函数又分成两类: (1) 差值测度。计算公式如下: max |(,)(,)|f x y g x y ε=- |(,)(,)|D f x y g x y dxdy ε=-?? 22[(,)(,)]D f x y g x y dxdy ε=-?? (2) 相关测度。计算公式如下: 1222(,)(,)(,)[(,)(,)]D D D f x y g x y dxdy p x y f x y dxdy g x y dxdy = ??????? 显然,上式中的p(x,y)取值范围是0到1。越接近于0,表示两图像相差越大;越接近于1,表示两图像越相似。 有了描述相似程度的数学模型,接下来就可以用MATLAB 编程实现模板匹配,从而解决上述问题了。 三、 MATLAB 实现 要实现这个程序,必须有三个重要组成部分: 1. 模板循环 功能:实现模板扫过原图的每一个像素点。 语句: for i=1:M-m for j=1:N-n end end 描述:以模板左上角第一个点为标志点,使其依次从左到右、从上到下扫过原图每一个像素点。 2. 相似性判断 功能:在每一次循环时,计算模板与覆盖的原图区域的相似程度,并判断两图像是否相似。 语句: temp=imcrop(im,[j,i,n-1,m-1]);

基本数字(精选)图像处理算法的matlab实现

基本数字图像处理算法的matlab实现 1.数字图像处理的简单介绍 所谓数字图像就是把传统图像的画面分割成为像素的小的离散点,各像素的灰度值也是用离散值来表示的。 数字图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。 2.图像的显示与运算 2.1图像的显示 Matlab显示语句 imshow(I,[lowhigh])%图像正常显示 I为要显示的图像矩阵。,[lowhigh]为指定显示灰度图像的灰度范围。高于high的像素被显示成白色;低于low的像素被显示成黑色;介于high和low之间的像素被按比例拉伸后显示为各种等级的灰色。 subplot(m,n,p) 打开一个有m行n列图像位置的窗口,并将焦点位于第p个位置上。 2.2图像的运算 灰度化将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。

第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。 第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。 灰度是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。 图像增强的目标是改进图片的质量,例如增加对比度,去掉模糊和噪声,修正几何畸变等;图像复原是在假定已知模糊或噪声的模型时,试图估计原图像的一种技术。 Matlab图像格式转换语句 rgb2gray(I) %从RGB图创建灰度图 imhist(I) %画灰度直方图 图像的线性变换 D B=f(D A)=f A*D A+f B Matlab源代码: I1=imread('F:\图片2.jpg'); subplot(2,2,1);imshow(I1);title('原图'); I2=rgb2gray(I1); %灰度化图像 subplot(2,2,2);imshow(I2);title('灰度化后图'); [M,N]=size(I2); subplot(2,2,3) [counts,x]=imhist(I2,60); %画灰度直方图 counts=counts/M/N; stem(x,counts);title('灰度直方图'); g=zeros(M,N);%图像增强

相关主题
文本预览
相关文档 最新文档