JPEG2000的Kakadu源代码浅析之二:码流参数
JPEG2000的很多参数都与图像的预处理和分割有关。一般的彩色图像都具有三个分量,例如RGB,或者YUV等。在进行主要的图像分割之前,现要将原始图像信号去直流(所谓DC层进)并进行分量变换(主要是将RGB变换为YCbCr)。这里仅对彩色图像的一个分量或者黑白图像进行讨论。
第一个重要概念是参考网格(reference grid)。这相当于JPEG2000图像的基本坐标系。而图像区域相当于该坐标系下的某个偏移处(一般记作(XOsiz, YOsiz))开始,并以某个偏移(一般记作(Xsiz-1,Ysiz-1))为末尾的的矩形区域。对于不同的分量可能采用不同的二次采样,例如对于YCbCr的亮度分量采样一般比色差分量采样高。记X和Y方向上的采样间隔分别为:XRsiz(c)和YRsiz(c)。图像区域将被填充块分割的矩形网格划分成多个块。填充块分割网格起始点记作(XTOsiz, YTOsiz),网格的大小为(XTsiz, YTsiz)。很自然地,必须满足:0<=XTOsiz<=XOsiz,0<=YTOsiz<=YOsiz,XTOsiz+XTsiz>XOsiz, YTOsiz+YTsiz>YOsiz,以使最左上角的网格就包含第一个图像分割块。填充块的索引按照光栅顺序。填充块分割类似于JPEG中的以8×8为单位的编码分割,而后者是固定的。
对于不同二次采样频率的分量而言,虽然填充块分割在参考网格中的绝对大小是一样的,但是相同填充块内采样点的序号和个数都是不同的。具体的换算并不复杂,在此省略。
JPEG2000的核心工作子带分裂虽然是在每个填充块中进行的,但却对填充快内的采样点的坐标(并非参考网格上的绝对坐标,而是X和Y方向上的采样索引)却是敏感的,这个坐标要作为小波变换的参数。子带一般记作nBxBy,其中n是0或正整数,表示子带的分解层次(decomposition level),Bx和By取L或H,分别表示低通和高通。每个nLL子带具有一定的分辨率层次(resolution level),用r表示,r=NL-n,NL为最高分解层次。每个子带都有一块内存区间,保存整个图像在该子带上的信息。从而对填充块的子带分解,是在每个子带的存储区间上相应位置上填上信息,随着填充块操作的进行而顺次进行,直至完成整个图像。而合成是一个相反的过程。
对每个子带的信息进行子区分割,子区长宽大小限制为2的幂次。
(未完待续)