【图像隐藏】基于果蝇算法改进不扩展视觉密码matlab代码

1 简介

针对嵌入水印强度的不确定性,提出了一种利用果蝇优化算法并结合小波变换与奇异值分解的数字图像水印嵌入算法。首先,利用小波变换对载体图像进行二级小波分解,然后对 LL2 子带进行4 × 4 分块并进行奇异值分解以提高嵌入水印的稳定性,最终将水印信息以一定的强度嵌入到分解的最大奇异值中。果蝇优化算法综合考虑水印嵌入算法的鲁棒性与不可见性之间的矛盾,并结合水印嵌入方案确定最佳嵌入强度,首先根据影响水印性能的指标定义适应度函数,并对该函数的参数进行优化,确定了最佳的适应度函数,然后再应用果蝇优化算法寻找嵌入水印强度的最优解。最后通过仿真实验对该水印方案的性能进行测试与分析,实验结果表明,当嵌入水印图像的峰值信噪比达到 40 dB 时,提取水印的平均 NC 值能达到 0. 98 以上。

2 部分代码

clc
clear all
close all
%% 水印嵌入
I=imread('lena.bmp');                       %载入载体图像
I=im2double(I);
I=rgb2gray(I);                              %转为灰度图
[LL,LH,HL,HH]=dwt2(I,'haar');               %载体图像dwt变换
[LL2,LH2,HL2,HH2]=dwt2(LL,'haar');
[Ul,Sl,Vl]=svd(LL2);                            %低频分量SVD分解
[Uh,Sh,Vh]=svd(HH2);                         %高频垂直分量SVD分解

plot(yy)
xlabel('迭代次数')
ylabel('适应度函数')
af=S_best;                                     %嵌入量
S2=Sl+af*Sw;                                 %水印图的奇异值矩阵Sw以af嵌入量加到载体图像LL子代的奇异值矩阵S上
LL3=Ul*S2*Vl';                                %嵌入后新的低频分量

Ww=A2;                    %载入水印图像
Ww=im2double(Ww); 
[Uww,Sww,Vww]=svd(Ww);                          %水印图SVD分解
az=af;                                     %嵌入量
S2h=Sh+az*Sww;                                 %水印图的奇异值矩阵Sww以az嵌入量加到载体图像HH子代的奇异值矩阵S上
HH3=Uh*S2h*Vh';                                %嵌入后新的低频分量

LL=idwt2(LL3,LH2,HL2,HH3,'haar');              %dwt逆变换得到含水印图
IW=idwt2(LL,LH,HL,HH,'haar');          
imwrite(IW,'watermarked.png');
figure(2);subplot(331);imshow(I);title('载体图像');
subplot(332);imshow(Z);title('秘密图像');
subplot(333);imshow(W);title('第一个水印图像');
subplot(334);imshow(Ww);title('第二个水印图像');
subplot(335);imshow(IW);title('含水印图');
%旋转攻击
% IW1 = imread('watermarked.png');
Aimage4=IW;
Aimage4=imrotate(Aimage4,5,'bilinear','crop');
Aimage_4=mat2gray(Aimage4);
J=Aimage_4;
% imwrite(WZ,'watermarked11.png');
subplot(336),imshow(J),title('旋转后的图象');
%% 水印提取
% J=imread('watermarked11.png');               %读取含水印图             
J=im2double(J);
[LL4,LH4,HL4,HH4]=dwt2(J,'haar');           %含水印图dwt变换
[LL5,LH5,HL5,HH5]=dwt2(LL4,'haar'); 
[U3,S3,V3]=svd(LL5);                        %低频分量SVD分解
[U4,S4,V4]=svd(HH5);                        %高频垂直分量SVD分解
Sw1=(S3-Sl)/af;                               %得到提取水印图的奇异值矩阵
W2=Uw*Sw1*Vw';                               %SVD逆变换得到提取水印图 
subplot(337);imshow(W2);title('提取第一个水印图');                     
Sww1=(S4-Sh)/az;                               %得到提取水印图的奇异值矩阵
W3=Uww*Sww1*Vww';                               %SVD逆变换得到提取水印图
subplot(338);imshow(W3);title('提取第二个水印图');
A12=W|Ww;
W=1-W;
Ww=1-Ww;
A12=1-A12;
subplot(339);imshow(A12);title('恢复秘密图像');
Nc1=NC(A1,W2)
Nc2=NC(A2,W3)
psnr1=psnr(A1,W2)
psnr2=psnr(A2,W3)
disp(['最佳嵌入强度=',num2str(S_best)])

3 仿真结果

4 参考文献

[1]刘俊秀等. "一种基于小波变换,奇异值分解,海森堡分解和果蝇优化算法的图像隐藏方法.", CN108182655A. 2018.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值