内容发布更新时间 : 2024/12/22 16:08:29星期一 下面是文章的全部内容请认真阅读。
图像编码
—— 图像处理第G 组
LZW编码:
LZW编码对信源输出的不同的长度的符号序列分解固定的长度的码字,且不需要有关符号出现的概率的知识。LZW编码方法是一种字典方法,在编码的开始阶段要构造一个对信源符号进行编码的码本(字典)。 方法:
对于一个固定灰度的图像,开始时字典储存图像所要表示的灰度范围。比如8比特灰度,那么字典初始化就有0-255灰度条目。对于编码后的字典条目,直接在后面添加。
在编码时,当前识别序列和字典条目,我们采取了数组的储存方式,但也尝试过采取使用MATLAB中的元胞类型,但编码的效率很低速度很慢。这是由于在查找字典匹配序列时,使用元胞类型时在电脑的运行内部要经常进行指针的大范围的跳转,查找效率很低。采用了数组储存后指针指在小范围内移动效率得到明显的提高。
编码的规则很简单。对图像从行列进行像素扫描,对于第一个像素不进行输出,只当作下一次的当前识别序列。而对其它的有当前事变序列连接上当前处理的像素值组成一个序列,如果该序列能在字典里找到对应的序列,那么该序列作为下一个的当前序列其它什么也不做。如果不能找到,则编码输出当前识别序列的字典中的索引值。这样一直到最后,把最后一个当前的识别序列的字典的索引值直接作为编码接在编码输出序列后面。 对于解码来说,也采用上面的数组的储存结构。我们只要以编码值在对应建立的字典中去找到对应的字典条目输出就可以的。但这里存在着一个问题,对一些连续的出现相同的像素的编码值,在解码时不能在字典里面找到字典条目。 难点:正确的解码。 解决方法:
对于不能在字典中找到的条目,采用条件判断,之后取前面的识别序列连接上识别序列的第一个像素值作为像素序列的输出和字典输出,当结束后再把当前处理的编码值赋给识别序列。一切就很正常的进行了
由于LZW编码,在编码时运算量特别大,所以编码的效率很低。主要有几个原因:
1、对算有像素都要进行一次扫描
2、对于很少出现相似的像素,字典会非常大 3、每一次都要去查找一下字典 改进方法:
1、选取图像像素的最大值(如果少于255,那么可以减少字典大小,同时减少一些计算量)
2、采用向后查找方式
3、对于字典储存方式上的数组改进方式。
哈夫曼编码:
对于课本上的哈夫曼编码的方法。
S1 S2 S3 S4 S5 S6
0.4 0.3 0.1 0.1
0.06 0 0.04 1 0.4 0.3 0.1 0.1 0 0.1 1 0.4 0.4 0.6 0 0.3 0.3 0 0.4 1 0.2 0 0.3 1 0.1 1
我们提出了一种新的实现哈夫曼编码的方法.
编号 1 2 3 4 5 6 符号 A1 A2 A3 A4 A5 A6 1 0.4 0.2 0.15 0.1 0.1 0.05 2 1 0.4 2 0.2 3 1 0.4 4 1 0.4 5 2 0.7 5 0.25 2 0.35 1 0.4 5 0.25 3 0.15 2 0.2 5 0.15 3 0.15 4 0.1 对初始排好序的信源符号按概率降序编号,如果左边所示。在运算时记录相加的两个概率的降序号,同时把相加概率赋给先序的符号,再排序。如此重复到最后。 5 0100 6 0101 由此可知: 5 010 4 011 2 000 3 001 2 00 5 01 2 0 1 1 A1: 1 A2: 000 A3: 001 A4: 011 A5: 0100 A6: 0101
编码的效率: 97%
1-D游程编码与解码: