RockCarry 发表于 2007-7-3 13:34

[原创]讲一下量化压缩与量化补偿

<P>讲一下量化压缩与量化补偿吧</P>
<P>在进行色彩格式转换的时候,经常会遇到色彩量化位数的改变,比如说从 24bit RGB888 到 16bit RGB565 的色彩转换。所谓量化压缩与量化补偿都是我个人所提出的概念,现说明如下。</P>
<P>量化压缩,举例:<br>24bit RGB888 -&gt; 16bit RGB565 的转换<br>24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0   G7 G6 G5 G4 G3 G2 G1 G0   B7 B6 B5 B4 B3 B2 B1 B0<br>16bit RGB656          R7 R6 R5 R4 R3         G7 G6 G5 G4 G3 G2            B7 B6 B5 B4 B3 <br>量化位数从8bit到5bit或6bit,取原8bit的高位,量化上做了压缩,却损失了精度。</P>
<P>量化补偿,举例:<br>16bit RGB565 -&gt; 24bit RGB888 的转换<br>16bit RGB656          R4 R3 R2 R1 R0         G5 G4 G3 G2 G1 G0            B4 B3 B2 B1 B0 <br>24ibt RGB888 R4 R3 R2 R1 R0  0  0  0   G5 G4 G3 G2 G1 G0  0  0   B4 B3 B2 B1 B0  0  0  0<br>24ibt RGB888 R4 R3 R2 R1 R0 R2 R1 R0   G5 G4 G3 G2 G1 G0 G1 G0   B4 B3 B2 B1 B0 B2 B1 B0<br>说明:第二行的 24bit RGB888 数据为转换后,未进行补偿的数据,在精度上会有损失<br>      第三行的 24bit RGB888 数据为经过量化补偿的数据,对低位做了量化补偿<br>可以很容易的证明,这样的补偿方法是一种合理的线性补偿。补偿的原理很简单,大家仔细想一下就明白了,因此不再详细说明。</P>
<P>总结一下:<br>量化压缩的方法:三个字取高位<br>量化补偿的方法:<br>    1. 将原数据填充至高位<br>    2. 对于低位,用原始数据的低位进行补偿<br>    3. 如果仍然有未填充的位,继续使用原始数据的低位进行循环补偿</P>
<P>解释一下循环补偿的概念:<br>8bit RGB332 -&gt; 24bit RGB888 的转换<br>8bit  RGB332                R2 R1 R0                  G2 G1 G0                    B1 B0<br>24bit RGB888 R2 R1 R0  0  0  0  0  0   G2 G1 G0  0  0  0  0  0  B1 B0  0  0  0  0  0  0<br>24bit RGB888 R2 R1 R0  0  0 R2 R1 R0   G2 G1 G0  0  0 G2 G1 G0  B1 B0  0  0  0  0 B1 B0<br>24bit RGB888 R2 R1 R0 R1 R0 R2 R1 R0   G2 G1 G0 G1 G0 G2 G1 G0  B1 B0  0  0 B1 B0 B1 B0<br>24bit RGB888 R2 R1 R0 R1 R0 R2 R1 R0   G2 G1 G0 G1 G0 G2 G1 G0  B1 B0 B1 B0 B1 B0 B1 B0<br>看了这个,应该明白则么回事了吧,其中B分量,进行了四轮的补偿,达到要求。<br>量化补偿的必要性,从直觉上讲,我所提出的这种补偿方法是正确的(因为我并没有严格的去证明),进行这样的补偿,在做色彩各式转换的时候,能够明显的改善色彩效果,减少精度上的损失。</P>
<P>对256色调色板模式的认识和应用,顺便讲一下这个,因为量化压缩和量化补偿刚好可以应用到调色板模式下。大家都知道,很早以前就有人提过出256色的标准调色板的概念(有的人又称之为抖动调色板或者万能调色板),其实这样的调色板并不神秘。256色中,一个像素点用8bit表示,那么如果采用 8bit RGB332 的格式,一切问题都可以想通,并且可以进行很好的处理了。对于每个 RGB332 的颜色,都可以使用量化补偿的做法,将其转换为 24bit RGB888 的颜色格式,然后将其设置为调色板即可。这样,实质上是将256色调色板模式,转换为了 8bit RGB332 的像素格式。这样的调色板方式,更加利于某些方面的处理,比如调色板匹配、Alpha混合等。由于采用了这样的方法,一个像素点的颜色值,与其实际的RGB颜色值,可以很方便的通过量化补偿的方法转换出来,然后就可以对各个颜色分量进行计算,计算完毕,再使用量化压缩的方法,就可以生成最终需要的颜色值。而所谓的调色板匹配的问题,当然也更加好解决了。关键是要把问题想通,把握事物的本质,才能找到简单而优美的解决问题的方法。</P>
<P>以前我对标准调色板的认识也存在很多错误,导致在分析和解决问题上,没有能找到最好的方法。网上也有许多人写过有关256色模式下 Alpha Blending 的文章,但是都存在许多认识上的不足,导致最后给出的算法时间和空间的复杂度都太大。我也有过一篇有关256色Alpha混合的文章,但限于当时对事物的认知能力,因此现在看来以前的许多文章是惨不忍睹。大家都在进步,以后有机会再将新的认识写成文章,同大家分享。</P>
<P>今天就说到这儿吧。</P>
<P><br>              RockCarry<br>              2007-7-3 </P>
<P><br></P>
[align=right][color=#000066][此贴子已经被作者于2007-7-3 15:00:10编辑过][/color][/align]

jig 发表于 2007-7-3 13:52

<P>顶~~<BR><BR>藏了~~</P>

一笔苍穹 发表于 2007-7-8 11:35

恩,标准调色板在匹配图片时不一定最好,但匹配速度和Alpha效果方面的确是首屈一指的,譬如匹配颜色吧,用它的话根本不用算什么R\G\B分量的接近度,用宏做一个量化压缩就可以把真彩匹配过来了。如此一来在256色下面显示真彩图片的确比使用最佳匹配法快多了。以前吴进的TC256使用的就是这个调色板。NEO中也引用了这个调色板,用以实现8位模式下的快速真彩图显示

页: [1]

编程论坛