dct余弦离散c语言,离散余弦变换C语言实现(DCT)
离散余弦变换 实现了一维DCT、二维DCT及其反变换
void initDCTParam(int deg)
{
// deg 为DCT变换数据长度的幂
if(bHasInit)
{
return; //不用再计算查找表
}
int total, halftotal, i, group, endstart, factor;
total = 1 << deg;
if(C != NULL) delete []C;
C = (double *)new double[total];
halftotal = total >> 1;
for(i=0; i < halftotal; i++)
C[total-i-1]=(double)(2*i+1);
for(group=0; group < deg-1; group++)
{
endstart=1 << (deg-1-group);
int len = endstart >> 1;
factor=1 << (group+1);
for(int j = 0;j < len; j++)
C[endstart-j-1] = factor*C[total-j-1];
}
for(i=1; i < total; i++)
C[i] = 2.0*cos(C[i]*PI/(total << 1)); ///C[0]空着,没使用
bHasInit=true;
}
DCT变换过程可分为两部分:前向追底和后向回根
前向追底:
void dct_forward(double *f,int deg)
{
// f中存储DCT数据
int i_deg, i_halfwing, total, wing, wings, winglen, halfwing;
double temp1,temp2;
total = 1 << deg;
for(i_deg = 0; i_deg < deg; i_deg++)
{
wings = 1 << i_deg;
winglen = total >> i_deg;
halfwing = winglen >> 1;
for(wing = 0; wing < wings; wing++)
{
for(i_halfwing = 0; i_halfwing < halfwing; i_halfwing++)
{
temp1 = f[wing*winglen+i_halfwing];
temp2 = f[(wing+1)*winglen-1-i_halfwing];
if(wing%2)
swap(temp1,temp2); // 交换temp1与temp2的值
f[wing*winglen+i_halfwing] = temp1+temp2;
f[(wing+1)*winglen-1-i_halfwing] =
(temp1-temp2)*C[winglen-1-i_halfwing];
}
}
}
}
后向回根: void dct_backward(double *f,int deg)
{
// f中存储DCT数据
int total,i_deg,wing,wings,halfwing,winglen,i_halfwing,temp1,temp2;
total = 1 << deg;
for(i_deg = deg-1; i_deg >= 0; i_deg--)
{
wings = 1 << i_deg;
winglen = 1 << (deg-i_deg);
halfwing = winglen >> 1;
for(wing = 0; wing < wings; wing++)
{
for(i_halfwing = 0; i_halfwing < halfwing; i_halfwing++)
{
//f[i_halfwing+wing*winglen] = f[i_halfwing+wing*winglen];
if(i_halfwing == 0)
{
f[halfwing+wing*winglen+i_halfwing] =
0.5*f[halfwing+wing*winglen+i_halfwing];
}
else
{
dct余弦离散c语言,离散余弦变换C语言实现(DCT)相关推荐
- 图形基本变换c语言代码,图形变换-C语言课程设计.doc
学号 <> 课程设计报告 图形变换网络工程班级:16(3)姓名:指导教师:成绩: 计算机学院 2017 年 5月 10日 目录- 1 - 1 设计要求- 2 - 2 程序功能- 2 - 3 ...
- R语言进行Box-Cox变换
@R语言进行Box-Cox变换 R语言进行Box-Cox变换 Box-Cox变换是Box和Cox在1964年提出的一种广义幂变换方法,是统计建模中常用的一种数据变换,用于连续的响应变量不满足正态分布的 ...
- 二维离散余弦变换(DCT)与二维离散反余弦变换(IDCT)C语言实现
二维离散余弦变换(DCT)与二维离散反余弦变换(IDCT)C语言实现 实验目标 对一个8x8的矩阵进行DCT和IDCT然后在观察前者和后者的变化 实验准备 理论基础 二维离散余弦变换 F ( u , ...
- 升余弦滤波器与根升余弦滤波器
1 升余弦滚降滤波器有啥用? 1, 升余弦滚降滤波器本质上只是一个低通滤波器,只不过它的滚降因子(rolloff effect)会对波形的幅度产生一定影响,一般是降低了波形的幅度并且低通,2. 升余弦 ...
- 变换域信息隐藏--DCT
思想提出背景–空间域隐藏 空间域隐藏是基于位图分解的思想产生的,其主要方法是将秘密信息存储到载体不那么重要的部分中,这样即使改变了载体的部分信息后,载体从肉眼来看也不会有太大区别.这种隐藏方法的优点是 ...
- 二维dct变换例题_matlab进行二维DCT变换和二维DCT反变换
题目: matlab进行二维DCT变换和二维DCT反变换 在Matlab中,函数dct2 和函数idct2分别用于进行二维DCT变换和二维DCT反变换.下面以处理本次训练图像为例说明该余弦正反变换在M ...
- PFC离散元+3DEC离散元技术与应用学习
"离散元数值模拟仿真技术与应用"系列专题 专题一:PFC离散元仿真核心技术与应用 ①.理论基础及PFC入门②.FISH.PYTHON语言及COMMAND命令 ③.离散元模拟方法 ④ ...
- PFC离散元+3DEC离散元专题
"离散元数值模拟仿真技术与应用"系列专题 专题一:PFC离散元仿真核心技术与应用 ①.理论基础及PFC入门 ②.FISH.PYTHON语言及COMMAND命令 ③.离散元模拟方法 ...
- 基础004:R语言数据处理和变换——dplyr
dplyr 背景简介 安装和数据准备 常用函数 变量筛选select 数据筛选filter 排序arrange 创建新变量mutate 本文"植物微生物组"公众号原创,ID: pl ...
- 数据预处理(part1)--单个预测变量数据变换R语言
学习笔记,仅供参考,有错必纠 文章目录 单个预测变量数据变换 中心化与标准化 知识补充 R语言实现 数据变换解决偏度问题 R语言实现 单个预测变量数据变换 中心化与标准化 中心化是将所有变量减去其均值 ...
最新文章
- php 尾递归,关于尾递归的使用详解
- 如何限制用户的内存使用量
- Hive 常见问题与技巧【Updating】
- [react] 受控组件和非受控组件有什么区别?
- 0010服务器无对应信息,服务器版本对应的内存
- LeetCode 374. Guess Number Higher or Lower
- 字符串拼接与打印相关2
- css3 animation动画事件
- ExtJs十(ExtJs Mvc用户管理之二)
- idea设置主题路径
- mysql.sock.lock的作用_mysql.sock的作用
- 关于go module
- VO的实际应用;后端接收前端传入的值;实体类转化VO;PO,VO,DTO,BO,DAO,POJO区别
- 淘宝开店首页装修教程分享
- trash-1000
- linux认证在哪考试,2017年Linux认证考试练习题
- HUAWEI华为荣耀MagicBook V14 I5 集显 16GB+512GB (HGE-W56)原装出厂WIN11系统恢复原厂oem系统
- IIS SSL客户端证书(忽略/接受/必须)之三——思考验证(3)
- matlab 莫比乌斯曲面,『Rhino实例.2』莫比乌斯曲面
- 【服务器数据恢复】服务器5盘RAID5重建为4盘RAID5后的数据恢复案例