实验4-MPEG编码.doc

上传人:豆**** 文档编号:33466621 上传时间:2022-08-11 格式:DOC 页数:5 大小:30KB
返回 下载 相关 举报
实验4-MPEG编码.doc_第1页
第1页 / 共5页
实验4-MPEG编码.doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《实验4-MPEG编码.doc》由会员分享,可在线阅读,更多相关《实验4-MPEG编码.doc(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品文档,仅供学习与交流,如有侵权请联系网站删除实验4 MPEG编码1 实验目的本试验通过MATLAB编程实现MPEG标准的avi文件的编解码,了解MPEG标准的视频文件的前后帧图片差分编码及解码方法。2 实验步骤(1)首先设置8x8的离散余弦变换矩阵T、亮度维矩阵lighttable、色度为矩阵colortable以及64维向量sequence和sequence2;(2)获取avi文件信息,并读入该avi文件,设置图片分块的数量、每秒帧数、压缩、解压文件大小,以及参考帧等信息;(3)对avi文件进行前后帧图片差分编码及解码,包括DCT变换-量化-z字形编码-DC差分编码等以及DC差分编码-z

2、字形解码-反量化-DCT逆变换等;(4)保存编码、解码文件分别为mpegrar.mat和out.mat,并计算使用时间,将解码文件保存成out.avi文件,可以在MATLAB中观看保存的解码文件out.mat。3 MATLAB程序代码程序保存为mpeg_coding.m文件。【精品文档】第 5 页function mpeg_coding(filename)% MPEG压缩编码T=dctmtx(8);%Discrete cosine transform matrixlighttable=. 16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55; 14

3、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 113 92; 49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99;%亮度维colortable=. 17 18 24 47 99 99 99 99; 18 21 26 66 99 99 99 99; 24 26 56 99 99 99 99 99; 47 66 99 99 99 99 99 99; 99 99 99 99 99 99 99 99; 9

4、9 99 99 99 99 99 99 99; 99 99 99 99 99 99 99 99; 99 99 99 99 99 99 99 99; % 色度维sequence=1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 . 14 21 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 . 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64;sequence2=1 3 4 10 11 21

5、22 36 2 5 9 12 20 23 35 37 6 8 13 19 24 34 . 38 49 7 14 18 25 33 39 48 50 15 17 26 32 40 47 51 58 16 27 31 41 . 46 52 57 59 28 30 42 45 53 56 60 63 29 43 44 54 55 61 62 64;tic; % Start a stopwatch timerinfor=aviinfo(filename) % Information about AVI filefs=infor.FramesPerSecond; % 每秒帧数fprintf(正在读取视频

6、. n);finput=aviread(filename); % 读入文件fprintf(读取视频完成. n);frame=length(finput);row,col,dim=size(finput(1).cdata);r=ceil(row/8); % 8*8块的数量c=ceil(col/8);mpegrar=int8(zeros(r*c,64,dim,frame); % 压缩文件大小定义output=uint8(zeros(row,col,dim,frame); % 解压文件大小定义imref=zeros(row,col,dim); % 参考帧% 前后帧图片差分编码fprintf(开始处理

7、视频. n);for(f=1:frame) pic=uint8(double(finput(f).cdata)-imref+255)./2); % pic为前后帧图片差 pic=rgb2ycbcr(pic); % 填补图片-行列转化为8的倍数 temp=mod(size(pic,1),8); if(temp=0) pic=pic;uint8(zeros(8-temp,size(pic,2),3); end temp=mod(size(pic,2),8); if(temp=0) pic=pic,uint8(zeros(size(pic,1),8-temp,3); end clear temp %

8、 每一维输入转化为(-128127) t1=double(pic(:,:,1)-27; t2=double(pic(:,:,2)-27; t3=double(pic(:,:,3)-27;% DCT变换-量化-z字形编码-DC差分编码 % % 处理亮度维 count=1; p1=int8(zeros(r*c,64); for(i=1:r) for(j=1:c) temp=round(T*t1(8*i-7:8*i,8*j-7:8*j)*T./lighttable); % DCT变换,量化 p1(count,:)=temp(sequence); % z字形编码 count=count+1; end

9、end p1(:,1)=p1(1);diff(p1(:,1); % DC系数差分编码 clear t1; % 处理色度维 count=1; p2=int8(zeros(r*c,64); for(i=1:r) for(j=1:c) temp=round(T*t2(8*i-7:8*i,8*j-7:8*j)*T./colortable); p2(count,:)=temp(sequence); count=count+1; end end p2(:,1)=p2(1);diff(p2(:,1); clear t2; % 处理色度维 count=1; p3=int8(zeros(r*c,64); for

10、(i=1:r) for(j=1:c) temp=round(T*t3(8*i-7:8*i,8*j-7:8*j)*T./colortable); p3(count,:)=temp(sequence); count=count+1; end end p3(:,1)=p3(1);diff(p3(:,1); clear t3; mpegrar(:,:,:,f)=cat(3,p1,p2,p3);%保存的内容 %DC系数差分解码 for(i=2:size(p1,1) p1(i,1)=p1(i-1,1)+p1(i,1); p2(i,1)=p2(i-1,1)+p2(i,1); p3(i,1)=p3(i-1,1

11、)+p3(i,1); end% z字形解码-反量化-DCT逆变换 % % 处理亮度维 count=1; t1=zeros(8*r,8*c); for(i=1:r) for(j=1:c) tmp=p1(count,:); tmp=reshape(tmp(sequence2),8,8); % z字形解码 t1(8*i-7:8*i,8*j-7:8*j)=T*(double(tmp).*lighttable)*T; % 反量化,DCT逆变换 count=count+1; end end clear p1; % 处理色度维 count=1; t2=zeros(8*r,8*c); for(i=1:r) f

12、or(j=1:c) tmp=p2(count,:); tmp=reshape(tmp(sequence2),8,8); t2(8*i-7:8*i,8*j-7:8*j)=T*(double(tmp).*colortable)*T; count=count+1; end end clear p2; % 处理色度维 count=1; t3=zeros(8*r,8*c); for(i=1:r) for(j=1:c) tmp=p3(count,:); tmp=reshape(tmp(sequence2),8,8); t3(8*i-7:8*i,8*j-7:8*j)=T*(double(tmp).*colo

13、rtable)*T; count=count+1; end end clear p3; % 每一维输出转化为(0255) t1=uint8(t1+27); t2=uint8(t2+27); t3=uint8(t3+27); pic=ycbcr2rgb(cat(3,t1,t2,t3); % ycbcr-rgb pic=pic(1:row,1:col,:); % 转化为原始图像大小 pic=double(pic)*2-255; imref=imref+pic; % 重新设定参考帧 output(:,:,:,f)=uint8(imref); % 解压内容 fprintf(完成进度 %1.2f %,f

14、/frame*100); % 输出进度 fprintf(n);endfprintf(处理视频完成. n);fprintf(开始保存文件. n);save mpegrar fs row col;save output;fprintf(保存文件完成. n);fprintf(压缩文件保存为 mpegrar.mat n);fprintf(解压文件保存为 output.mat n);fprintf(压缩解压共花费时间为 %f 秒n,toc);clear col row dim c r T colortable lighttable sequence sequence2;clear t1 t2 t3 mp

15、egrar finput pic imref;clear count temp tmp i j f filename infor;% 保存成avi格式 %fprintf(开始保存成avi文件. n);avifilename=output.avi;mov=avifile(avifilename,compression,Indeo5,fps,fs);for(i=1:frame) mov=addframe(mov,output(:,:,:,i);endmov=close(mov);fprintf(保存avi文件完成. n);fprintf(文件保存为 out.avi n);% 在Matlab中播放

16、%fprintf(按任意键观看视频. );pause();fprintf(n);choice=y;while(choice=y | choice=Y) for(i=1:frame) imshow(output(:,:,:,i); pause(1/4/fs); end close; choice=input(再看一次Y/N: ,s);end4 实验结果与分析在MATLAB的Command Window窗口下输入: mpeg_coding(D:test.avi)Command Window窗口输出显示为:infor = Filename: D:test.avi FileSize: 1128448

17、FileModDate: 29-六月-2011 22:25:29 NumFrames: 30 FramesPerSecond: 1 Width: 836 Height: 628 ImageType: truecolor VideoCompression: tscc Quality: 0 NumColormapEntries: 0 AudioFormat: PCM AudioRate: 8000 NumAudioChannels: 1正在读取视频. 读取视频完成. 开始处理视频. 完成进度 3.33 %完成进度 6.67 %完成进度 10.00 %完成进度 13.33 %完成进度 16.67 %

18、完成进度 20.00 %完成进度 23.33 %完成进度 26.67 %完成进度 30.00 %完成进度 33.33 %完成进度 36.67 %完成进度 40.00 %完成进度 43.33 %完成进度 46.67 %完成进度 50.00 %完成进度 53.33 %完成进度 56.67 %完成进度 60.00 %完成进度 63.33 %完成进度 66.67 %完成进度 70.00 %完成进度 73.33 %完成进度 76.67 %完成进度 80.00 %完成进度 83.33 %完成进度 86.67 %完成进度 90.00 %完成进度 93.33 %完成进度 96.67 %完成进度 100.00

19、%处理视频完成. 开始保存文件. 保存文件完成. 压缩文件保存为 mpegrar.mat 解压文件保存为 output.mat 压缩解压共花费时间为 170.965912 秒开始保存成avi文件. 保存avi文件完成. 文件保存为 out.avi 按任意键观看视频. 再看一次Y/N: y再看一次Y/N: n由于不同的机器硬件配置不同,对该实验的处理速度也不同,并且实验的对象文件test.avi的大小也有一定的限制,否则会出现内存空间不够的错误。应当注意的是,由于编解码算法的不同,在MATLAB下观看out.mat解码文件和通过视频播放器观看out.avi文件的效果是不同的。通过本实验可以了解MPEG标准的编解码规范,为以后学习实现其他编解码标准打下基础。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com