日记存档 (2005.3.4~2005.3.18)
今天把JPEG标准(ITU T.81 即 ISO/IEC 10918-1)里关于Baseline process的部分看完了.
印象不是很深,完全实现起来也很麻烦.接下来就要看看JFIF文档了.
估计还要看一遍JPEG标准,而且同时要看别人JPEG编码解码程序的实现才行.
测了一下,以前写的CODEC,把25幅bmp压成jpeg需要3~4秒.
是在CY 1.2G的机器上测的.
以前写得太烂了,而且很不规范.要重写,加优化到至少0.5秒以内.
主机端应该可以做到,手持端就比较麻烦了,才100M.
FT.
2005.3.4
看了JFIF标准.
看了1999年Cristi Cuturicu写的JPEG codec algorithm和note.
感觉encoder简单,而decoder比较麻烦,要处理的东西多.
他的decoder写得有些乱了.基本流程还能看懂.
对scaled AA&N DCT不明白,和我原来用的方法不一样.
而且色彩空间转换也不是按照转换矩阵直接算的,作了优化,不太直观.
整理了一下CODEC里用到的marker,syntax和procedure.
2005.3.5
今天上午到教室里看书.
下午开始写开题报告了.
写了文献综述里的第一部分.列了几个标准:
H.261标准(ITU H.261)
H.263标准(ITU H.263)
JPEG标准(ISO/IEC 10918 ITU T.81)
MJPEG格式
MPEG-1标准(ISO/IEC 11172)
MPEG-2标准(ISO/IEC 13818)
MPEG-4标准(ISO/IEC JTCI/SC29/WG11 N4668)
画了一下系统框图.纸上谈兵罢了...
2005.3.6
累死了,写开题报告,还没写完.
抄也累,宁可做点有实质意义的东西.
扫了一下IJG库里的色彩空间转换方法,基本方法算是明白了.
就是把方程组里的浮点比例扩大成整数,避免浮点运算,
最后除(用位移替代,加速)以比例因子.
但还有很多细节,用来防止数据溢出.
2005.3.7
昨天把开题报告写完了.
这两天看IJG编解码代码里的FDCT和IDCT.
FDCT和里面用的AANSCALE_FACTOR,我终于看懂是什么意思了,和我原来用的公式是相通的.就是把比例因子提出来.最后量化用乘法,而不用除法.
但理论上还是没解释通,不知道怎么把S矩阵提出来.
唉,线性代数没学好...还是查资料看看...
IDCT实在是看不懂,和我用转置矩阵求出来的流图对不上.
但我的流图应该是没错,试过了.但运算量肯定比IJG的大:
源数据:
140 144 147 140 140 155 179 179
144 152 140 147 140 148 167 179
152 155 136 167 163 162 152 172
168 145 156 160 152 155 136 160
162 148 156 148 140 136 147 162
147 167 140 155 155 140 136 162
136 156 123 167 162 144 140 147
148 155 136 155 152 147 147 136
DCT后(QValue = 100, 品质最好, 量化步长=1)
187 -19 15 -10 24 -10 -14 -19
21 -35 27 -10 -10 10 14 7
-10 -24 -1 5 -17 3 -20 -1
-8 -6 15 -15 -8 -3 -3 8
-3 9 9 1 -10 18 19 15
4 -3 -18 8 9 -4 1 -7
9 0 -3 3 -1 -8 -1 -2
0 -8 -2 1 1 4 -6 0
重构:
140 144 147 140 140 155 179 179
144 152 140 147 140 148 167 179
151* 155 136 167 164* 162 152 173*
168 145 156 160 153* 155 136 160
162 148 156 148 140 136 147 162
146* 167 140 155 155 140 136 162
136 156 123 167 162 144 140 147
148 155 136 155 152 147 147 136
带*的数值不一样,可能是浮点误差.不太清楚.
用double和float一样.
2005.3.9
这两天,做了一些基础工作.
学习和小结了一下几种基本数据类型的输入输出,
做了几个实验:
Dev-C++下关于float/double类型的实验
Dev-C++下关于char类型的实验
Dev-C++下关于几种int类型格式符的实验
Dev-C++下关于long long类型的实验
http://blog.csdn.net/jx_kingwei/
发现好多问题不懂...唉,汗颜~~~~~~
2005.3.11
看了一天的矩阵,晕死了.
IDCT搞不定啊.
~~~~~~~~~~~~~~~~~~~~~~~~
2005.3.14
FDCT/IDCT终于看出些门道了....
都是矩阵倒来倒去.
呵呵,虽然偶的IDCT和IJG库里用的流程不一样,
不过算法复杂度也差不多了~~~~~~~~~
2005.3.15
今天开题,被问傻掉了...
下午和晚上,写了两个模块:
stream.cpp和ycbcr.cpp
IJG色彩空间转换的方法太变态的~~~~~
都不知道精度如何.还是方程好理解.
Y = 0.29900*R + 0.58700*G + 0.11400*B
Cb = -0.16874*R - 0.33126*G + 0.50000*B + 128
Cr = 0.50000*R - 0.41869*G - 0.08131*B + 128
R = Y + 1.40200*(Cr-128)
G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128)
B = Y + 1.77200*(Cb-128)
2005.3.16
这两天在写色彩空间转换和子采样部分.
为了411,422,444三种采样格式,写了6个函数,
来完成子采样,和向上采样过程.
原来想用两个函数统一完成.
可惜太麻烦,判断多了,速度也会变慢.
还是分开,用函数指针调用好了.
原来用的跳点的方法,在色块边缘失真太严重了.
要取均值.现在效果好多了.
呵呵~~~~~
2005.3.18