信息隐藏技术 实验报告
实验名称 日期 实验人
一、实验目的
(1)理解频域变换信息隐藏算法的基本思想 (2)理解离散余弦变换技术的基本理论
(3)掌握基于DCT变换信息隐藏的编码和解码过程
实验4 基于DCT变换的信息隐藏算法 2013-05-18 专业班级 学号 11信安1班 二、实验内容
载体图像为24位bmp图像LenaRGB.bmp,嵌入的秘密信息为从屏幕上随机输入的文本信息,要求对载体图像LenaRGB.bmp进行颜色分量分解与离散余弦变换,将秘密信息转换成二进制流并嵌入到载体图像的DCT变换域中,显示原载体图像、需要嵌入的秘密信息及其相应的二进制流、嵌入了秘密信息的伪装载体,提取的秘密信息。(编程语言不限)
三、实验步骤和设计思想
1. 对图片进行DCT变换,DCT以8x8的像块为单位进行,生成的是8x8的DCT系数数据块。
2. 量化:量化过程就是以某个量化步长去除DCT系数,对一个8x8的DCT变换块中的64个DCT变换系数采用不同的量化精度,以保证尽可能多地包含特定的DCT空间频率信息,又使量化精度不超过需要。DCT变换系数中,低频系数对视觉感应的重要性较高,因此分配的量化精度较细;高频系数对视觉感应的重要性较低,分配的量化精度较粗,通常情况下,一个DCT变换块中的大多数高频系数量化后都会变为零。 3. Z型扫描:
DCT变换产生的是一8x8的二维数组,为进行传输,还须将其转换为一维排列方式。有两种二维到一维的转换方式,或称扫描方式:之型扫描(Zig-Zag)和交替扫描,其中之型扫描是最常用的一种。由于经量化后,大多数非零DCT系数集中于8x8二维矩阵的左上角,即低频分量区,之型扫描后,这些非零DCT系数就集中于一维排列数组的前部,后面跟着长串的量化为零的DCT系数; 4. 游程编码:
只有非零系数被编码。一个非零系数的编码由两部分组成:前一部分表示非零系数前的连续零系数的数量(称为游程),后一部分是那个非零系数。这样就把之型扫描的优点体现出来了,因为之型扫描在大多数情况下出现连零的机会比较多,游程编码的效率就比较高。当一维序列中的后部剩余的DCT系数都为零时,只要
用一个“块结束”标志(EOB)来指示,就可结束这一8x8变换块的编码,产生的压缩效果是非常明显的。
四、程序清单
üTD??¢òt2× clc
clear all
%é????×?üD??¢2¢3aoo3è?t????à? M = text2bin(); len = length(M); Mstr = num2str(M);
Mstr = ['é?????±?D??¢??ó|μ??t????à?é?£1'Mstr'\\n']; fprintf(1,Mstr);
%RGB í?????è?2??aó?2??é C = imread('LeanRGB.bmp'); [m, n, d] = size(C); Cr = zeros(m, n); Cg = zeros(m, n); Cb = zeros(m, n);
for i = 1:m
for j = 1:n
Cr(i, j) = C(i, j, 1); Cg(i, j) = C(i, j, 2); Cb(i, j) = C(i, j, 3); end end
I = uint8(Cr); figure; imshow(I);
title('?-?×ì?í???');
I1 = blkproc(I, [8 8], 'dct2'); %????·?8*8í????é?′DD′òdct22?3? ca0 = im2col(I1, [8 8], 'distinct' ); %?×?ó?é3a3èàD üTD??¢òt2×±′á??y3ì for i = 1:len
if (M(i) == 0)
if (ca0(13, i) > ca0(20, i))
üT?μéy(4 1)1í(3 2)£???Ci(4 1) > Ci(3 2)?ò±′á?1 temp = ca0(13, i); ca0(13, i) = ca0(20, i); ca0(20, i) = temp; end else
if (ca0(13, i) < ca0(20, i))
temp = ca0(13, i); ca0(13, i) = ca0(20, i); ca0(20, i) = temp; end end
x = 0.000001;
a = abs(ca0(13, i) - ca0(20, i)); if (a < x)
if (M(i) == 0)
ca0(20, i) = ca0(20, i) + x; else
ca0(13, i) = ca0(13, i) + x; end end
end %μ???Biμ??μ
stegoDCT = col2im(ca0, [8 8], [m n], 'distinct'); stegoing = blkproc(stegoDCT, [8 8], 'idct2'); figure;
imshow(uint8(stegoimg));
title('DCT±?oo′|?í1óμ??±3°?×ì?'); üTD??¢òt2×?aá??y3ì TM =zeros(1, len); for i = 1:len
if ca0(13, i) > ca0(20, i) TM(i) = 1; else
TM(i) = 0; end end
MM = num2str(TM);
MM = ['ìμ??μ??×?üD??¢éò£1'MM'\\n']; fprintf(1, MM);
五、实验调试记录
六、实验结果及其分析
量化后的数据,有一个很大的特点,就是直流分量相对于交流分量来说要大,而且交流分量中含有大量的0。这样,对这个量化后的数据如何来进行简化,从而再更大程度地进行压缩呢。
对于前面量化的系数所作的 “Z”字形编排结果就是:
底部 ?26,?3,0,?3,?3,?6,2,?4,1 ?4,1,1,5,1,2,?1,1,?1,2,0,0,0,0,0,?1,?1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 顶部
838图像块经过 DCT 变换之后得到的 DC 直流系数有两个特点,一是系数的数值比较大,二是相邻838图像块的 DC 系数值变化不大。根据这个特点,JPEG 算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化 DC 系数的差值(Delta)进行编码。即充分利用相邻两图像块的特性,来再次简化数据。 即上面的 DC 分量-26,需要单独处理。 而对于其他63个元素采用zig-zag(“Z”字形)行程编码,以增加行程中连续0的个数。
七、实验心得
1、加入水印算法,从简单入手,空间域变换,最低域嵌入水印; 2、需找检测水印是否成功的方法,利用jpeg的算法替代h.264算法; 3、DCT代码,由于是嵌入式,算法尽量设计简单,考虑复杂度;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实验4 基于DCT变换的信息隐藏算法在线全文阅读。
相关推荐: