第5章-1--图像编码.ppt
文本预览下载声明
* DCT变换编码 原图 解压图 如果将一幅图像作为一个二维矩阵,则其正交变换的计算量也太大,难以实现,所以在实用中变换编码并不是对整幅图像进行变换和编码,而是将图像分成若干个n×n的子图像后分别处理,原因如下: (1)小块图像的变换计算容易。 (2)距离较远的像素之间的相关性比距离较近的像素之间的相关性小。 2.子图像尺寸的选择 3.变换系数的选择 对子图像经过变换后,变换后的系数保留哪些系数用作编码和传输将直接影响信号恢复的质量,变换系数的选择原则是保留能量集中的、方差大的系数。 系数选择通常有变换区域编码和变换阈值编码两种方法。 (1)变换区域编码 变换区域编码就是对设定形状的区域内的变换系数进行量化编码,区域外的系数就被舍去。一般来说,变换后的系数值较大的都会集中在区域的左上部,即低频率分量都集中在此部分,保留的也是这一部分。其他部分的系数被舍去,在恢复信号时再对它们补以零。这样,由于保留了大部分图像信号能量,在恢复信号后,其质量不会产生显著变化。 实验研究指出,以均方误差为准则的最佳区域是所谓的最大方差区域,一般具有最大方差的系数集中于接近图像变换的原点处(左上角为原点),典型的分区模板如图5.4.2所示(阴影部分为保留系数)。在分区采样过程里保留的系数需要量化和编码,所以分区模块中的每个元素也可用对每个系数编码所需的比特数表示,典型的分区比特分配如图5.4.3所示。 变换区域编码的明显缺陷,就是高频分量丢失。反映在恢复图像上将是轮廓及细节模糊。克服这一缺陷的方法,可以预先设定几个区域,根据实际系数分布自动选取能量最大的区域。 1 1 1 1 1 0 0 0 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 图5.4.2 典型的分区模板 图5.4.3 典型的分区比特分配 8 7 6 4 3 2 1 0 7 6 5 4 3 2 1 0 6 5 4 3 3 1 1 0 4 4 3 3 2 1 0 0 3 3 3 2 1 1 0 0 2 2 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 (2)变换阈值编码 变换阈值编码就是根据实际情况设定某一大小幅度的阈值,若变换系数超过该阈值,则保留这些系数进行编码传输,其余的补以零。这样,多数低频成分被编码输出,而且少数超过阈值的高频成分也将被保留下来进行编码输出,这在一定程度上弥补了区域法的不足,但这种选择系数的方法有两个问题需要解决:一个是被保留下来进行编码的系数在矩阵中的位置是不确定的,因此,尚需增加“地址”编码比特数,其码率相对地要高一些;另一个问题是“阈值”需要通过实验来确定,当然也可以根据总比特数,进行自适应阈值选择,但需要一定的技术,将增加编码的复杂程度。 图5.4.4(a)为8×8原始图像的灰度分布矩阵,经过哈达玛变换后,变换系数分布如图5.4.4(b)所示。假定表示图像像素位置的行号、列号均以4位表示,设阈值大于10,变换系数统一用7比特编码,则对于图5.4.4(b)来说,编码输出总码长为45比特,具体编码为0000 0000 0111101 0001 0001 0011001 0110 0110 0010101。 (a)原始图像的灰度矩阵 (b)哈达玛变换系数矩阵 图5.4.4 阈值编码示例 例5.4.1 图5.4.5(a)为原始图像,用MATLAB编程实现将原始图像分割成8×8的子图像,对每个子图像进行DCT,这样每个子图像有64个系数,舍去50%小的变换系数,进行2:1的压缩,显示解码图像。 MATLAB源代码如下: clear; cr=0.5; initialimage=imread(baboon.bmp); %读取原图像 imshow(initialimage); %显示原图像 title(原始图像) initialimage=double(initialimage); t=dctmtx(8); dctcoe=blkproc(initialimage,[8,8],P1*x*P2,t,t); %将图像分成8×8子图像,求DCT coevar=im2col(dctcoe,[8,8],distinct); %将变换系数矩阵重新排列 coe=
显示全部