点击上方蓝字关注我们!

CCSDS图像压缩算法之我见

CCSDS:Consultative Committee for Space Data System,国际空间数据系统咨询委员会,于1982年NASA发起组织,至今已经定义了许多空间数据系统的协议规范和标准,如空地通信协议等一系列标准和规范。

今天主要给大家介绍CCSDS发布的图像压缩算法。

CCSDS指定的深空探测图像的压缩标准从1997年提出第一个建议到2005年11月发布推荐标准,CCSDS图像压缩算法不断从压缩效率和算法复杂度上进行改进,对比JPEG2000, CCSDS图像压缩算法更适用于硬件实现,实现的复杂度更低,且专门面向遥感图像幅宽及bit深度的优化支持,如支持从4bits到16bits的比特位面深度,支持无损和有损,支持以帧方式和非帧方式(如行推扫)处理输入图像,使得该算法更适用于深空探测及对地观测。

下面给大家详细的分享下CCSDS图像压缩算法,整个算法的处理和JPEG2000类似,算法处理流程如下所示:

1.   9/7小波变换

Tips:小波变换

电子工程类的同学们应该都知道,信号分析分为时域分析和频域分析两种(图像的时域和频域处理也非常有意思,如果感兴趣的话推荐大家看下经典的冈萨雷斯版数字图像处理课本)。这里有一个非常牛逼的人给出一个非常牛逼的公式,拉普拉斯。这个公式(变换)牛逼的地方就在于把一个自变量是t(时间)的微分方程,转换成了自变量是s(频率)的传递函数,通过变换竟然改变了自变量。当将信号从时域转换到频域后我们这些搬砖的工程师就知道了信号中哪些频率是有用的哪些频率是没用的,比如我们要调整一首歌曲中的低频,高频,中频,这样在频域处理起来要比在时序简单很多。

小波变换:下面简单的从傅里叶变换->短时傅里叶变换->小波变换的顺序来说明小波变换的由来和优点。

傅里叶变换有一个非常明显的局限性,就是对非平稳过程的处理,假如存在一个信号是随时间变换的非平稳信号,那么经过傅里叶变换后他们的频域成分(分量)可能是一样的,这样你在做频域分析的时候一定会懵逼。因为它只能得到一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻却不知道,因此两个时域相差很大的信号,可能频谱是一样的。

但是现实中的信号基本上全部是非平稳过程的,我们在进行信号分析时不仅想知道信号的频率域,还想知道各个频率分量出现的时间以及信号频率随时间变换的情况,所以这个时候傅里叶变化的局限性就很明显了。如下图所示,两个时域相差很大的信号,得到频谱确实一样的(其实频率分量出现的时间是不一样的)

这时就有人想到了数学中常用的分解逼近法,把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再进行傅里叶变换,这样不就知道了哪个时间点上出现了什么频率,这个思想就是信号分析中另一个牛逼的思路-加窗。

但是这个方法也有个缺陷,那就是窗函数选多长?窗太窄会导致频率分辨率差,窗太长时间分辨率会差。用一个有意思的概念解释,量子力学中的海森堡不确定性(薛定谔的猫),就如同在量子力学中我们不能同时获取一个粒子是自旋向上还是自旋向下,在信号分析中我们也不能同时获取信号绝对精准的时刻和频率,所以就没法给出精准的窗函数。

这里就引出了小波变换,小波变换走了另一条路,把傅里叶变换中无线长的三角函数基换成了有限长的会衰减的小波基,这样不仅能获取频率,还能定位到时间。

从上面公式可以看出,不同于傅里叶变换,变量只有频率ω。小波变换有两个变量,尺度α(Scale)和平移量τ(Translation)。尺度α控制小波函数的伸缩,平移量τ控制小波函数的平移。尺度α就对应与频率,平移量τ就对应于时间。

介绍一个特别经典的小波分析教程网站,感兴趣的同学可以了解下

http://users.rowan.edu/~polikar/WTtutorial.html

在CCSDS图像压缩标准中,使用二维、三层9/7离散小波变换实现图像的频域变换,将图像数据进行去相关,将图像高频部分和低频部分分开。

Tips:对于上面这句话,没有学过图像处理的先不要慌,给大家解释下。

二维:所谓二维小波变换就是对一维小波变换的迭代应用,简单来说就是先对图像行进行一维小波变换,之后再对图像列进行一维小波变换,如下如所示:

三层:为了提升压缩效率,标准中建议对二维小波进行三层变换,所谓三层变换其实就是对第一层留下的LL1子带再进行一次二维小波变换,然后对得到的第二层LL2子带再做一次小波变换,最终得到二维三层小波变换。

CCSDS给出了两组小波变换系数,分别是浮点系数和整数系数,便于后续实现,我们仅关心整数系数,整数系数如下,其中D为高频分量,C为低频分量:

注意上面公式中那个不是中括号,是向下取整的意思。

划重点,在实现算法前,第一步也是最重要的一步就是优化算法,优化的思路有两个,一个是速度和面积,一个是便于实现。举个例子来说明下,如上面的其中一个公式,如下所示:

如果直接实现,那么需要需要计算3次加法、1次减法、三次乘法以及三次除法,对于硬件语言来说,实现除法一般难度较大且比较消耗资源。所以我们想办法对公式进行化简合并,看能不能消除除法。

经过化简后我们可以看到,公式中仅剩2的整数次幂,以及加减法,这样在硬件实现中可以通过左移和右移来实现乘法和除法,而剩下的加法和减法就比较容易实现了。

多插一嘴,图像转换到频域后,被分为高频分量和低频分量,简单来理解就是整体和细节,所以在有损压缩时,我们通过牺牲图像的细节来达到压缩数据量的目的,所以在后续的编码过程中,也是先进行低频系数编码再进行高频系数编码(截断)。

再介绍一个后面会用到知识,比特平面分层。还是通过上面的细节和轮廓来解释。比如一个灰度图,每个像素点的量化位宽是8bit,如下所示:

如上图所示,图像像素中越低的bit平面表示的是图像的细节,越高的bit平面表示的图像的轮廓,假如用最粗暴的办法在时域压缩图像,那我们肯定丢弃的图像的细节信息,留下图像的轮廓,比如将每个像素点的低3位都写成0,这样一来图像就有大量的冗余信息,其实就达到了压缩的目的。

如果还是不好理解的话,可以看下下面这个数字86431,如果丢弃掉十位和个位,变成86400,这样虽然这个数字丢弃了细节,但是它的数量级86400还在,不影响它要表达的数据的量级。但是如果丢弃掉万,那么剩下的数字和之前相比就会影响到要描述大小了。

2.位平面编码

在CCSDS标准中,位平面编码是对小波变换后得到的小波系数进行编码处理。对于小波系数,按照重要性划分,低频区域大于高频区域,高位面大于低位面。首先位平面编码按照位面位平面的重要性以从最高位到最低位的顺序进行编码以及输出,先进行低频系数编码,再进行高频系数编码。

小波变换后的系数图像结构如下图所示:

小波变换后的图像首先被划分为若干个图像段Segment,每个Segment是S个连续图像块Block组成的图像片段,其中16≤S≤220,下图中为小波变换图像用不同颜色标定的4个图像片段。每个segment被依次独立编码,解码时每个segment被独立解码,解码不受邻近segment解码程度的影响。

这里再进一步解释下,CCSDS编码处理的单位是段(Segment),其大小定义在32x32和8192x8192之间。对于同一幅图像来说,段划分的越大,则重建(解压缩)的图像质量越好,段划分的越小,则运算时需要的缓存空间越小。每个段由固定大小8x8的块组成,每个块是位平面编码处理的基本单元,一个块含有64个小波系数。这64个小波系数中,包含1个直流系数和63个交流系数。如下图所示:

上图中每个块可以分成DC coefficient、parents、children和grandchildren。一个直流系数对应三个parents,以每个parent为根节点形成一个三级四叉树,对应四个children和16个grandchildren。图像块的坐标对应关系如下表所示:

在每个段中,每16个块组成一个群(gaggle),CCSDS图像压缩算法以群为单位完成一个段的编码。最后一个群可能不足16个块,而是以群长度对16取模后的值。

总结下上述编码划分,段->群->块。一个块有64个小波系数,一个群由16个块组成,一个段由若干个群组成。

整个位平面编码顺序步骤如下所示:

  • 段头编码

  • 初始化直流系数编码

  • 交流系数比特深度编码

  • 比特平面b=BitDepthAC-1编码

  • 比特平面b=BitDepthAC-2编码

  • ……

  • 比特平面b=0编码

本期到此就结束啦,下期我们再聊压缩的最核心部分---编码过程

c 数据压缩算法_CCSDS图像压缩算法之我见(一)相关推荐

  1. JPEGLS图像压缩算法的FPGA实现(一)压缩算法

    绪论 JPEG-LS是在ISO/ITU的新标准中用于对静态连续色调图像进行无损或进无损压缩的一种算法.它不是JPEG的一个简单扩充或修正,是一种新的压缩方法.支持无损和近无损图像压缩,不使用离散余弦变 ...

  2. unity图像压缩算法原理

    概述 在计算机图形学中,存在许多纹理压缩方案.压缩既减少了纹理内存占用,又降低了使用纹理的带宽要求.本文中,"纹理压缩"与"图像压缩"不同,因为纹理压缩方案的设 ...

  3. JPEG2000图像压缩算法学习

    压缩算法--JPEG2000 编解码原理 JPEG2000-Matlab源码实现 JPEG和JPEG2000 JPEG2000和JEPG都是静止图像压缩标准,最大区别是在空间域至频域转换.JPEG是基 ...

  4. c语言图像压缩编码,基于C语言的图像压缩算法

    摘要:该文借鉴静态图像压缩标准JPEG的理论研究成果,将其与DCT快速变换相结合,采用霍夫曼编码方法,用C语言编程实现灰度图像的压缩.最后,计算了基于DCT快速变换的图像压缩算法的压缩比.同时,分析了 ...

  5. JPEG图像压缩算法详解

    转载自 http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我就不在这里画蛇添足了(主要是我懒..) ...

  6. 微位移:一种高效的硬件图像压缩算法

    在本文中,我们提出了一种称为微移位的有损图像压缩算法.我们采用算法-硬件协同设计方法,产生一种硬件友好的低功耗压缩方法.在我们的方法中,图像首先被微移位,然后子量化值被进一步压缩.利用自然图像的空间相 ...

  7. 科研图像压缩算法比例,雷娜_对tinders算法的不科学研究

    科研图像压缩算法比例,雷娜 Left - All profile Images (2500 Steps), Centre- Just Faces (2500 Steps), Right - Just ...

  8. 图像压缩算法构造最优解c语言,基于Handel-C的CCSDS图像压缩算法实现研究

    基于Handel-C的CCSDS图像压缩算法实现研究 [摘要]:伴随着航天遥感技术的迅猛发展,采集空间图像的需求也日益增长.为了解决有限的卫星通信信道容量和海量数据下传的矛盾,应用卫星数传系统在图像数 ...

  9. JPEG图像压缩算法的python实现

    摘要 文章在研究JPEG压缩编码对图像数据压缩的基本原理的基础上,设计了JPEG图像压缩算法程序实现流程,利用 Python语言对程序进行了编写,并实现了对压缩质量进行控制,验证了JPEG压缩编码对图 ...

最新文章

  1. 安卓下拉刷新、上拉加载数据显示
  2. 追求代码质量: 用 AOP 进行防御性编程
  3. python程序练习题第三章_python核心编程-第三章-习题
  4. CSS伪类的三种写法
  5. 看完这篇文章,会让你对电容的作用更明白!
  6. Hive数据导出的三种方式
  7. 商务人士,你抛弃邮箱了吗?
  8. Centos7下搭建单节点Zookeeper
  9. 易基因|文献科普:MeRIP-seq揭示m6A RNA甲基化改变导致亨廷顿病(HD)小鼠海马记忆障碍
  10. 达梦(DM)数据库常见问题详解
  11. qpsk相点 matlab,MATLAB-QPSK在AWGN信道下的仿真
  12. linux系统双显示器怎么设置复制,在 Linux 中配置双显示器
  13. c# 用action做参数进行封装操作
  14. openjudge 1.9.14 铺地毯
  15. jstack排查cpu使用率过高
  16. 2023年最新的区块链交易所开发的架构方案
  17. 【AD16】PCB过孔盖油
  18. com.aliyun.openservices.ons.api.exception.ONSClientException: defaultMQProducer send order exception
  19. RAM在单片机里究竟有什么用?
  20. nexus7刷ubuntu定制系统--详细教程

热门文章

  1. hp服务器重置bmc,HP iLO 登录用户名与 BMC 用户名不一致导致 ipmitool 无法修改用户名...
  2. 云鲸扫拖一体机器人说明书_比老公更好用的扫拖一体机—自动洗拖布的云鲸扫拖机器人使用体验...
  3. 迅雷2012校园招聘笔试题
  4. NK3C系统中ID的汉语名称
  5. 跨域请求获取Solr json检索结果并高亮显示
  6. 分享一个简单程序(webApi+castle+Automapper+Ef+angular)
  7. Java用JSONObject-lib来解析json串
  8. 中科燕园GIS外包案例之五---地下管线GIS管理信息系统
  9. 转自JIM Wang:把 isv.config.xml 按钮事件移动到 entity.onload()
  10. 嗯?原来if可以调用方法的?