Image processing 如何将DCT块转换回颜色值?
所以我试着用这个 在我的图像处理作业中,我们应该对图片应用DCT。(8x8块)Image processing 如何将DCT块转换回颜色值?,image-processing,colors,compression,jpeg,dct,Image Processing,Colors,Compression,Jpeg,Dct,所以我试着用这个 在我的图像处理作业中,我们应该对图片应用DCT。(8x8块) 静态公共双[,]Dct(双[,]数组) { double[,]dct=新的double[N,M]; 双因子=Math.PI/(N*M); //离散余弦变换 for(int i=0;i
静态公共双[,]Dct(双[,]数组)
{
double[,]dct=新的double[N,M];
双因子=Math.PI/(N*M);
//离散余弦变换
for(int i=0;i
这是我用于正向转换的方法。
8x8块上的结果如下所示
但是尝试恢复“颜色块”(在本例中,它用于rgb颜色的“蓝色”值)。
使用此代码:
static public double[,] inverseDct(double[,] array)
{
double[,] colorBlock = new double[N, M];
double factor = Math.PI / (N * M);
//dct
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
double sum = array[0, 0] / 2;
for (int k = 0; k < M; k++)
{
int l = 0;
if (k == 0) l = 1;
for (; l < N; l++)
{
sum += array[k, l] * Math.Cos((k * M + l) * ((i * M + j) + 0.5) * factor);
}
}
colorBlock[i, j] = (int) sum;
}
}
return colorBlock;
}
静态公共双[,]反向CT(双[,]阵列)
{
双色[,]色块=新双色[N,M];
双因子=Math.PI/(N*M);
//离散余弦变换
for(int i=0;i
它似乎无法正常工作,因为(上图中蓝色值块)的输出现在显示:
我在这里发布了我的全部代码:
如何从DCT块中获取“颜色””值?(进行反向变换?我注意到的第一个算法问题(没有寻找其他问题):在正向DCT中,系数是每个值的总和,乘以余弦因子。在逆DCT中,取一个系数,然后将其乘以余弦因子,加到每个值上。您的“colorBlock”应该位于最里面的循环中。提示:
public static double[]InverseTransform(double[]vector)
:在指定数组上计算未缩放的DCT类型III,并返回一个新数组。
static public double[,] inverseDct(double[,] array)
{
double[,] colorBlock = new double[N, M];
double factor = Math.PI / (N * M);
//dct
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
double sum = array[0, 0] / 2;
for (int k = 0; k < M; k++)
{
int l = 0;
if (k == 0) l = 1;
for (; l < N; l++)
{
sum += array[k, l] * Math.Cos((k * M + l) * ((i * M + j) + 0.5) * factor);
}
}
colorBlock[i, j] = (int) sum;
}
}
return colorBlock;
}