全套资料下载地址:https://download.csdn.net/download/sheziqiong/86763843
全套资料下载地址:https://download.csdn.net/download/sheziqiong/86763843
目 录
1 信息隐藏与数字水印算法的概要设计 1
2 信息隐藏与数字水印算法的可行性分析 2
3 信息隐藏与数字水印算法的详细设计 3
4 编码及测试 4
5 组内分工 6
6 心得 7
7 附录:程序源代码 8
2信息隐藏与数字水印算法的可行性分析
DCT是正交变换,它可以将8x8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT 产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。在基于DCT的变换编码中,图像是先经分块(8×8或16×16)后再经DCT,这种变换是局部的,只反映了图像某一部分的信息。当然也可以对整幅图像的特点,但是运算速度比分块DCT要慢。图像经DCT后,得到的DCT图像有三个特点:
(1). 系数值全部集中到0值附近(从直方图统计的意义上),动态范围很小,这说明用较小的量化比特数即可表示DCT系数;
(2). DCT变换后图像能量集中在图像的低频部分,即DCT图像中不为零的系数大部分集中在一起(左上角),因此编码效率很高。
(3). 没有保留原图像块的精细结构,从中反映不了原图像块的边缘、轮廓等信息,这一特点是由DCT缺乏时局域性造成的。
在嵌入过程中,水印嵌入经变换后的数据块,不可见性较好;采用比较中频系数法,并参考JEPG压缩模型,提高水印的抗压缩能力;水印的嵌入位置经大量试验选择在分块DCT域的中频段,可在鲁棒性和透明性之间得到较好的协调。

3信息隐藏与数字水印算法的详细设计
(1)DCT数字水印嵌入算法流程
在图片嵌入程序中,首先读取水印图片sss.bmp,通过rgb2gray函数使其变成灰度图,然后通过im2bw函数是水印图像变成二值图,同时记录下水印图像的长rm和宽cm,以同样的方法读取载体图片cover_image.bmp。本文转载自http://www.biyezuopin.vip/onews.asp?id=13912 DCT变换把水印图片分成8X8的矩阵之后,通过after(x+i,y+j)=before(x+i,y+j)+alpha*k(1),在结果矩阵的中频段嵌入水印,然后通过blkproc函数做DCT逆变换后输出保存在markresule.bmp图片中。

图2.DCT数字水印嵌入算法流程

markbefore=imread('sss.bmp');
markbefore2=rgb2gray(markbefore);
mark=im2bw(markbefore2);    %使水印图像变为二值图
figure(1);      %打开窗口
subplot(2,3,1);    %该窗口内的图像可以有两行三列
imshow(mark),title('水印图像');   %显示水印图像
[rm,cm]=size(mark);   %计算水印图像的长宽
cover_image=imread('carrier_image.bmp');
cover_image=rgb2gray(cover_image);
subplot(2,3,2),imshow(cover_image,[]),title('载体图像'); %[]表示显示时灰度范围为image上的灰度最小值到最大值
before=blkproc(cover_image,[8 8],'dct2');   %将载体图像的灰度层分为8×8的小块,每一块内做二维DCT变换,结果记入矩阵before
I=mark;
alpha=30;     %尺度因子,控制水印添加的强度,决定了频域系数被修改的幅度
k1=randn(1,8);  %产生两个不同的随机序列
k2=randn(1,8);
after=before;   %初始化载入水印的结果矩阵
for i=1:rm          %在中频段嵌入水印for j=1:cmx=(i-1)*8;y=(j-1)*8;if mark(i,j)==1k=k1;elsek=k2;end;after(x+1,y+8)=before(x+1,y+8)+alpha*k(1);after(x+2,y+7)=before(x+2,y+7)+alpha*k(2);after(x+3,y+6)=before(x+3,y+6)+alpha*k(3);after(x+4,y+5)=before(x+4,y+5)+alpha*k(4);after(x+5,y+4)=before(x+5,y+4)+alpha*k(5);after(x+6,y+3)=before(x+6,y+3)+alpha*k(6);after(x+7,y+2)=before(x+7,y+2)+alpha*k(7);after(x+8,y+1)=before(x+8,y+1)+alpha*k(8);end;
end;
result=blkproc(after,[8 8],'idct2');    %将经处理的图像分为8×8的小块,每一块内做二维DCT逆变换
result = uint8(result);
imwrite(result,'markresule.bmp','bmp');      %存储添加水印后的图像
subplot(2,3,3),imshow(result,[]),title('嵌入水印的图像');    %显示添加水印后的图像
%定义一个空空间来存储提取的水印
disp('请选择对图像的攻击方式:');
disp('1.添加白噪声');
disp('2.高斯低通滤波处理');
disp('3.对图像进行部分剪切');
disp('4.将图像旋转十度');
disp('5.将图像压缩处理');
disp('6.添加椒盐噪声');
disp('7.不处理图像,直接显示提取水印');
disp('输入其它数字则直接显示提取水印');
choice=input('请输入选择:');
figure(1);
switch choice        %读入输入的选择  withmark为等待提取水印的图像case 1result_1=result;withmark=imnoise(result_1,'gaussian',0.02); %加入高斯白噪声subplot(2,3,4);imshow(withmark,[]);title('加入高斯白噪声后的图像');     %显示加了高斯白噪声的图像case 2result_2=result;H=fspecial('gaussian',[4,4],0.2); result_2=imfilter(result_2,H); subplot(2,3,4); imshow(result_2,[]); title('高斯低通滤波后图像'); withmark=result_2;case 3result_3=result;result_3(1:64,1:400)=512;   %使图像上方被剪裁subplot(2,3,4);imshow(result_3);title('上方剪切后图像');withmark=result_3;case 4result_4=imrotate(result,10,'bilinear','crop');   %双线性插值算法旋转10度subplot(2,3,4);imshow(result_4);title('旋转10度后图像');withmark=result_4;case 5result_5 = result; result_5=im2double(result_5); cnum=10; dctm=dctmtx(8); P1=dctm; P2=dctm.'; imageDCT=blkproc(result_5,[8,8],'P1*x*P2',dctm,dctm.'); DCTvar=im2col(imageDCT,[8,8],'distinct').'; n=size(DCTvar,1); DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n; [dum,order]=sort(DCTvar); cnum=64-cnum; mask=ones(8,8); mask(order(1:cnum))=zeros(1,cnum); im88=zeros(9,9); im88(1:8,1:8)=mask; im128128=kron(im88(1:8,1:8),ones(16)); dctm=dctmtx(8); P1=dctm.'; P2=mask(1:8,1:8); P3=dctm; result_5=blkproc(imageDCT,[8,8],'P1*(x.*P2)*P3',dctm.',mask(1:8,1:8),dctm); WImage5cl=mat2gray(result_5); subplot(2,3,4); imshow(WImage5cl); title('经JPEG压缩后图像'); withmark=WImage5cl;case 6result_6=result;withmark=imnoise(result_6,'salt & pepper',0.02); %加入椒盐躁声subplot(2,3,4);imshow(withmark,[]);title('加入椒盐噪声后的图像');     %显示加了椒盐噪声的图像case 7subplot(2,3,4);imshow(result,[]);title('未受攻击的水印图像');withmark=result;otherwisedisp('输入数字选择无效,图像未受攻击,直接提取水印');subplot(2,3,4);imshow(result,[]);title('未受攻击的水印图像');withmark=result;
end
after_2=blkproc(withmark,[8,8],'dct2');   %此步开始提取水印,将灰度层分块进行DCT变换
p=zeros(1,8);        %初始化提取数值用的矩阵
mark_2 = zeros(rm,cm);
for i=1:rmfor j=1:cmx=(i-1)*8;y=(j-1)*8;p(1)=after_2(x+1,y+8);         %将之前改变过数值的点的数值提取出来p(2)=after_2(x+2,y+7);p(3)=after_2(x+3,y+6);p(4)=after_2(x+4,y+5);p(5)=after_2(x+5,y+4);p(6)=after_2(x+6,y+3);p(7)=after_2(x+7,y+2);p(8)=after_2(x+8,y+1);if corr2(p,k1)>corr2(p,k2)  %corr2计算两个矩阵的相似度,越接近1相似度越大mark_2(i,j)=1;              %比较提取出来的数值与随机频率k1和k2的相似度,还原水印图样elsemark_2(i,j)=0;endend
end
subplot(2,3,5);
mark_2 = uint8(mark_2);
imshow(mark_2,[]),title('提取出的水印');
subplot(2,3,6);
imshow(mark),title('原嵌入水印');
N=correlation(mark_2,mark);
disp('原水印图像与提取水印图像互相关系数:')
disp(N);










全套资料下载地址:https://download.csdn.net/download/sheziqiong/86763843
全套资料下载地址:https://download.csdn.net/download/sheziqiong/86763843

基于DCT的信息隐藏相关推荐

  1. 基于LSB的信息隐藏

    一.项目背景 随着Internet技术和多媒体信息技术的飞速发展,多媒体.计算机网络.个人移动通信技术等进入寻常百姓家,数字化已深入人心.数字多媒体信息在网上传播与传输越来越方便,通过网络传递各种信息 ...

  2. 信息隐藏——DCT隐写

    DCT隐写 [实验目的]: 了解DCT的系数隐写 [实验内容]: ■Jepg 压缩算法的回顾 ■用MATLAB实现图像DCT相关操作 ■完成基于图像DCT的信息隐藏实验 两点法的嵌入和提取 三点法的嵌 ...

  3. 数字水印实验2 基于LSB和EMD的信息隐藏实验

    [实验名称]基于LSB和EMD的信息隐藏实验 [实验目的] 1.学习并掌握图像信息隐藏的基本原理和方法 2.学习并实现基于LSB的信息隐藏和提取算法 3.学习并实现基于EMD的信息隐藏和提取算法 [实 ...

  4. matlab信息隐藏和提取,使用matlab进行图像信息隐藏和提取

    基于格式的信息隐藏方法通常在文件头与图像数据之间,或图像数据末尾添加秘密信息,具有实现简单,透明性高,隐藏容量大等多个优点:LSB图像信息隐藏算法是将秘密信息隐藏在图像像素数据的低位上来隐藏信息的方法 ...

  5. 文本信息隐藏方法综述

    3.文本信息隐藏分类介绍 根据载体的不同处理方式可以分为2类:1.有载体的信息隐藏方法.2.无载体的信息隐藏方法. 有载体文本信息隐藏方法包含***修改文本格式和修改文本内容*两类. 无载体的信息隐藏 ...

  6. matlab信息隐藏算法,实验四--基于DCT域的信息隐藏算法

    <实验四--基于DCT域的信息隐藏算法>由会员分享,可在线阅读,更多相关<实验四--基于DCT域的信息隐藏算法(6页珍藏版)>请在人人文库网上搜索. 1.实验四 基于DCT域的 ...

  7. 基于DCT信息隐藏 数字水印 DCT matlab实现

    1.DCT变化 2.DCT中频: 中频指DCT变化后从左上到右下的线经过点 3.代码实现 %------------------------------------------------------ ...

  8. 基于奇异值分解的图像压缩和信息隐藏

    基于奇异值分解的图像压缩和信息隐藏 将图像进行奇异值分解后,通过对对角矩阵进行一系列操作,可以达到压缩图像以及信息隐藏的目的.不仅如此,随着计算机网络和网络技术的不断发展,数字图像.音频和视频产品越来 ...

  9. 【图像隐藏】基于DCT算法实现数字水印嵌入+检测+攻击含Matlab源码

    1 简介 介绍了数字水印的产生.发展及其应用,讨论了数字水印的分类,提出了图像的预处理思想,利用MATLAB中的剪切函数.缩放函数,以及调整图像直方图的方法对图像进行预处理,并用MATLAB进行了仿真 ...

  10. 变换域信息隐藏--DCT

    思想提出背景–空间域隐藏 空间域隐藏是基于位图分解的思想产生的,其主要方法是将秘密信息存储到载体不那么重要的部分中,这样即使改变了载体的部分信息后,载体从肉眼来看也不会有太大区别.这种隐藏方法的优点是 ...

最新文章

  1. 使用wireshark分析TLSv2(详细)
  2. linux实现机器之间的账号免密登陆
  3. ajax返回实体类字符串,js使用ajax传值给后台,后台返回字符串处理方法
  4. mysql 与紫金桥_基于紫金桥组态软件与mysql数据库的连接简介
  5. angular 字符串转换成数字_Python | 一文看懂Python列表、元组和字符串操作
  6. Workaround for Search for my account in MyAppointment
  7. python有什么用途视频_使用Python管理多平台视频流的最佳方法是什么?
  8. 每天进步一点点017
  9. Java二、八、十、十六进制介绍
  10. 正则表达式(面试会考)
  11. 【Flink】Flink netty 通讯 PartitionRequestClient NettyPartitionRequestClient
  12. pc网站支付html,jsp 支付宝pc网页支付
  13. import和__import__()有什么不同?
  14. MySQL 结果集问题(获取不存在表的信息导致的隐藏bug)
  15. java snap7_Snap7 referance manual PDF 下载
  16. 基于JAVA超市商品管理系统计算机毕业设计源码+系统+lw文档+部署
  17. xmind8 Pro序列号
  18. 使用Entrez下载文献
  19. PAT乙级1050 螺旋矩阵
  20. 软技能:代码之外的生存指南

热门文章

  1. 软考嵌入式系统设计师2012年上午试题总结
  2. html设置尖角,CSS为div添加尖角样式
  3. mysql操作入门(四)-----数据排序(升序、降序、多字段排序)
  4. oracle adpatch 回退,Oracle EBS施用adpatch工具打patch过程
  5. 小能手英语口语学习笔记 2 发音规则-连读、略读、浊化
  6. 创建华为云服务器实验报告,华为云正式发布云端实验室,真正实现云服务实验云上做...
  7. 波形发生器电路的设计(实现正弦波、方波和三角波的输出)
  8. Verilog 练习 简单状态机代码设计(三角波发生器)
  9. wamp mysql使用方法_wamp使用方法【总】
  10. android隐藏前台服务通知,Android的startForeground前台Service如何去掉通知显示