1 引言
随着社会的发展和医疗技术的进步,人们对身体健康的关心程度越来越高。医学影像已经不再是仅供医生参考的信息而成为诊断疾病的重要依据。在网络传输条件下的图像压缩编码成为建立数字化医院的关键技术。目前,二维图像的压缩标准有JPEG、GIF及采用了小波变换" title="小波变换" target="_blank">小波变换的JPEG2000等。医学图像具有特殊性,它一般不允许丢失有用的细节信息。传统的DCT(Discrete Cosine Transform,离散余弦变换)和第一代小波在图像变换后会产生浮点数,因而必须对变换后的数据进行量化处理,这样就会产生不同程度的失真。可见,量化器的设计是决定图像保真度的关键环节。由于第二代小波采用提升方法能够实现整数变换,因而能够实现图像的无损压缩,显然,它是一种很适于医学图像的压缩方法。
2 SPIHT算法
基于分层树的集合划分算法(Set Partitioning inHierarchical Trees,SPIHT)改进了内嵌零树编码算法(EZW)。在对图像进行小波变换后,它更有效地利用了不同尺度子带重要系数间的相似性。它呈现出良好的特性:不依赖傅立叶变换而在空间域中构造小波;较高的PSNR(Peak Signal Noise Ratio,峰值信噪比)保证了良好的重现图像质量;整数运算利于实现实时快速编解码和网络传输;图像码流的逐渐呈现便于用户上网检索感兴趣的图像。
SPIHT算法对图像信息采用如下的编码步骤。
首先,定义三个队列:不显著性系数队列LIP,显著性系数队列LSP和不显著性集合队列LIS。
设,O(i,j)表示节点(i,j)的直接节点的集合;D(i,j)表示节点(i,j)的子节点集合;L(i,j)表示子节点中排除直接节点后的集合。
在队列中,每个元素由一个坐标唯一识别,它在LIP和LSP中代表孤立系数(无子节点的根节点),在LIS中代表第一类元素的D(i,j)或者第二类元素的L(i,j)。
对某个阈值T进行显著性测试。将大于T的元素移入LSP,并在LIP队列中移除该元素。对LIS也进行同样的测试,将显著的元素移入LSP,其他的再进行树的分裂。
用类C++语言描述的SPIHT算法如下:
第一步,阈值T和三个队列(LSP、LIS和LIP)初始化。
(2)if(x,y)是第二类元素,对L(i,j)进行显著性测试
if(L(i,j))==1 all(k,l)∈O(i,j)作为第一类元素移入LIS,从LIS出队。
第三步,比特传输/存储。将LSP中的每个系数转化成二进制传输/存储。
第四步,阈值更新并转至第二步:T/=2;gotostep2。
3 提升方案与第二代小波
提升方法构造小波分为分裂、预测和更新三个步骤。
3.1 分裂(split)
将一原始信号序列Sj按偶数和奇数序号分成两个较小的、互不相交的小波子集Sj-1和dj-1:
3.2 预测(predict)
由于数据间存在相关性,因而可以定义一个预测算子P,使dj-1=P(Sj-1),这样可用相邻的偶数序列来预测奇数序列。若用dj-1与P(Sj-1)的差值代替dj-1,则其数据量要比原始dj-1小得多。
最简单的情况下,取两个相邻偶数序号所在数据的均值作为它们间奇数序号所在数据的预测值。即,
3.3 更新(update)
由于上述两个过程一般不能保持原图像中的某些整体性质(如亮度),为此,我们要构造一个U算子去更新Sj-1,使之保持原有数据集的某些特性。
4 编/解码方案
本文中前端采用第二代小波(lifting wavelet),接着对小波系数采用SPIHT算法,然后,采用Amir Said的自适应算术编码。解码是编码的逆过程,包括与正向SPIHT对应的三个步骤:恢复更新、恢复预测和合并(merge)。编/解码方案如图1所示。
如果前端利用第一代小波进行有损压缩,可以取得更高的压缩比。显然,第二代小波变换对数据压缩的高保真性与高压缩比的要求是矛盾的。
5 实验结果及结论
对上一编码方案,我们分别对医学图像和Lena图像进行了测试,码率bbp采用bit/pixel。由于采用了无损压缩方案,所以,表1中的三种不同编码方法均有PSNR=∞。
从表1可以看出,在对标准测试图像Lena进行编码时性能差别不是很大,但由于一般的医学图像的边缘存在大量的“零像素”,因此,在用SPIHT编码时可以产生大量的“零树”,大大减少了数据量。所以,在对医学图像进行压缩时,更适合采用本文的方法。
进一步的分析表明,与目前广为使用的JPEG相比较,本压缩方案占用内存小、编码效率高且无马赛克现象。在低码率时,两者间的差距更为明显。如果该方案采用并行快速算法和硬件实现,其实时性会进一步提高,所以,该医学图像压缩方案有较好的应用前景。