文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» 源代码 » C语言关于DCT变换压缩编码的程序       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: C语言关于DCT变换压缩编码的程序  ( 查看:1174  回复:14 )   
 
hapeibo
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 121
积分 5
阅读权限 20
注册日期 2007-12-1
最后登录 2007-12-1 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-1 12:23   标题:C语言关于DCT变换压缩编码的程序
上一帖 |
所有有关“C/C++”的资料

来源版块: C/C++

压缩包内文件格式: 可执行文件

附件来源: 互联网

运行平台: Windows平台

是否经本人验证:

附件性质: 免费

详细说明: #include "stdio.h"
#include "math.h"
#define PI 3.1415926
#define N 8
void yuanshi(int a[][8])//输出原始数据
  { int i,j;
for(i=0;i
for(j=0;j
{
                   printf("%d  ",a[j]);
            if(j==7)
             printf("\n");
            }
  }
void DCT(int f[8][8],float m[8][8])//DCT变换子程序
         {
                   int x,y,i,j,l;
                   float coff[8][8],doff[8][8],D[8][8]={0};
                   for(y=0;y                  //计算第一行的coff
                   coff[0][y]=(sqrt(2.0)/sqrt(N))*(sqrt(1.0)/sqrt(2.0));
                   for(x=1;x                  //计算后面N-1行的coff
                   {
                            for(y=0;y
                            coff[x][y]=(sqrt(2.0)/sqrt(N))*cos((2*(y+1)-1)*x*PI/(2*N));
                   }
                   printf("COFF: \n");                  //输出矩阵coff
                   for(i=0;i
                   for(j=0;j
                   {printf("%f  ",coff[j]);
                  if(j==7)
                   printf("\n");}                 
                   for(x=0;x              //求coff的转置矩阵doff
         {
                   for(y=0;y
            doff[x][y]=coff[y][x];
         }
                   for(i=0;i              //矩阵doff和f矩阵相乘,结果为矩阵D
                   for(l=0;l
                   {   D[l]=0;
                             for(j=0;j
                             D[l]=D[l]+doff[j]*(1.0*f[j][l]);
                              }
                    
         printf("\n");                                    
for(i=0;i             //矩阵D和矩阵coff相乘,结果为矩阵m,即经过DCT变换//得到的矩阵
           for(l=0;l
                   { m[l]=0;
                             for(j=0;j
                             m[l]=m[l]+D[j]*coff[j][l];
                   }
                   printf("输出DCT矩阵\n");
                   for(i=0;i          //输出经过DCT变换的结果矩阵m
                   {for(l=0;l
                            printf("  %f   ",m[l]);
                             printf("\n");
                   }              
}
void sch(int te[8][8],float m[8][8],int n[8][8])//量化子程序
         {
                   int x,y;
                   int tr[8][8] ;
                   for(x=0;x
                   for(y=0;y
                   {
                   tr[x][y]=(int)(m[x][y]/te[x][y]);
                   n[x][y]=tr[x][y];
                   printf(" %d  ",tr[x][y]);
                    if(y==7)
             printf("\n");
             }
}
int bianma(int n[8][8],int c[])//一维行程编码
{
         int k[64],a[128],i,j,t=0,e=1,d=0,l;
         for(i=0;i把二维的编码数组转换成一维数组
         for(j=0;j
         k[t++]=n[j];
         for(i=0;i计算编码后的数据,将其存在数组a中
         {   l=i+1;
                   if(k==k[l])       e++;
         else          {
                   a[d++]=e;
                   a[d++]=k;
                   e=1;
                   }
         }
            printf("编码输出:\n");
         for(i=0;i输出编码后的数据
         {printf("%d ",a);
                   c=a;//把得到的编码后的数组a的值复制到数组c中
                  
         }
         printf("\n");
         return d;//返回数组c的长度
         }
void main()
{                      /*8*8图像块数据如下*/
         float  m[8][8],b[8][8];
         int Y=128,i=0,j=0,s,number,n[8][8],c[52],data;         
         int a[][8]={{130,130,130,129,134,133,129,130},{130,130,130,129,134,133,130,130},{130,130,130,129,132,132,130,130},{129,130,130,129,130,130,129,129},{127,128,127,129,131,129,131,130},{127,128,127,128,127,128,132,132},{125,126,129,129,127,129,133,132},{127,125,128,128,126,130,131,131}};
         int Fy[8][8]={{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,81,104,103,77},{49,64,78,87,103,121,120,101},{72,92,95,98,112,100,103,99}};
         printf("8*8图像块数据:\n");//输出需要处理的图象数据块的数据
         yuanshi(a);                       //调用原始图像模块程序
         printf("变换系数矩阵:\n");
          DCT(a,m);                      //调用DCT变换函数
         printf("输出量化后的矩阵:\n");     
     sch(Fy,m,n);                     //调用量化函数
     number=bianma(n,c);              //调用编码函数
     printf("原始数据量:\n");
     printf("%d  \n",s=8*64);           //输出原始数据量
     printf("编码后的数据总量:\n");
     data=number/2*3+number/2*8;
printf("%d \n",data);               //输出编码后的数据总量
     printf("压缩率: \n");
     printf("%f%% \n",data*1.0/s*100);    //输出压缩率
}


附件(查看下载说明): [原文件] 113223421412.rar (2007-12-1 12:23,大小:5.37 K)
该附件被下载 59 次     您下载该主题帖内所有附件同时将被扣掉2点无忧币  查看分数政策说明




网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-12-1 12:231楼
[ 顶部 ]
 
HACK1011
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 11
积分 1
阅读权限 20
注册日期 2007-12-1
最后登录 2007-12-1 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-1 12:28   标题:好东东

顶顶顶!真的是一个很好的东东



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-12-1 12:282楼
[ 顶部 ]
 
marshal338
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2007-12-3
最后登录 2007-12-3 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2007-12-3 19:41 
在此表示我最衷心的感谢!



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-12-3 19:413楼
[ 顶部 ]
 
laozz
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2007-12-5
最后登录 2007-12-8 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-5 19:20 
感谢,十分感谢,衷心感谢



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-12-5 19:204楼
[ 顶部 ]
 
budognai
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2008-2-21
最后登录 2008-2-21 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-2-21 18:20 
ding



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-2-21 18:205楼
[ 顶部 ]
 
shunvwu
新新人类  点击可查看详细



帖子 2
精华 0
无忧币 10
积分 2
阅读权限 20
注册日期 2008-3-10
最后登录 2008-3-10 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-3-10 15:45 
LZ这个太有用了,谢谢



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-3-10 15:456楼
[ 顶部 ]
 
wuhao086
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2008-4-7
最后登录 2008-4-7 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-7 12:13 
十分感谢楼主分享



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-4-7 12:137楼
[ 顶部 ]
 
hokkien
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2008-4-21
最后登录 2008-4-21 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-21 14:45 
太谢谢了,正需要



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-4-21 14:458楼
[ 顶部 ]
 
carol_lee
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 11
积分 1
阅读权限 20
注册日期 2008-4-22
最后登录 2008-4-22 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-22 11:24 
请问怎么下载附件?



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-4-22 11:249楼
[ 顶部 ]
 
yiqiu99
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 11
积分 1
阅读权限 20
注册日期 2008-4-24
最后登录 2008-5-8 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-4-24 13:45 
d



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-4-24 13:4510楼
[ 顶部 ]
 
12304
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2008-5-4
最后登录 2008-5-4 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-4 20:33 
bucuo ,看看看看看看看看



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-4 20:3311楼
[ 顶部 ]
 
甘露
新新人类  点击可查看详细



帖子 8
精华 0
无忧币 2
积分 8
阅读权限 20
注册日期 2008-5-8
最后登录 2008-5-25 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-11 17:58 
谢谢了,学习了



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-11 17:5812楼
[ 顶部 ]
 
tomato328
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2008-5-17
最后登录 2008-5-17 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-17 16:31   标题:顶啊,学习一下先!





网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-17 16:3113楼
[ 顶部 ]
 
15646846
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 9
积分 1
阅读权限 20
注册日期 2008-6-5
最后登录 2008-6-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-6-5 21:00 
ding



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-6-5 21:0014楼
[ 顶部 ]
 
zhouru0001
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 8
积分 0
阅读权限 20
注册日期 2008-7-17
最后登录 2008-7-19 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-19 13:13 
我觉得你写的编码的部分不正确啊,应该是zigzag才对啊



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-7-19 13:1315楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号