其中0≤i,j≤n﹣1。图像被分成n×n个像素块 ,通常取n=8。n 并不是越大越好,因为随着n的增大,数据的计算量成指数增加,所以在给n取值的时候需要根据计算机的性能进行权衡。
通过上面的公式进行了DCT变换之后,每个n×n的像素块的能量都往左上角集中了,如果需要进行有算压缩,则可以将变换后产生的矩阵进行量化,量化的越厉害则能够获得最大的压缩比,当然这一切都是以图像质量的损失来换取的。
将变换后的数据进行还原成为逆变换,上面的公式的逆变换公式IDCT为:
7、VB对二维DCT变换的实现
真彩色图像以24位来表示一个像素的颜色,其中红、绿、蓝分别占用8位。考虑到同一个像素的红、绿、蓝三色的分布并不均匀,因此将三种颜色分别进行处理,这样就实现了将一张真彩色图像转换成了三张256阶灰度图像来处理,以达到增加压缩效果的目的。
利用VB对红色分量的图像数据进行DCT编码的代码如下:
For i = 0 To 7
If i = 0 Then ci = 0.7071 Else ci = 1
For j = 0 To 7
If j = 0 Then cj = 0.7071 Else cj = 1
g(i, j) = 0.25 * ci * cj
tempdata = 0
For x = 0 To 7
For y = 0 To 7
tempdata = tempdata + (pdata_r(i8 + x, j8 + y) * Cos((2 * y + 1) * j * PI / 16) * Cos((2 * x + 1) * i * PI / 16))
Next y
Next x
g(i, j) = g(i, j) * tempdata
Write #2, Round(g(i, j), 2);
Next j
Next i
文章来源于领测软件测试网 https://www.ltesting.net/