医学图像处理系统平台的研究与开发 第8页
数值 被称为矩阵A的DCT系数。
DCT逆变换公式为:
(4-3)
( , )
这种逆DCT变换可以这样解释:任何一个M×N的矩阵A均可表示为MN个具有如下形式的函数的和:
(4-4)
( , )
这些函数被称为DCT的基函数, 称为DCT系数。 视为每个基函数的加权系数[11]。
4.3.2DCT应用于图像压缩
DCT是先将整体图像分成M×N像素块,然后对M×N块像素逐一进行DCT变换。由于大多数图像的高频分量较少,相应于图像高频成分的系数经常为零,加上人眼对高频成分的失真不太敏感,所以可用更粗的量化,因此传送变换系数所用的数码率要大大小于传送图像像素所用的数码率。到达接收端后再通过反离散余弦变换回到样值,虽然会有一定的失真,但人眼是可以接受的。
N代表像素值,一般N=8, 8×8的二维数据块经过DCT后变成8×8个变换系数,这些系数都有明确的物理意义:U代表水平像素号,V代表垂直像素号。如当U=0,V=0时,F(0,0)是原64个样值的平均,相当于直流分量,随着U、V值的增加,相应的系数分别代表逐步增加的水平空间频率和垂直空间频率分量的大小。
在JPEG图像压缩算法中,输入图像被分成8×8或16×16的小块,然后对每一个小块进行二维DCT变换,变换后系数量化、编码并传输,JPEG文件解码量化了的DCT系数,对每一块计算二维DCT变换,最后把结果块拼成一个完整的图像。在DCT变换后舍弃那些严重影响图像重构接近0的系数。如下面程序所示:
I = imread('原图像 ');
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);
imshow(I)
title('原始图像');
figure;
imshow(I2)
title('压缩后的图像');
运行程序后得到:
Name Size Bytes Class
I 311x253 78683 uint8 array
Grand total is 78683 elements using 78683 bytes
Name Size Bytes Class
I2 256x256 524288 double array
Grand total is 65536 elements using 524288 bytes
4.4DCT算法压缩图像结果的分析
图4.2 DCT压缩前后的图像
压缩后的数据及图像如上述所示,这当然不能完全反映构后图像的质量,因为需要用到信噪比去反映整个图像的失真程度。
4.5小波变换压缩
将小波分析引入图像压缩的范畴也是一个重要的手段,并且有着它自己的特点。小波变换压缩的特点在于压缩比高、压缩速度快,压缩后能保持信号与原图像的特征基本不变,且在传输过程中可以防干扰等等。
一个图像作小波分解后(见本文第2章内容),可得到一系列不同分辨率的子图像,不同分辨率的子图像对应不的频率是不相同的。高分辨率子图像上大部分点的数值都接近于0,分辨率越高越明显。而对于一个图像来说,表现图像最主要的部分是低频部分,所以最简单的压缩方法是利用小波分解去掉图像的高频部分只保留低频部分。下面程序实现了小波变换压缩。
clear
X=imread('原图像'); %装入图像
X=rgb2gray(X);%将图像转为灰度图像
subplot(221);
imshow(X); %显示图像
title('原始图像');
axis square
disp('压缩前图像X的大小');
whos('X')
[c,s]=wavedec2(X,2,'bior3.7'); %对图像用小波进行层分解
cal=appcoef2(c,s,'bior3.7',1); %提取小波分解结构中的一层的低频系数和高频系数
ch1=detcoef2('h',c,s,1); %水平方向
cv1=detcoef2('v',c,s,1); %垂直方向
cd1=detcoef2('d',c,s,1); %斜线方向
a1=wrcoef2('a',c,s,'bior3.7',1);
h1=wrcoef2('h',c,s,'bior3.7',1);
v1=wrcoef2('v',c,s,'bior3.7',1);
d1=wrcoef2('d',c,s,'bior3.7',1);
c1=[a1,h1;v1,d1]; %各频率成份重构
subplot(222);
image(c1);
axis square; %显示分频信息
title ('分解后低频和高频信息');
%进行图像压缩
%保留小波分解第一层低频信息
%首先对第一层信息进行量化编码
ca1=appcoef2(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
ca1=0.5*ca1;
subplot(223);
image(ca1);
axis square;
title('第一次压缩图像');
disp('第一次压缩图像的大小为:');
whos('ca1')
ca2=appcoef2(c,s,'bior3.7',2);
ca2=wcodemat(ca2,440,'mat',0); %保留小波分解第二层低频信息进行压缩
ca2=0.25*ca2; %首先对第二层信息进行量化编码
subplot(224);
image(ca2);
axis square;
title('第二次压缩图像');
disp('第二次压缩图像的大小为: ');
whos('ca2')
运行上述程序,得到如下图
图4.3 小波变换压缩前后的图像
压缩前图像X的大小:
Name Size Bytes Class
X 311x253 78683 uint8 array
Grand total is 78683 elements using 78683 bytes
第一次压缩图像的大小为:
Name Size Bytes Class
ca1 163x134 174736 double array
Grand total is 21842 elements using 174736 bytes
第二次压缩图像的大小为:
Name Size Bytes Class
ca2 89x74 52688 double array
Grand total is 6586 elements using 52688 bytes
可以看得出,第一次压缩时我们提取的原始图像中小波第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3) 。第二次压缩时提取第一层分解低频部分的低频部分进行再压缩,其压缩比较大(1/12) ,压缩效果在视觉上也基本过得去。
保留原始图像中低频信息的压缩办法只是一种最简单的压缩办法。它不需要经其他处理即可获得较好的压缩效果。
4.6本章小结
本章首先讲述了图像压缩的出发点,说明图像压缩在医学图像处理中的必要性。然而,医学图像的压缩的方法选取也是至关重要的,通过将图像压缩编码,如采用余弦离散变换(DCT)、小波变换压缩,这样就可以减少图像的数据量,更容易于存储,处理和传输。有大量的图像作为依据,医生就可以随时对病人作出准确的诊断。
从上面论术可以知道DCT本身不是用来压缩的,只是把数据组织得便于压缩而已,特别是用于有损压缩。DCT变换后的数据如果不经量化,再反变换后是可以无损还原的。简而言之,DCT变换后的数据,左上角的非常重要,要精确存储,右下角的可以粗略存储,甚至扔掉也没关系。
小波变换能够很好地消除图像数据中的统计冗余,对图像压缩比较好,而且图像重构输出质量非常高。因此可以说,小波变换编码是一种比较好的压缩编码技术。
从理论上讲,小波变换压缩可以获取任意压缩比的压缩图像。只不过对压缩比和图像质量都有较高的要求时,它的效果就不如其它编码方法了。很好的低码率压缩效率,传统的JPEG使用DCT,需将图像分块,限制了图像的压缩倍数;而小波是基于整幅图像处理,可实现高压缩比,避免了“分块”效应。医生应根据实际情况来选取不同的压缩方法,这样就可以应对不同的情况。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>