一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【图像隐写】基于matlab DCT图像隐写【含Matlab源码 365期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、DCT数字水印嵌入与提取简介

1 基本DCT变换
目前,基于DCT域的水印方法已经成为数字水印算法研究的热点,它的核心思想就是通过离散傅立叶变换对图像块进行处理后,再选择变换域中的一些系数值依据一定规则来嵌入水印。
由于图像块中DCT系数频带分布由左上角的直流分量DC往下对应的系数频率由低频升至高频,因此在不影响原图质量的前提下,可将水印信息根据能量大小嵌入相应系数频带中。通过图像块量化与水印嵌入结合的处理方法将水印信息均匀分布在图像的整个空间域,在图像裁剪和滤波方面,变换域的水印比在空间域的更能表现出一定的鲁棒性。

2 水印算法描述
2.1 水印嵌入算法
该算法采用加性嵌入的方式在经过DCT变换后的子图像块的中频域中,选取隐秘位置嵌入水印信息,具体的嵌入流程如下图1所示:

图1 分块水印嵌入流程
(1)分块处理:设宿主图像为P,将其分块处理为8*8的K个子块。
(2)水印预处理:设水印图像为W,对其进行互补变换,变换后的水印图像和变换前的水印图像相互补。
(3)对水印图像进行Arnold置乱变换,并依据混沌映射规则,选取密钥混沌序列并与水印序列异或运算,将置换次数和异或运算处理后的结果分别作为水印嵌入算法的密钥1和密钥2。
(4)DCT变换:对各子块内做DCT变换,利用zig-zag对DCT系数进行扫描,得到第k块子图像块的序列为Zk(i),i=0,1,2,…63.
(5)水印嵌入算法:依据zig-zag排序,在各子块的中、低频段选取特定系数x(m)和x(n),在系数坐标(a,b)和(c,d)处嵌入水印信息图像W,并将其作为密钥3。同理,嵌入互补水印图片W’,并将嵌入的位置作为密钥4。水印嵌入的方法如下:


(6)IDCT变换:将每一个子图像块作二维DCT逆变换。
(7)子块合并:将每一个子块合并成嵌入水印的图像P’。

2.2 水印提取算法
将嵌入水印的图像P’分块处理,并对各子块进行二维DCT变换,由密钥3和4推断所选择的水印系数,若x(m)≤x(n),则水印信息为0,若x(m)>x(n),则水印信息为1,再利用密钥1和2将初步水印的信息解密再进行Arnold逆变换,最终提取出水印信息。

2.3 水印检测算法
本文通过计算峰值信噪比PSNR的值评价嵌入水印的宿主图像的质量,一幅m和n的图像,PSNR度量标准定义为:

归一化相关系数NC的值判断嵌入水印的图像与宿主图像的相似度,其定义为:

三、部分源代码

clc;
clear;
msgfid=fopen('hidden.txt','r');%%打开秘密文件,读入秘密信息
[msg,count]=fread(msgfid);
count=count*8;
alpha=0.02;
fclose(msgfid);
msg=str2bit(msg)';
[len col]=size(msg);
io=imread('lena.bmp');%读取载体图像
io=double(io)/255;
output=io;
i1=io(:,:,1);%取图像的一层来隐藏
T=dctmtx(8);%对图像进行分块
DCTrgb=blkproc(i1,[8 8],'P1*x*P2',T,T');%对图像分块进行DCT变换
[row,col]=size(DCTrgb);
row=floor(row/8);
col=floor(col/8);
% 顺序信息嵌入
temp=0;
for i=1:count;if msg(i,1)==0if DCTrgb(i+4,i+1)<DCTrgb(i+3,i+2) %选择(5,2)和(4,3)这一对系数temp=DCTrgb(i+4,i+1);DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);DCTrgb(i+3,i+2)=temp;endelseif  DCTrgb(i+4,i+1)>DCTrgb(i+3,i+2)temp=DCTrgb(i+4,i+1);DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);DCTrgb(i+3,i+2)=temp;endendif DCTrgb(i+4,i+1)<DCTrgb(i+3,i+2)DCTrgb(i+4,i+1)=DCTrgb(i+4,i+1)-alpha;%将原本小的系数调整更小,使得系数差别变大elseDCTrgb(i+3,i+2)=DCTrgb(i+3,i+2)-alpha;end
end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]万谊丹.基于Arnold和DCT的抗剪切攻击图像水印研究[J].网络安全技术与应用. 2021,(08)

【图像隐写】基于matlab DCT图像隐写【含Matlab源码 365期】相关推荐

  1. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  2. 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  3. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  4. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  5. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  6. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  7. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  10. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

最新文章

  1. 从需求的角度去理解Linux系列:总线、设备和驱动
  2. 在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等
  3. jsp获取多个checkbox的值
  4. 树莓派4b ros镜像 网盘_树莓派4B的入手操作
  5. Java 8 Lambda表达式的函数式编程– Monads
  6. insert 多条数据 并且具有唯一标识符
  7. js 点击闭包_学习Javascript闭包(Closure)
  8. LeetCode1139. 最大的以 1 为边界的正方形 (二维滑动窗口待优化)
  9. 自学python好找工作么-学习python后好找工作吗
  10. 网工考试——网络体系结构、物理层和数据通信
  11. mybatis 主从表关联查询封装返回结果
  12. @JsonView注解的使用
  13. PDF如何复制页面,PDF复制页面这种方法就够了
  14. 百度网盘无提取码分享文件方法
  15. 蕉下招股书里提了26次的DTC,到底是啥?
  16. MQTT:QoS服务质量 0,1,2(Quality of Service 0, 1 2)
  17. 知识图谱方向顶会小记
  18. 爱阅书香之书源制作 POST请求方式
  19. python基础数据类型
  20. C++输入密码显示*

热门文章

  1. JAXB XML和Bean互相转换
  2. PHP中的逻辑运算符的优先级
  3. 第12章 决策树 学习笔记中
  4. halcon13永久破解dll,亲测可用
  5. Kinect初识 整理总结
  6. Atitit 数据库结果集映射 ResultSetHandler 目录 1. 常见的四种配置ResultSetHandler 1 2. Dbutil 1 3. Mybatis 致敬 3 4. H
  7. Atitit常见需求分析方法与工具链 attilax大总结
  8. Atitti  onvif 设备发现与原理
  9. Atitit 图像金字塔原理与概率 attilax的理解总结qb23
  10. paip.c#.nett 系统托盘动态图标闪烁图标