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

二、部分源代码

clear all;
clc;
start_time=cputime;
%%%%%%%%%%%% 读取水印图像 %%%%%%%%
I=imread('mark.bmp');
%%%%%%%%%%显示水印图像%%%%%%%%%%%%%
figure(1);
subplot(2,3,1);
imshow(I),title('水印图像')
dimI=size(I);
rm=dimI(1);cm=dimI(2);
%%%%%%%%%%%%%%% 以下生成水印信息 %%%%%%%%
mark=I;
alpha=15,
k1=randn(1,8);
k2=randn(1,8);
a0=imread('lena.bmp');
psnr_cover=double(a0);
subplot(2,3,2),imshow(a0,[]),title('载体图像');
[r,c]=size(a0);
cda0=blkproc(a0,[8,8],'dct2');
%%%%%%%%%%%%%%%%%%嵌入 %%%%%%%%%%
cda1=cda0;
for i=1:rm
for j=1:cm
x=(i-1)*8;y=(j-1)*8;
if mark(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
%%%%% 嵌入水印后图像 %%%%%%%%%%%%%%
a1=blkproc(cda1,[8,8],'idct2');
a_1=uint8(a1);
imwrite(a_1,'withmark.bmp','bmp');
subplot(2,3,3),imshow(a1,[]),title('嵌入水印后的图像');
disp('嵌入水印处理时间');
embed_time=cputime-start_time,
%%%%%% 攻击实验 测试鲁棒性 %%%%%%%%%%%
disp('对嵌入水印的图像的攻击实验,请输入选择项:');
disp('1--添加白噪声');
disp('2--高斯低通滤波');
disp('3--JPEG 压缩');
disp('4--图像剪切');
disp('5--旋转10度');
disp('6--直接检测水印');
disp('其他--不攻击');
d=input('请输入选择(1-6):');
start_time=cputime;
figure(1);
switch d
case 6
subplot(2,3,4);
imshow(a1,[]);
title('未受攻击的含水印图像');
M1=a1;
case 1
WImage2=a1;
noise0=20*randn(size(WImage2));
WImage2=WImage2+noise0;
subplot(2,3,4);
imshow(WImage2,[]);
title('加入白噪声后图像');
M1=WImage2;
M_1=uint8(M1);
imwrite(M_1,'whitenoise.bmp','bmp');
case 2
WImage3=a1;
H=fspecial('gaussian',[4,4],0.2);
WImage3=imfilter(WImage3,H);
subplot(2,3,4);
imshow(WImage3,[]);
title('高斯低通滤波后图像');
M1=WImage3;
M_1=uint8(M1);
imwrite(M_1,'gaussian.bmp','bmp');
case 4
WImage4=a1;
WImage4(1:64,1:512)=512;
WImage4cl=mat2gray(WImage4);
subplot(2,3,4);
imshow(WImage4cl);
title('部分剪切后图像');
figure(1);
M1=WImage4cl;
case 3
WImage5=a1;
WImage5=im2double(WImage5);
cnum=10;
dctm=dctmtx(8);
P1=dctm;
P2=dctm.';
imageDCT=blkproc(WImage5,[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);
%文件名:PSNR.m
%函数功能:本函数将完成对输入图像的峰值信噪比计算
%输入格式举例:psnr=PSNR('lena.jpg','mark.jpg');
%参数说明:
%original为原始图像
%test为加有水印的图像
%psnrvalue为两者峰值信噪比
%实际上也计算了MSE,SNR值function psnrvalue=PSNR(lena,withmark);%计算原始图像的信号功率
A=imread('lena.bmp');
%A=rgb2gray(A);
A=double(A);
B=imread('withmark.bmp');
%B=rgb2gray(B);
B=double(B);%计算MSE
%判断输入图像是否有效
[m,n]=size(A);
[m2,n2]=size(B);
if m2~=m||n2~=nerror('图像选择错误');
end%计算MSE
msevalue=0;
for i=1:mfor j=1:nmsevalue=msevalue+(A(i,j)-B(i,j))^2;end
end
msevalue=msevalue/(m*n);
if msevalue==0error('图像选择错误');
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源码 803期】相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. ajax用户登录模块,ajax用户注册模块
  2. mysql的表空间是否自动扩展_Oracle修改指定表空间为自动扩展
  3. 【原创】C# API 未能创建 SSL/TLS 安全通道 问题解决
  4. UML学习总结(3)——StarUML指导手册
  5. linux shell数组深入学习理解
  6. rrnDB数据库简介-16S基因多拷贝数的证据
  7. 不同视图间的跳转方式
  8. java对数组进行排序_用Java对数组进行排序所需的最少交换
  9. (82)Vivado系统同步接口约束
  10. Nginx伪静态配置和常用Rewrite伪静态规则
  11. 计算机修改了服务如何恢复,怎么修复MSDTC服务?
  12. 关于特征筛选中的IV值
  13. 融资方案的商业计划书
  14. 数据库报duplicate XXX entry for key primary错误的可能原因以及解决方法
  15. US-016超声波测距模块
  16. 使用Python将MQTT传感器数据记录到SQL数据库
  17. unity PUN PhotonView莫名奇妙viewID冲突
  18. electron 主进程,和渲染进程的通信
  19. 目标检测数据集-Pascal VOC 数据集介绍
  20. HTML图像、背景、颜色

热门文章

  1. Zabbix钉钉机器人报警
  2. tomcat下的公共jar包配置
  3. 正则RegExp对象的用法
  4. java lock -----锁
  5. 如何配置可以远程访问linux上mysql
  6. 190420每日一句
  7. How to Build the Confidence Habit,7 Ways To Start To Value Yourself,Becoming More Me Through Meditat
  8. Atitit. js mvc 总结(2)----angular 跟 Knockout o99 最佳实践
  9. paip.提升用户体验---提取FLASH中图片
  10. paip.silverlight设计器载入异常NullReferenceException问题。