📄 dct.h
字号:
#ifndef DCT_H
#define DCT_H
#include "memory.h"
#include <cmath>
using namespace std;
const double PI=3.1415926;
template<typename T>
void dct(T* data,T* dctdata,int length)
{
memset(dctdata,0,sizeof(T)*length);
T a1=sqrt(1/(T)length);
T a2=sqrt(2/(T)length);
for (int j=0;j<length;j++)
{
for(int i=0;i<length;i++)
{
dctdata[j]+=data[i]*cos(((2*i+1)*j*PI)/(2*length));
}
j==0?dctdata[j]=dctdata[j]*a1:dctdata[j]=dctdata[j]*a2;
}
}
template<typename T>
void dct2(T* data,T* dctdata,int R,int C)
{
memset(dctdata,0,sizeof(T)*R*C);
T* temp_row=new T[C];
T* temp_colmn0=new T[R];
T* temp_colmn=new T[R];
//对每一行做变换
for (int i=0;i<R;i++)
{
dct(data+i*C,temp_row,C);
memcpy(data+i*C,temp_row,sizeof(T)*C);
}
for (int j=0;j<C;j++)
{
for (i=0;i<R;i++)
temp_colmn0[i]=*(data+i*C+j);
dct(temp_colmn0,temp_colmn,C);
for (i=0;i<R;i++)
*(dctdata+i*C+j)=temp_colmn[i];
}
delete []temp_row;
delete []temp_colmn0;
delete []temp_colmn;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -