1、DCT变化

2、DCT中频:
中频指DCT变化后从左上到右下的线经过点

3、代码实现

%------------------------------------------------------------------%
%     基于DCT变换的信息隐藏(数字水印)     %%                                                                %%                                                                %
%-----------------------------------------------------------=------%
clear ;
clc;%-----------------------读入图像-------------------------------------%
markbefore=imread('lena.bmp');
markbefore=imresize(markbefore,[100,100],'nearest');
markbefore2=rgb2gray(markbefore);
mark=im2bw(markbefore2);    %使水印图像变为二值图
figure(1);      %打开窗口
subplot(2,3,1);    %该窗口内的图像可以有两行三列
imshow(mark),title('水印图像');   %显示水印图像
[rm,cm]=size(mark);   %计算水印图像的长宽cover_image=imread('embedding_result.png');
cover_image=rgb2gray(cover_image);
subplot(2,3,2),imshow(cover_image,[]),title('载体图像'); %[]表示显示时灰度范围为image上的灰度最小值到最大值before=blkproc(cover_image,[8 8],'dct2');   %将载体图像的灰度层分为8×8的小块,每一块内做二维DCT变换,结果记入矩阵beforeI=mark;
alpha=5;     %尺度因子,控制水印添加的强度,决定了频域系数被修改的幅度after=before;   %初始化载入水印的结果矩阵
for i=1:rm          %在中频段嵌入水印for j=1:cmx=(i-1)*8;y=(j-1)*8;if mark(i,j)==1k=1;elsek=-1;endafter(x+1,y+8)=before(x+1,y+8)*(1+alpha*k);after(x+2,y+7)=before(x+2,y+7)*(1+alpha*k);after(x+3,y+6)=before(x+3,y+6)*(1+alpha*k);after(x+4,y+5)=before(x+4,y+5)*(1+alpha*k);after(x+5,y+4)=before(x+5,y+4)*(1+alpha*k);after(x+6,y+3)=before(x+6,y+3)*(1+alpha*k);after(x+7,y+2)=before(x+7,y+2)*(1+alpha*k);after(x+8,y+1)=before(x+8,y+1)*(1+alpha*k);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('嵌入水印的图像');    %显示添加水印后的图像%------------------------水印提取-----------------------------%
%
%src=imread('embedding_result.png');
%src=rgb2gray(src);
%srcs=blkproc(src,[8,8],'dct2');
srcs=before;
after_2=blkproc(result,[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)/srcs(x+1,y+8));         %将之前改变过数值的点的数值提取出来p(2)=(after_2(x+2,y+7)/srcs(x+2,y+7));p(3)=(after_2(x+3,y+6)/srcs(x+3,y+6));p(4)=(after_2(x+4,y+5)/srcs(x+4,y+5));p(5)=(after_2(x+5,y+4)/srcs(x+5,y+4));p(6)=(after_2(x+6,y+3)/srcs(x+6,y+3));p(7)=(after_2(x+7,y+2)/srcs(x+7,y+2));p(8)=(after_2(x+8,y+1)/srcs(x+8,y+1));f=((sum(p))/8-1)/alpha;if f>0  %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('原嵌入水印');
NC=correlation(mark_2,mark);
disp('原水印图像与提取水印图像互相关系数:')
disp(NC);function N=correlation(mark_get,mark_prime)
mark_get=double(mark_get);
mark_prime=double(mark_prime);
if size(mark_get)~=size(mark_prime) error('Input vectors must  be the same size!')
else [m,n]=size(mark_get); fenzi=0; fenmu=0; for i=1:m for j=1:n fenzi=fenzi+mark_get(i,j)*mark_prime(i,j); fenmu=fenmu+mark_prime(i,j)*mark_prime(i,j); end end
N=min(fenzi/fenmu,fenmu/fenzi);
end
end

实验效果
1、用图

嵌入图像

载体图像

实验结果

原水印图像与提取水印图像互相关系数:
0.9024

基于DCT信息隐藏 数字水印 DCT matlab实现相关推荐

  1. matlab实现GPC隐写算法,基于LSB信息隐藏算法的MATLAB实现

    %将水印图像按最低位有效(LSB)方法嵌入到载体图像中,并把水印从载体图像中提取出来 %注:整个算法分为水印嵌入部分和水印提取部分,及hcf com down_sampled水印分析 % 程序代写&a ...

  2. matlab信息隐藏算法,[转载]基于LSB信息隐藏算法的MATLAB实现

    %将水印图像按最低位有效(LSB)方法嵌入到载体图像中,并把水印从载体图像中提取出来 %注:整个算法分为水印嵌入部分和水印提取部分,及hcf com down_sampled水印分析 % 程序代写&a ...

  3. 信息隐藏——数字水印

    数字水印 [实验目的]: 实现W-SVD.DCT域混沌细胞自动机水印,实现细胞自动机水印的检测. 使用stirmark攻击嵌入细胞自动机水印的图片,对攻击后的图片进行水印的检测. 了解Stirmark ...

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

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

  5. 数字水印算法matlab源程序 matlab版数字水印算法 /DCT/DWT/LSB/HVS/W-SVD数字水印源码 数字水印的嵌入和提取 W-SVD数字水印实现

    发以下多套系统源码: 1.matlab版数字水印算法 2.MATLAB数字水印 源代码+文档 3.数字水印技术matlab代码 4.数字水印 JPEG压缩 matlab代码 5.数字水印 添加噪声 m ...

  6. 基于深度学习的信息隐藏技术的研究总结(一)

    信息隐藏技术的相关知识总结 你好! 本人关于信息隐藏方面的研究很久了,主要是利用深度学习方面的技术来实现.由于电脑等原因,一些东西就找不到了,所以想通过写博客的方式进行记录,一方面是对学过的东西.技术 ...

  7. 信息隐藏技术综述——粗浅入门

    本文为2017年十一月做的关于信息隐藏技术的PPT汇报的配套讲稿,相关参考资料已上传至 (http://download.csdn.net/download/sir_chai/10104787) 第一 ...

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

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

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

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

最新文章

  1. 机器学习中有哪些距离度量方式
  2. html2canvas源码修改,html2canvas把div保存高清图的方法代码
  3. Autofac框架初识与应用
  4. python编程工具是什么_python编程应该用什么工具
  5. 为什么找不到用户和计算机名,计算机管理里没有(本地用户和组)了为什么怎么恢复...
  6. java程序本质,方法学之Java的本质
  7. C#.NET Split 的几种使用方法
  8. 同样的事情,小孩叫逆反,大人叫抬杠
  9. 推荐 一个PDF转Word内容不匹配、乱码的解决方法
  10. (二十三)美萍酒店管理系统:系统维护_系统设置_商品设置_添加类别、添加商品
  11. 一文讲清神经网络、BP神经网络、深度学习的关系
  12. 《具体数学》部分习题解答1
  13. pdf转图片,pdf转高清图片方法
  14. 转载 | 深度学习中的遥感影像数据集
  15. win7虚拟机VCMI无法自动安装驱动程序
  16. 腾讯云CentOS7运行基于SSM的个人博客----第三节:使用Dokcer安装JDK、Tomcat环境
  17. uniapp授权登录微信支付宝小程序获取code和基础信息
  18. javascript 中的onblur 事件
  19. DOS窗口中使用的命令行
  20. 转载 Python 学习-Matplotlib库

热门文章

  1. mysql contains 无效_Mysql函数CONTAINS和GEOMFROMTEXT不起作用
  2. 英特尔cpu支持Linux,第12 代酷睿,英特尔向 Linux 添加 Alder Lake-S 处理器的支持代码...
  3. 世上最冷的脑筋急转弯~~~~~~
  4. 2020-09-11 C++ 11 tuple元组和tie()的简单介绍
  5. 2019 前端面试题 (Vue)
  6. Azkaban 安装部署
  7. 提效小技巧——记录那些不常用的代码片段
  8. AdaBoost算法超详细讲解
  9. S-c crystal 组合
  10. java调用jasperreport_Java代码导出Jasperreport