你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F4 的图像压缩技术研究

[复制链接]
苏柚 发布时间:2015-7-21 14:04
摘要:本文提出了一STM32F4 JPEG 静态缩编码的方法据图缩编码程,重点像编码DCT 以及STM32F4 过程实验结果表明DCT 法结法的STM32F4 静态,与DCT 方法的速度4 14∶ 1信噪30,实了对像信号的实时
0 引言
JPEG 作为国际静态图像压缩标准,是一项成熟的图像编码技术,压缩比例高失真小运行速度快且易于实现,因此,被广泛的应用于多媒体网络传输等多个领域1目前,图像压缩编码系统根据应用场合不同有着多种硬件实现方案,如基于FPGADSPARM 或采用专用集成芯片的方式2-4基于ARM-CortexM4 内核的STM32F4 系列微处理器是一款集MCUDSPFPU 多种性能一体的数字信号控制器5其最高主频可达168 MHz,支持多种低功耗模式该数字信号控制器中同时整合了微控制器和数字信号处理器的功能与特性,其适用于对运算能力和DSP 指令方面有较高要求的系统,为双芯片设计系统提供了新的单芯片解决方案,应用于图像压缩处理有着明显的优势本设计采用的是STM32F417 微处理器
1 图像压缩编码流程
JPEG 为连续色调静止图像压缩编码制定的国际通用标准标准包括压缩编码解码数据格式三部分6. JPEG 定义了两种基本的压缩算法,一种为基于DCT 的有损压缩,包括基本系统扩展系统另一种为预测压缩算法,即无损压缩其中,基本DCT 顺序型方式是最常用的压缩方法,其图像压缩编码流程如图1 所示
捕获1.PNG
DCT 变换与反变换( IDCT) 定义7如公式( 1) 和公式( 2) 所示
DCT 变换:
捕获2.PNG
IDCT 变换:
捕获3.PNG
JPEG 静态图像压缩主要包括图像预处理DCT 变换量化熵编码四个过程为了提高DCT变换效率,需要在进行DCT 变换之前对图像进行预处理,包括颜色空间转换和像素分块,把图像分割为一系列8 × 8 像素块. DCT 变换的任务是将图像由空间域转换为频率域,从而达到去除数据冗余的目的量化过程通过量化表来实现,通过改变量化步长,实现对图像不同比例的压缩.最后,对量化后的数据进行编码,从而生成标准的数据流
2 基于STM32F4 的图像压缩处理
2. 1 图像预处理
JPEG 标准规定: 压缩处理图像为彩色或灰度图像,若为彩色图像,其色彩分量应该由亮度分量Y 和两个色度分量Cr Cb 组成由于人眼对亮度信号和色度信号的敏感程度不同,对色度信号分辨率仅为亮度信号分辨率的1 /4,因此,在对彩色图像进行处理时,通常对亮度信号和色度信号采用不同的抽样频率,本系统采用4∶ 2∶ 2 格式由于本系统原始输入图像为RGB565 格式,因此,首先要对图像进行颜色空间转换,即由RGB 彩色空间转换为YCrCb 空间6,转换关系式如下:
捕获4.PNG
RGB 空间转换为YUV 空间的实现程序如下:
void jutl_cc_rgb2ycc( JSAMPLE * dataint num)
{
  for( i = 0; i < num; i + + )
   {
   a = pcolori. a;
   b = pcolori. b;
   c = pcolori. c;
   pcolori.a = ( 0.29900f* a +0. 58700f*b +0.11400f* c) ; / /Y 分量
   pcolori.b = ( - 0. 16874f* a - 0. 33126f*b +0. 50000f* c +128) ; / /Cb 分量
   pcolori.c = ( 0.50000f* a -0. 41869f*b -0. 08131f* c +128) ; / /Cr 分量
   }
}
对图像进行压缩处理前,需要考虑到压缩算法的运行效率与所处理像素块大小的关系. JPEG委员会研究发现,当像素块选择为8 × 8 像素时DCT 变换效果最佳,因此,在进行DCT 变换前要对图像进行分块由于DCT 变换要求矩阵元素具有8 bit 精度,且像素值范围为- 128 ~ 127,因此,在进行DCT 变换前要将原像素值减去128
2. 2 离散余弦变换( DCT)
DCT 变换输入端为一系列8 × 8 像素块,该算法按照从左到右,从上至下的扫描方式对图像进行变换在整个图像压缩过程中DCT 变换是最为耗时的一部分,其运算速度直接影响图像压缩的实时性8-10由公式( 1) 可以看出,压缩过程中如果直接进行二维DCT 变换,数据计算量巨大,很难满足系统实时性要求因此,必须对算法进行优化,从而降低运算量,提高运算速度
优化一: 采用快速DCT 算法将二维DCT 变换转换为两次8 点的一维变换,对每个8 × 8 数据块先做列方向上的DCT 变换,再对得到的矩阵进行行变换目前,针对一维DCT 运算有多种快速算法,其中陈氏算法所需要的计算量最小11将二维DCT 变换分解为一维变换公式11如下:
捕获5.PNG
在一维8 DCT 计算中,若输入数据为data0],data1~ data7
假设:
s07 =data0+data7];
s16 =data1+data6];
s25 =data2+data5];
s34 =data3+data4];
s0734 =s07 +s34;
s1625 =s16 +s25;
d07 =data0-data7];
d16 =data1-data6];
d25 =data2-data5];
d34 =data3-data4];
d0734 =d07 -d34;
d1625 =d16 -d25;
则经过一维DCT 计算后,其输出结果为:
data0=( DCTVAL) ( c4* ( s0734 +s1625) ) ;
data1=( DCTVAL) ( c1* d07 + c3* d16 + c5* d25 +c7* d34) ;
data2=( DCTVAL) ( c2* d0734 +c6* d1625);
data3=( DCTVAL) ( c3* d07 - c7*d16 - c1* d25 -c5* d34) ;
data4=( DCTVAL) ( c4* ( s0734 -s1625) ) ;
data5=( DCTVAL) ( c5* d07 - c1*d16 + c7* d25 +c3* d34) ;
data6=( DCTVAL) ( c6* d0734 -c2*d1625) ;
data7=( DCTVAL) ( c7* d07 - c5*d16 + c3* d25 -c1* d34);
其中,为ci = cos( 2i + 1) v16
通过上述两级计算,完成了一次一维DCT 计算由此可以看出,该一维变换主要由两级运算构成,第一级为蝶形运算,其输入为datai]( i = 07) ,经过一系列运算得到蝶形输出结果,作为第二级输入; 第二级为乘法累加运算,这一级的运算主要通过微处理器的专用DSP 指令来实现,STM32F4 提供的单周期乘加指令( MAC) 和单周期SIMD 指令显著提高了DCT 变换速度通过该方法,可以大大简化运算级数,优化运算速度优化二: 采用查表法在第二级乘加运算过程中,需要多次用到余弦cos 系数,若每次都重新计算,将会浪费大量时间,因此,本设计采用了查找表方法,即将变换中用到的余弦系数事先存到处理器的ROM 中,在进行DCT 运算时,只需要直接查表即可得到,从而避免了多次重复计算余弦系数,进一步提高了DCT 运算速度通过上述两种DCT 变换优化方法,大大降低了压缩时间,提高了压缩效率同时,在编程过程中,只需编写一次一维DCT 运算代码,然后通过循环完成二维变换该循环实现方法: 首次循环时,分别将数据输入指针data 指向输入缓冲区,数据缓存指针tmp 指向临时矩阵缓存区; 第一次DCT 变换时,通过调用输入缓冲区中的输入数据完成一维DCT 运算,同时将运算结果存放在临时矩阵缓冲区中; 第二次循环时,数据输入指针data指向临时矩阵存储缓冲区,以提取第一次DCT 运算结果并作为第二次DCT 运算的输入,而此时数据缓存指针tmp 则指向输入缓冲区,即经过第二次DCT 计算后将结果再次存入最初的输入缓冲区中循环运算程序代码如下:
for( col = 0; col < DCTSIZE; col + + )
{
  int ii;
   DCTVAL * tmp = data;
   for( ii = 0; ii <DCTSIZE; ii + + )
   {
     tdata[ii]= tmp;
     tmp + = DCTSIZE;
   }
}
2. 3 量化处理
为了实现图像数据的压缩,必须对数据进行量化处理量化是多对一的映射,是造成图像信息损失的主要来源,因此是一个有损过程该过程主要是将DCT 变换的64 个系数分别除以一定的步长,然后四舍五入后取整得到量化结果由于经DCT 变换后,原图像的大部分信息集中在矩阵的左上角部分,因此,量化表将针对高低频分量采用不同的量化步长,即对低频部分采用小步长,对于高频部分采用较大的步长从而,在尽可能保持原始图像的视觉效果的前提下,获得更高的压缩比. JPEG 标准对量化处理算法描述6如下:
捕获6.PNG
其中,F(μv)为量化后的DCT 系数,Y( μv)为未量化DCT 系数,Q( μv)为量化步长,IntegerRound( )表示对量化结果取整
本系统的量化处理流程图如图2 所示
由于码书的尺寸和码字的大小都会影响图像的压缩效果,因此,在对图像进行量化处理时必须对二者进行设置12图像质量Quality ( Q) JPEG 标准量化表存在比例关系Q 为质量因子,实际使用量化表q 与标准量化表qs的比例关系13为:
捕获7.PNG
量化表的选取直接影响着图像的压缩质量和压缩率,因此,首先为Q( Quality,图像质量) 定义一个1 ~ 100 的变化区间根据上述公式( 9) 可知,当Q = 100 时,q 值全部为1; Q = 75 时,q =1 /2 × qs; Q = 50 时,q = qs; Q = 35 时,q = 1. 4 × qs;Q = 1 时,q = 50 × qs
捕获8.PNG
因此,Q 100 时,量化表的所有值均取1,压缩的后图像不损失任何信息; Q 75 时,量化表为JPEG 标准推荐表中各步长的一半; 当Q 50时,量化表为JPEG 标准推荐量化表; Q 35 时,量化表为JPEG 标准推荐量化表的各步长扩大1. 4 倍; Q 1 时,量化表为JPEG 标准推荐表中各步长扩大50
2.4 编码
编码是图像压缩的最后一步DCT 变换后,图像的大部分能量集中在低频分量部分,其中( 00) ( DCT 变换的首行首列) 为直流( DC) 系数,它表征了8 ×8 子块的平均值,而高频分量经过量化出现了一些0,因此,对DC 系数和其他63 AC 系数采用分别编码由于相邻8 ×8 块的DC 系数之间相关性比较强,采用了差值脉冲编码( DPCM) 方法进行DC 编码为了保证低频分量先出现,同时增加连续零的个数,首先对AC 系数进行Z( Zig-Zag) 排序,然后,将8 ×8 的矩阵变成一个1 × 64 的矢量,之后再进行亮度和色度编码实现DC 系数和AC 系数编码的程序如下:
voidjhuff_encode_one_block( jpeg_compress_info *cinfoDCTBLOCK srcJHUFF _ TBL * dc _ tblJHUFF_TBL * ac_tbl )
{
  int diffssssrrrrcode;
  int rsk;
  diff = src0]; /* DC 编码* /
  ssss = bit_num( diff) ;
  jhuff_write_bits( cinfodc_tbl ->ecodessss],dc_tbl ->esizessss]) ;
  rrrr = 0; /* AC 编码* /
  for ( k = 1; k < DCTSIZE2; k + + )
   {
     if ( src[k]== 0) /* 计算连续0 的个数* /
      {
         rrrr ++ ;
      }
     else
    {
       while( rrrr > 15) /* 若连0 数大于15,则用( 15,0) 表示* /
      {
         show_msg( " < AC: 15,0\n" ) ;
         jhuff _write _bits (cinfo,ac _tbl ->ecode[0xF0],ac_tbl ->esize[0xF0]) ;
         rrrr - =16;
      }  
      ssss = bit_num( src[k]) ;
      rs = ( ( rrrr << 4) | ssss) ;
      jhuff _write _bits (cinfo,ac _tbl ->ecode[rs],ac_tbl ->esize[rs]) ; /* 记录编码码长* /
      code = src[k];
      if ( code < 0)
      code - = 1;
      jhuff_write_bits( cinfo,code, ssss) ;/* 记录基础编码* /
      rrrr = 0;
      ……
   }
}
}
3 实验结果与分析
3. 1 实验效果图
通过改变量化表中的量化因子Q,可以改变图像的压缩比图像的压缩比越大,所占用的存储器空间将越小,但同时图像的视觉损失也越大,将会影响图片的清晰度3 给出了采用不同量化因子的压缩效果图与原始图像的比较其中图3a为未压缩的原始图像,大小为150 KB,图3b 为压缩后的图像大小是15 KB,图3c 为压缩后图像大小是11 KB,图3d 为压缩的图像大小为8. 7KB.由图3 可以看出,当Q 75 50 时,压缩后的图像与原始图像没有明显的视觉差别,而当Q 35时,图像出现了较严重的失真

捕获9.PNG

3. 2 实验结果分析
选取不同量化因子进行压缩时,图像的比特率( Bit /Pixel) 和峰值信噪比( PSNR) 的变化情况不同141 给出了不同Q 值时的图像的比特率( Bit /Pixel) 和峰值信噪比( PSNR) 的变化情况从表1 可以看出,当量化因子Q 50 时,其压缩比可达到14∶ 1,且峰值信噪比仍然高于30,因此,从视觉效果上完全满足人眼观看的需要当量化因子Q 35 时,能够得到更高的压缩比17. 2∶ 1,但其峰值信噪比降低为27. 41,解压缩后图像失真比较明显
捕获10.PNG
利用STM32F417 微处理器系统,采用文中所介绍的方法,量化因子Q 设置为50 时,处理一幅240 × 320RGB565 格式图像,压缩过程总耗时约为67 ms,与传统基于DCT 的压缩系统所需的330 ms 相比,压缩效率有了显著提高,同时,在相同压缩比例条件下得到了更高的图像质量实验结果表明,本文提出的采用DCT 快速算法结合余弦系数查表法,在STM32F417 微处理器平台上进行静态图像压缩具有良好的实时性,能够满足一般图像处理系统的实时性要求

收藏 4 评论16 发布时间:2015-7-21 14:04

举报

16个回答
北斗光寒 回答时间:2015-7-21 14:19:26
好东西  先马克  回头好好看看
moyanming2013 回答时间:2015-7-21 14:45:49
学习了。。。
myFelix 回答时间:2015-7-21 17:21:49
上代码额
stary666 回答时间:2015-7-21 17:43:49
学习,代码看看
jiaswang 回答时间:2015-7-21 17:53:07
好高深 啊
yanhaijian 回答时间:2015-7-22 08:29:25
我只能说呵呵,这不是他该干的事。
你好我好大家好! 回答时间:2015-7-22 09:08:48
学习了                     
党国特派员 回答时间:2015-7-22 09:24:40
很好,很强大。。。 blank.png blank1.png blank2.png blank3.png blank4.png blank5.png blank6.png blank7.png blank8.png blank9.png
dsjsjf 回答时间:2015-7-22 09:30:06
感觉好深奥的样子,先留个记号
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版