HD Photo 怎么样定义DC/LOWPADD/HIGHPASS的?
HD的图象结构
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
12
|
13
|
14
|
15
|
HD Photo编码的单元是宏块,而变换的单元是块,每个块是4*4的像素点(有其他特殊情况这里不表),而宏块是4*4的块组成。
上图中的表格是16*16的像素块,是一个完整的宏块。
这样的划分是按照颜色分量来的,比如YUV色彩空间的Y分量,当然还有U和V分量。
HD 的变换
HD的PCT变换是针对宏块里的块进行的,实际上可以分为两个阶段:
1. 块单独PCT变换阶段;这个阶段宏块中的每个块执行对应的PCT变换;这个变换比较类似于DCT;变换后得到的结果也分为DC系数和AC系数,DC系数就是每个块的0位置,其他的都是AC系数。
2. 对于宏块中的每个块进行PCT变换后,得到的16个DC系数(如上图中兰色显示的),然后针对这个DC系数再进行PCT变换。这次变换后,我们得到DC的DC在左上角(绿色表示的位置),而其他的DC系数保留的是DC的AC系数。
HD带的定义
到目前位置我们可以来说明HD是如何定义其带的了。
1. DC;这个很简单,也就是上图中左上角(绿色表示的位置)。对于一个图像来说,可能存在很多个宏块,每个宏块的该位置变换后的系数都是DC,他们组成了DC带。对于整个图象来说,这是能量最集中的地方,我们可以在后面量化和编码的时候区分处理。
2. LOWPASS;从名字看叫低通,表示低频的信号保存在该频带;这个正如上图中兰色表示的区域(除了DC);这些区域也是能量高度集中的部分,他们保存了图象低频的信息,例如:连续色调图象的渐进色。
3. HIGHPASS:除了LOWPASS和DC外的所有系数都叫HIGHPASS(高通);这些系数保存图象的高频信息,也是图象轮廓信息所在。图中所有墨绿色的区域都是HIGHPASS。
HD变换的优点
从对HD变换过程的理解,HD的PCT变换具有这些优点:
1. 变换相对于JPEG2000的DWT确实是轻量级的;DWT的变换一般我5级,而这里的变换只有两级,而第二级是其原图象的16分之一。因此这里的运算量是少的。
2. 与JPEG的DCT比较起来,这里进一步找出了低频通道和高频通道,这个为后面自适应量化和变换提供了可以区分对待的依据。
JPEG2000高频区域和HD高频区域的比较
在看到的HD与JPEG2000的比较结果中发现,HD对高频部分误差的比较小,而对低频部分处理的不够好;为什么呢?
见连接。
首先来看看低频部分:
1. DWT的一个LEVEL的变换得到的是1/4的低频系数,5个level的DWT变换后,低频系数是原来的1/32。
2. HD中有DC和LOWPASS之分,我们可以设想这里的DC对应DWT的LL,结果2级变换后,低频能量高集中的仅仅是原来图象的1/256(1/16*1/16)。从这个角度可以看到为什么JPEG2000在低频部分的误差比HD要小。
那么为什么在同等压缩比的情况下JPEG2000的高频部分误差比较多呢?
实际上我们不能忽略另一个问题;就是随着压缩比的提高,HD在图象质量上并不表现的比JPEG2000好。
我想应该可以从这几个方面来得到答案:
1. HD的高频部分的系数占了大多数;从对低频系数的分析我们已经知道这点。所以同样压缩比的时候,HD包含了大部分的高频数据,所以误差相对较少。
2. HD的每个频带采用自适应的量化;采用的量化系数是不一样的,这相对于采用统一量化的JPEG2000来说还是有优势的。
3. 这点不是很清楚的就是HD怎么样来截断压缩流到指定大小的?我们知道JPEG2000中根据误差的值来均匀丢弃高频部分的系数;也就是DWT变换中分辨率较大中的系数。当然JPEG2000可以设定不同子带和分量丢弃码流的规则。因此一般有数据被丢弃的时候,频率越高的系数越可能被丢弃,从而带来了高频部分的误差。
那么为什么随着压缩比的提高,JPEG2000不在比HD差呢?
我想这个地方涉及到HD如何在高压缩比情况下丢弃数据;这个需要继续研究。
先来看看HD是如何量化和编码的?
在HD的编码之前,需要对不同的频带系数先量化。
不同的频带采用的量化系数是不一样;这个量化参数是由用户输入的,总体量化过程可描述为:
1. Y分量的量化系数一般直接来自于用户输入的系数。而U和V分量的数据一般是Y分量量化系数的2倍(如果小于10)或加上18。这样的分配比例可以保证在U和V分量上有较好的压缩。
2. 在不同的频带上量化系数梢有不同,主要的不同集中在高通频带的U和V分量上。在高频的这两个子带上的量化程度要较其他频带该U和V分量上的大。
实际上我们可以发现,变换之后的大部分系数是高频的,占63/64,而3/2的系数是U和V;对这些对图象视觉效果影响不明显的系数大幅度量化可以提高压缩比。
量化过后的系数就可以进行编码了。
每个宏块的DC块是首先被编码的;在完成量化之后,首先需要做的是对各参数的预测。预测的最基本目的是让被编码的系数变小,这里的方法也就是:
1. 首先块变换的系数分成3种类型:DC系数,ACDC系数(每个block的最左边一列和最上边一行,除了DC),AC系数(block其他的系数)。
2. 首先第一个宏块的没有办法通过预测来编码
3. 其他宏块通过前面(上面或左边)宏块来预测DC和ACDC的,基本上先对系数做与前一宏块当前位置系数的减法,保存的是差值,然后将差值送到编码器中。
4. 对于AC系数,通过上边或左边的ACDC系数来预测,其中通过上边还是左边的系数由低通转换的系数决定。
通过预测以后,系数变小,编码的效率提高。
在对系数编码的时候基于一个默认:DC使用8bit来编码,而LOWPASS和HIGHPASS使用4bit来编码。当然这个编码的bit数量会在编码过程中变化。
基于变化的bit来编码的目的,首先必须将每个待编码的系数分成高于8bit的部分和8bit范围的部分,不同的部分采用不同的编码环境。
如果在编码过程中发现系数总是比8(对于DC)或4(对于LOWPASS和HIGHPASS)大,那么在一个宏块编码后需要对相应的bit位增加,用更多的bit位来编码;如果小,那么减少编码使用的bit位来使用更少的bit位来编码。这里通过统计移位操作后的值是否大于0的数目来统计。
在编码过程中使用了自适应扫描的方式;开始的时候16个被扫描的系数按照最初的顺序被设置一个从32到0的逐渐变小的权值,但在扫描过程中一旦发现某个系数的移动8/4位以后的值仍然大于0,那么需要在他的权值上增加一;如果更新以后按照扫描顺序的两个位置的权值顺序不在是逐渐减小,这个时候需要交换扫描顺序。
HD中称这些仍然大于0的系数为显著系数。对他们的编码方法采用显著绝对值和RUN模式编码;而自适应扫描的目的是想将移位后系数仍然大于0的那些系数安排在扫描顺序的连路上,这样保证可以对这些系数有更好的编码。
这里有一个各频带系数在输入系数变化时的分布。
QPIndex = 10:
DC
|
0
|
1
|
2
|
|
iQP
|
20
|
20
|
20
|
|
iOffset
|
7
|
7
|
7
|
|
iMan
|
-858993459
|
-858993459
|
-858993459
|
|
iExp
|
4
|
4
|
4
|
|
iIndex
|
10
|
20
|
20
|
|
LP
|
0
|
1
|
2
|
|
iQP
|
20
|
20
|
20
|
|
iOffset
|
7
|
7
|
7
|
|
iMan
|
-858993459
|
-858993459
|
-858993459
|
|
iExp
|
4
|
4
|
4
|
|
iIndex
|
10
|
20
|
20
|
|
HP
|
0
|
1
|
2
|
|
iQP
|
20
|
40
|
40
|
|
iOffset
|
7
|
15
|
15
|
|
iMan
|
-858993459
|
-858993459
|
-858993459
|
|
iExp
|
4
|
5
|
5
|
|
iIndex
|
10
|
20
|
20
|
|
QPIndex = 40:
DC
|
0
|
1
|
2
|
|
iQP
|
96
|
104
|
104
|
|
iOffset
|
36
|
39
|
39
|
|
iMan
|
-1431655765
|
-1651910498
|
-1651910498
|
|
iExp
|
6
|
6
|
6
|
|
iIndex
|
40
|
58
|
58
|
|
LP
|
0
|
1
|
2
|
|
iQP
|
96
|
104
|
104
|
|
iOffset
|
36
|
39
|
39
|
|
iMan
|
-1431655765
|
-1651910498
|
-1651910498
|
|
iExp
|
6
|
6
|
6
|
|
iIndex
|
40
|
58
|
58
|
|
HP
|
0
|
1
|
2
|
|
iQP
|
96
|
208
|
208
|
|
iOffset
|
36
|
78
|
78
|
|
iMan
|
-1431655765
|
-1651910498
|
-1651910498
|
|
iExp
|
6
|
7
|
7
|
|
iIndex
|
40
|
58
|
58
|
|
QPIndex = 50
DC
|
0
|
1
|
2
|
|
iQP
|
144
|
176
|
176
|
|
iOffset
|
54
|
66
|
66
|
|
iMan
|
-477218588
|
-1171354717
|
-1171354717
|
|
iExp
|
7
|
7
|
7
|
|
iIndex
|
50
|
70
|
70
|
|
LP
|
0
|
1
|
2
|
|
iQP
|
144
|
176
|
176
|
|
iOffset
|
54
|
66
|
66
|
|
iMan
|
-477218588
|
-1171354717
|
-1171354717
|
|
iExp
|
7
|
7
|
7
|
|
iIndex
|
50
|
70
|
70
|
|
HP
|
0
|
1
|
2
|
|
iQP
|
144
|
352
|
352
|
|
iOffset
|
54
|
132
|
132
|
|
iMan
|
-477218588
|
-1171354717
|
-1171354717
|
|
iExp
|
7
|
8
|
8
|
|
iIndex
|
50
|
70
|
70
|
|
QPIndex = 100
DC
|
0
|
1
|
2
|
|
iQP
|
1280
|
1536
|
1536
|
|
iOffset
|
480
|
576
|
576
|
|
iMan
|
-858993459
|
-1431655765
|
-1431655765
|
|
iExp
|
10
|
10
|
10
|
|
iIndex
|
100
|
120
|
120
|
|
LP
|
0
|
1
|
2
|
|
iQP
|
1280
|
1536
|
1536
|
|
iOffset
|
480
|
576
|
576
|
|
iMan
|
-858993459
|
-1431655765
|
-1431655765
|
|
iExp
|
10
|
10
|
10
|
|
iIndex
|
100
|
120
|
120
|
|
HP
|
0
|
1
|
2
|
|
iQP
|
1280
|
3072
|
3072
|
|
iOffset
|
480
|
1152
|
1152
|
|
iMan
|
-858993459
|
-1431655765
|
-1431655765
|
|
iExp
|
10
|
11
|
11
|
|
iIndex
|
100
|
120
|
120
|
|
现在再来看看上面的问题:
HD是通过量化来控制压缩比的;随着压缩比的提高,HD对系数的量化是越来小,导致很大部分信息都已经丢失,因此他质量的损失是明显的。
但JPEG2000却不同时,他丢弃较高频率频带的数据,而且其丢弃也是按照计算的PCRTD-OPT算法来在一些截断点丢弃的,因此相对来说保证的图象质量应该接近最优化值。
到这里我们已经明白,HD随着压缩比的提高,其质量的损失接近于线性的或分段线性的;而JPEG2000的失真最优算法保证其每个截断点都应该在率失真曲线上。