离散余弦变换

上传人:飞*** 文档编号:51760769 上传时间:2018-08-16 格式:PPT 页数:21 大小:3.47MB
返回 下载 相关 举报
离散余弦变换_第1页
第1页 / 共21页
离散余弦变换_第2页
第2页 / 共21页
离散余弦变换_第3页
第3页 / 共21页
离散余弦变换_第4页
第4页 / 共21页
离散余弦变换_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《离散余弦变换》由会员分享,可在线阅读,更多相关《离散余弦变换(21页珍藏版)》请在金锄头文库上搜索。

1、DCT域隐秘技术实验报告实验目的:弄清DCT变化的原理。利用DCT变换 对RGB图片进行简单的处理。进行简单的变化 域文本隐藏。1、解释能否只对每一个图像块的个别像素进行 DCT变换,继而对其变换后的系数做比较、交 换和调整。 2、分析基于FFT快速算法的DCT变换和利用变换 矩阵的DCT变换的区别和联系。 3、利用算法2.8,2.9进行简单的信息隐藏并检 验。一、图像的基本操作 选择一张RGB图片。 得到一个三维矩阵data: 大小为300*223*3 ,数据 为 uint8 array(无符号8 位整数)。 为了以后操作的方便, 将该图像矩阵改变为 double array(双精度浮 点型

2、)。 操作: data2=double(data)/255 ;1、YCbCr 变换 对图片矩阵data做 YCbCr变换,得到的仍 然是一个三维矩阵, 其大小为300*223*3 ,数据为 uint8 array (无符号8位整数) 。 图片如右图。 操作: YC=rgb2ycbcr(data )2、改变图像为灰度图像 对图片矩阵data做灰度变 换,得到的是一个二维矩 阵。其大小为300*223, 数据为 uint8 array(无符 号8位整数)。 图片如右图。 操作: GR=rgb2gray(data)3、改变图像为索引图像4、RGB分层显示 变换RGB图片矩阵, 可以得到图片的三层 图

3、像。每一层可以单 独看作一个灰度图片 ,反映R,G,B三层 的色深。 操作: 3layer3=reshape(data2, 300,669);二、DCT变换1、对灰度图片的DCT变换 对刚才得到的灰度图片做DCT变换,得到 一个新的二维矩阵。其大小为300*223, 数据为double array(双精度浮点数)。 矩阵中的数据是诸如3.0672e+004, -2.0272e+003 的一些浮点数。 操作:DCTgr=dct2(GR);2、频普分析(1) 观察经过DCT变换后 的矩阵,我们发现起 数据分布十分有规律 ,即从左上角到右下 角数值逐渐减少。频普分析(2) 对DCT矩阵做数据处 理(

4、取绝对值的自然 对数)。 执行: imshow(log(abs(D CTgr),),colormap(je t(64),colorbar; 结果如右4、JPG压缩分析 同时,我们利用 MATLAB自带的 dctdemo演示,也可以 看出其DCT系数的分 部规律。 显然,JPEG图片压 缩就是去掉高频的 DCT系数减少噪声。三、利用变换矩阵实现分快处理前面用到的DCT变化公式在MATLAB 函数中体现为函数:DCT2();事实上 ,对于DCT变换还有一种快速变换的方 式,就是利用变换矩阵。1、变换说明 根据上述变换矩阵T 的定义,对X的DCT 变化Y就有:Y=T*X*T(T为T 的转置矩阵) 一

5、个8*8的变换矩阵 如右图。2、操作 T=dctmtx(8);DCTrgb=blkproc(data2,8 8,P1*x*P2,T,T); 结果得到一个300*669的矩阵,数据为 double array类型。 我们仍然对其做前面的操作: imshow(log(abs(DCTrgb),),colorbar; 得到的结果并不是一个频普。3、得到的结果(1):得到的结果(2) 通过对得来的DCT系 数观察发现,每一个 8X8的范围内,起 DCT系数仍然服从前 述的分布规律。 由此完成了DCT变换 的分快操作。四、DCT域的信息隐藏程序:%image是要作为载体的图像文件名, imagegoal是

6、生成的图像文件名 ,permission是图像类型,msg是信息文 件的文件名。 function count=hidedct(image,imagegoal,perm ission,msg) %将要隐藏的文件以0,1方式读入,count 是读入的数量。 frr=fopen(msg,r); msg,count=fread(frr,bit1); fclose(frr); %将原始图片读入 data=imread(image,permission); data=double(data)/255; %进行DCT变换 T=dctmtx(8); DCTrgb=blkproc(data,8 8,P1*x*

7、P2,T,T);%记录变化后的图像大小尺寸 row,col=size(DCTrgb); k1=0; k2=0; temp=0; for i=1:countif msg(i,1)=0 if DCTrgb(8*k1+5,8*k2+2)DCTrgb(8*k 1+4,8*k2+3)temp=DCTrgb(8*k1+5,8*k2+2);DCTrgb(8*k1+5,8*k2+2)=DCTrgb(8* k1+4,8*k2+3); DCTrgb(8*k1+4,8*k2+3)=temp; endelseif DCTrgb(8*k1+5,8*k2+2)=col;k1=k1+1; k2=0;end %略微调整一下系

8、数,提高图片强健性和 抗干扰能力。 if DCTrgb(8*k1+5,8*k2+2)DCTrgb(8*k 1+4,8*k2+3)DCTrgb(8*k1+4,8*k2+3)=DCTrgb(8*k 1+4,8*k2+3)-0.1;elseDCTrgb(8*k1+5,8*k2+2)=DCTrgb(8*k 1+5,8*k2+2)-0.1;end end%DCT反变换,还原成图像data=blkproc(DCTrgb,8 8,P1*x*P2,T,T);col=col/3;data=reshape(data,row,col,3);imwrite(data,imagegoal,permission);五、信

9、息提取程序: function extractdct(image,permission,msg,cou nt) frr=fopen(msg,a); data=imread(image,permission); data=double(data)/255; T=dctmtx(8); DCTcheck=blkproc(data,8 8,P1*x*P2,T,T); row,col=size(DCTcheck); k1=0; k2=0; for i=1:countif DCTcheck(8*k1+5,8*k2+2)=colk1=k1+1; k2=0; end elsefwrite(frr,1,bit1); k2=k2+1;if 8*k2=colk1=k1+1; k2=0; endend end fclose(frr);结 果结论1、DCT变换所得到的矩阵,从其左上角到右下角 呈现其频率从低频到高频的变化规律。 2、图片的主要信息位于其中、低频部分,其高 频部分主要是噪声。 3、DCT变换只能对每一个图像块进行,不能单独 针对某一个数和两个数进行。变化后得到的是 原始信号的频率特性,表现为一个与原始信号 同样大小的矩阵。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号