【图像隐写】DCT数字水印添加+提取+干扰【含Matlab源码 803期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、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)+alphak(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha
k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alphak(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha
k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alphak(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=20randn(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=n
error(‘图像选择错误’);
end

%计算MSE
msevalue=0;
for i=1:m
for j=1:n
msevalue=msevalue+(A(i,j)-B(i,j))^2;
end
end
msevalue=msevalue/(m*n);
if msevalue==0
error(‘图像选择错误’);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]万谊丹.基于Arnold和DCT的抗剪切攻击图像水印研究[J].网络安全技术与应用. 2021,(08)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值