// 对亮度信号进行FDCT变换
// @param data 亮度信号的存储数组
void CompressEncode::standardFDCT(BYTE data[MATRIXSIZE][MATRIXSIZE])
{
BYTE output[MATRIXSIZE][MATRIXSIZE];
double alpha, beta;
short u = 0, v = 0;
short x = 0, y = 0;
for (v = 0; v < MATRIXSIZE; ++v) { // 垂直
for (u = 0; u < MATRIXSIZE; ++u) { // 水平
// 设定C(u),C(v)系数
alpha = 1;
if (u == 0) alpha = sqrt(1.0 / 2.0);
beta = 1;
if (v == 0) beta = sqrt(1.0 / 2.0);
double tmp = 0.0;
for (x = 0; x < MATRIXSIZE; ++x) {
for (y = 0; y < MATRIXSIZE; ++y) {
// DCT接收的自变量值域为[-128,127], 所以各变量要减128
tmp += (data[x][y] - 128)
*cos((2 * x + 1)*u*M_PI / (2.0*MATRIXSIZE))
*cos((2 * y + 1)*v*M_PI / (2.0*MATRIXSIZE));
}
}
output[u][v] = round_double((alpha*beta / 4) *tmp);
}
// 把变换结果写回到原缓冲区
memset(data, 0, MATRIXSIZE*MATRIXSIZE * sizeof(BYTE));
memcpy(data, output, MATRIXSIZE*MATRIXSIZE * sizeof(BYTE));
}
}
相关文章
- 02-28分治法:多项式乘法,快速傅里叶变换
- 02-28三角恒等变换公式
- 02-28[问题2014A02] 解答三(降阶公式法)
- 02-28FDCT变换 公式法
- 02-28冈萨雷斯144页频率域冲激串逆傅里叶变换公式证明
- 02-28时间复杂度分析--公式法
- 02-28快速傅里叶变换的迭代法代码实现
- 02-28hdu5358 推公式+在一个区间内的尺取+枚举法
- 02-28傅里叶变换公式推导
- 02-28C语言编程-8_8 公式求解 牛顿迭代法求解方程