研一上很快过去了,留下了若干课程资料的文件夹。最近整理一下这些资料,挑选一些有用的课程作业贴到博客里面来。
1. 简介
JPEG是最常用的有损图像压缩算法,而8×8的二维DCT(离散余弦变换)变换和量化又是该算法中的核心步骤。本文作业的例子,是针对一个8×8的数据块进行正反二维DCT变换、量化和反量化。
2. 作业题目
逐个读入8×8(十六进制文本串格式的)亮度数据块,依次进行二维DCT变换、量化(采用标准亮度量化表)、逆量化和逆二维DCT变换。输出原始数据、变换后的数据、量化表、量化后的数据、逆量化的数据和反变换的数据。
3. 过程
4. 源码
/*
* main.cpp
*
* Created on: 2016.10.17
* Author: liboyang
*/
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <fstream>
#include <string>
#include <iomanip>
#define MAXSIZE 64
#define COL 8
#define ROW 8
#define PI 3.1415926
using namespace std;
int Char2Int(char c);
void getIntInput(int index, int counterRow, string input);
void DCT(int index);
void IDCT(int index);
void Quantisation(int index);
void inverseQuantisation(int index);
string inputString[4][ROW];
int inputInt[4][ROW][COL];
double outputDCT[4][ROW][COL];
double outputIDCT[4][ROW][COL];
double outputQuan[4][ROW][COL];
double outputInverseQuan[4][ROW][COL];
int quantisationChart[ROW][COL]= {
{
16,11,10,16,24,40,51,61},
{
12,12,14,19,26,58,60,55},
{
14,13,16,24,40,57,69,56},
{
14,17,22,29,51,87,80,62},
{
18,22,37,56,68,109,103,77},
{
24,35,55,64,