一、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的值判断嵌入水印的图像与宿主图像的相似度,其定义为:

二、部分源代码

%读取要隐藏的灰度图
img1=imread('images/yang1.bmp');
%读取载体图片
imghide=imread('images/lenaRGB.bmp');%获取载体图片R值矩阵
image_r = imghide(:,:,1);
%获取载体图片G值矩阵
image_g = imghide(:,:,2);
%获取载体图片B值矩阵
image_b = imghide(:,:,3);
%置乱
img2 = zhiluan(img1);
[h w e]=size(img2);
img2 = double(img2);%将图像的每个像素点转换成8位二进制
matrixImg = reshape(cellstr(dec2bin(img2,8)),size(img2));%生成三个二维矩阵存放转换后的二进制串
matrixR=zeros(64,64);
matrixG=zeros(64,64);
matrixB=zeros(64,64);
%二进制个数
num = 1;
%将置乱的图像存入三个64*64的矩阵中,方便后续进行的加密算法(隐藏进入彩色图片R\G\B的三个二维矩阵)
for row = 1:hfor column = 1:wfor pos = 8:-1:1if(num<=64*64)%将前面64*64个比特隐藏进R二维矩阵if(mod(num,64)~=0)matrixR(floor(num/64+1),mod(num,64)) = bitget(bin2dec(matrixImg(row,column)),pos);num = num+1;elsematrixR(floor(num/64),64) = bitget(bin2dec(matrixImg(row,column)),pos);num = num+1;endelseif(num<=64*64*2)%将中间64*64个比特隐藏进G二维矩阵if(mod(num,64)~=0)matrixG(floor(num/64+1)-64,mod(num,64)) = bitget(bin2dec(matrixImg(row,column)),pos);num = num+1;elsematrixG(floor(num/64)-64,64) = bitget(bin2dec(matrixImg(row,column)),pos);num = num+1;endelseif(num<=64*64*3)%将最后64*64-120个比特隐藏进B二维矩阵,后面的120位不隐藏数据,因此全是2if(mod(num,64)~=0)matrixB(floor(num/64+1)-128,mod(num,64)) = bitget(bin2dec(matrixImg(row,column)),pos);num = num+1;elsematrixB(floor(num/64)-128,64) = bitget(bin2dec(matrixImg(row,column)),pos);num = num+1;endend    endend
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%调用三种隐藏算法分别在彩色图片的三个二维矩阵中隐藏matrixR、matrixG、matrixB
%最终三种隐藏算法后输出一张藏有隐藏图片的彩色图片
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%subplot(1,1,1)
imshow(imghide);
title('信息隐藏后的图片')
%保存隐藏信息后的图片
imwrite(imghide,'images/hide.bmp');
function image_g = DCT(original,watermark)
M=512; % 原图像长度  b=zeros(size(a),'uint8');
I=zeros(M,M);  % 原图数据
D=zeros(M,M);
D1=zeros(M,M,'uint8');
J=zeros(M,M); % 水印图片的信息
N=64;                   % 水印信息长度
W=zeros(N,N);  %恢复的水印
L=zeros(M,M);
block_dct1=zeros(M,M);
block_idct=zeros(M,M);
K=8;                     % 分块系数%隐藏矩阵存到I中,隐藏信息存到J中
I=original;
J=watermark;
for m=1:N                               %N=64为隐藏信息矩阵大小for n=1:N x=(m-1)*K+1;                    %K=8为分块的大小y=(n-1)*K+1;block_dct=I(x:x+K-1,y:y+K-1);   %取出一个8*8分块block_dct1=dct2(block_dct);     %对分块进行二维离散余弦变换 if(J(m, n)==0)%和斜下角的对比 小于就插入0if(block_dct1(4,4)>block_dct1(5,5))if(abs(block_dct1(4,4)-block_dct1(5,5))<4)block_dct1(5,5) = block_dct1(5,5) - 4;endtemp = block_dct1(4,4);block_dct1(4,4) = block_dct1(5,5);block_dct1(5,5) = temp;endelse%大于斜下角的就插入1if(block_dct1(4,4)<block_dct1(5,5))if(abs(block_dct1(4,4)-block_dct1(5,5))<4)block_dct1(4,4) = block_dct1(4,4) - 4;endendendblock_idct=idct2(block_dct1);     %逆离散余弦变换D(x:x+K-1,y:y+K-1)=block_idct;    %保存嵌入秘密信息后的逆变换结果end
end
image_g = uint8(D);
return

三、运行结果



四、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 DWT+DCT+LSB数字水印隐藏提取比较【含Matlab源码 1623期】相关推荐

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

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

  2. 【语音隐写】基于matlab GUI DCT音频数字水印嵌入提取【含Matlab源码 837期】

    一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值.通 ...

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

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

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

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

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

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

  6. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  7. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  8. 【图像隐写】基于matlab LSB数字水印嵌入提取【含Matlab源码 2412期】

    ⛄一.DCT数字水印简介 1 前言 随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显 ...

  9. 【语音隐写】基小波变换算法求解水印嵌入提取【含Matlab源码 513期】

    ⛄一.简介 随着计算机和网络的飞速发展,人们的许多创作和成果都以数字形式进行存储和发布.然而,数字作品极易被非法拷贝.伪造和窜改,使得很多版权所有者不愿意利用网络公开其作品,从而阻碍其自身发展.目前, ...

  10. 【语音隐藏】基于matlab小波变换DWT结合离散余弦变换DCT音频数字水印嵌入提取【含Matlab源码 2131期】

    ⛄一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值. ...

最新文章

  1. 【CodeIgniter 】解惑
  2. pandas 把某一列中字符串变数值_Python学习教程:Python数据分析实战基础 | 初识Pandas...
  3. 计算机网络实验(华为eNSP模拟器)——第六章 密码模式和AAA模式
  4. ant build里如何指定classpath
  5. php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例
  6. Python IO 基本编程示例
  7. 松鼠聚会(洛谷-P3964)
  8. 软件工程导论习题集 | 170道选择 | 50道填空 | 40道简答 | 其他试卷资源
  9. 数值积分方法的总结(从简单梯形积分到龙贝格积分、自适应积分、高斯积分等)
  10. tts文字转语音_最佳文字转语音(TTS)软件程序和在线工具
  11. 软考_信息系统项目管理师_信息系统项目管理基础
  12. QT入门第四天消息盒子+对话框+定时器+日期和时间(源码)
  13. ps、ai超强辅助类插件,神器一样的存在
  14. 用php进行联查,Thinkphp使用join联表查询的方法
  15. ACK和Ack的区别
  16. 关于云原生入门技能树图片资源展示问题
  17. java输出数学和英语成绩_java 计算班里每个同学3门课(英语、数学、数据库)的平均成绩和总成绩,编写一个成绩类来实现这些功能。...
  18. 电脑一键重装系统后连不上远程了?教你设置的方法
  19. 深度linux系统软件卸载在哪,LinuxDeepin/apt软件升级、安装、卸载与系统升级的好帮手...
  20. Blender 批量给材质

热门文章

  1. 收集常用的.net开源项目
  2. python: 列表的方法
  3. ng-深度学习-课程笔记-13: 目标检测(Week3)
  4. alexnet- tensorflow
  5. spring batch(批处理)
  6. ESP8266 tcp client 通信
  7. ROS install
  8. 第11章 支撑向量机 SVM 学习笔记 下 高斯核函数RBF
  9. 190709每日一句 以这样的方式去过每一天,你的生活将永远改变!
  10. Atitit 账号实名制验证等制度和手段 1. 实名制 - 身份证明的一种制度 免费编辑 修改义项名 1 1.1. 匿名制优缺点 2 1.2. 而实名制的弊端缺点是可影响信息安全,造成信息或隐私泄露。