ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:16.21KB ,
资源ID:8033375      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8033375.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于DCT变换的图像编解码matlab代码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于DCT变换的图像编解码matlab代码.docx

1、基于DCT变换的图像编解码matlab代码/ 基于块的变换编码/读入灰度图像数据,完成8*8像素块余弦变换并进行DCT系数矩阵量化,把得到的量化矩阵游程编码/#include#include#include#include #include#include#define PI 3.1415926#define WIDTH 256#define HEIGHT 256using namespace std;double arrWIDTHHEIGHT=0; /自定义数组保存文件二进制数据double dct288=100; /自定义数组保存待变换8*8像素块二进制数据int x(14),y(22);

2、 /任意设定开始选定数据坐标void DCT(int,int,double dct288); /余弦变换算法函实现数double CuCv(int); /中间函数C(u),C(v)void Quant(double dct288); /均匀量化函数void Run_level(double dct288); /游程编码函数/*void main() char ch; int data88=0; FILE *fp = NULL; /创建文件指针并初始化 /-以二进制只读形式打开待处理IMG文件 fp = fopen(LENA256.IMG,rb); if(fp = NULL)/如果失败了 pri

3、ntf(Buffer error! Program terminated!nn); ofstream outfile(源文件二进制数据.txt); /建立文件 char buf24; int count = 0;/-将读入文件的数据保存在自定义数组中 for(int i (0);iWIDTH;i+) for(int j(0);jHEIGHT;j+) int c=fgetc(fp); arrij = c; fclose(fp); /关闭文件 cout256*256选定8*8像素块开始坐标:endlxendl yendl;/-选定8*8像素块,并保存数据到文本文件中 for(int i(x);ix

4、+8;i+) for(int j(y);jy+8;j+) outfile setw(3) arrij ; outfileendl; outfile.close(); DCT(x,y,dct2); /余弦变换 Quant(dct2); /均匀量化 for(int i = 0;i 8 ;i+) /变换结果输出到文本文件中 for(int j = 0;j 8;j+) cout dct2ij ; coutendlendl; Run_level(dct2); /zig-zag游程编码 system(pause);/*void DCT(int m,int n,double dct288) /余弦变换算法实

5、现函数 for(int u(0);u8;u+) for(int v(0);v8;v+) double sum=0; for(int i(0);i8;i+) for(int j(0);j8;j+) sum=sum+(arrm+in+j*cos(2*i+1)*u*PI/16)*cos(2*j+1)*v*PI/16); double temp=CuCv(u)*CuCv(v); dct2uv=int(temp*sum/4+0.5); /余弦变换后的值,四舍五入取整 ofstream outfile2(余弦变换取整后数据.txt); for(int i = 0;i 8 ;i+) /变换结果输出到文本文件

6、中 for(int j = 0;j 8;j+) outfile2 setw(3) dct2ij ; outfile2endl; /得到DCT系数矩阵 outfile2.close();/*double CuCv(int a) /中间函数C(u),C(v) if(a=0) return 1/pow(2,0.5); else return 1; /*void Quant(double dct288) /均匀量化函数 int QS88= /构建均匀量化矩阵(亮度) 16,11,10,16,24,40,51,61, 12,12,14,19,26,58,60,55, 14,13,16,24,40,57,

7、69,56, 14,17,22,29,51,87,80,62, 18,22,37,56,68,109,103,77, 24,35,55,64,81,104,113,92, 49,64,78,87,103,121,120,101, 72,92,95,98,112,100,103,99 ; for(int i(0);i8;i+) for(int j(0);j8;j+) dct2ij=int(double(dct2ij)/QSij+0.5); ofstream outfile3(均匀量化后数据.txt); for(int i = 0;i 8 ;i+) /变换结果输出到文本文件中 for(int j

8、= 0;j 8;j+) outfile3 setw(3) dct2ij ; outfile3endl; /得到DCT系数矩阵 outfile3.close();/*void Run_level(double dct288) /游程编码函数 int k(0),a88=0; int i(0),j(0),s(0); /i=行-j=列-s=总行/列数 int dir(0); /扫描方向,0:右方,1:左下,2:下方,3:右上 ofstream outfile4(游程符号.txt); while(s8*8) aij=dct2ij; /初始化zig-zag扫描位置 int temp0=i,temp1=j;

9、 switch(dir) /下一个扫描位置 case 0: j+; /行进方向 if(i=0) dir=1; if(i=7) dir=3; break; case 1: i+; j-; if(i=7) dir=0; else if(j=0) dir=2; break; case 2: i+; if(j=0) dir=3; if(j=7) dir=1; break; case 3: i-; j+; if(j=7) dir=2; else if(i=0) dir=0; break; default: break; if(atemp0temp1!=dct2ij) /输出游程符号到文件 if(atemp0temp1!=0) if(k!=0) k+; outfile4(k,atemp0temp1) ; k=0; else k+; s+; outfile4.close();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1