【图像隐写】基于matlab DWT数字水印嵌入+提取+攻击【含Matlab源码 622期】

举报
海神之光 发表于 2022/05/29 01:34:23 2022/05/29
【摘要】 一、图像处理简介 图像处理知识点: 1 数字图像处理及matlab实现知识点总结1-4 2 数字图像处理及matlab实现知识点总结 5-10 二、部分源代码 clear all close al...

一、图像处理简介

图像处理知识点:
1 数字图像处理及matlab实现知识点总结1-4
2 数字图像处理及matlab实现知识点总结 5-10

二、部分源代码

clear  all
close all
clc;
%%
I = imread('1.png');
% I = double(rgb2gray(I));
% I = im2double(I);
[WS,map,alpha] = imread('水印01.png');  %读取水印图像
W=double(255-alpha);    %alpha 为透明度,此图不透明alpha=0
[mw,nw]=size(W);
W=logical(W);
figure,subplot(121),imshow(I);title('载体图像')
subplot(122),imshow(W);title('水印图像')
%%
ntimes=20;rngseed=59433;
%添加水印
Iw = (setdwtwatermark(I,W,ntimes,rngseed));

%计算水印图像的峰值信噪比
mn=numel(I);
Imax=max(I(:));
% psnr=10*log10(mn*double(Imax)^2/sum((im2double(I(:))-im2double(Iw(:))).^2));
peaksnr=psnr(im2uint8(Iw),I);
%提取水印
Wg=getdwtwatermark(Iw,W,ntimes,rngseed);
nc=sum(Wg(:).*W(:))/sqrt(sum(Wg(:).^2))/sqrt(sum(W(:).^2));
figure,subplot(121),imshow(Iw);title('嵌入水印后的载体图像')
subplot(122),imshow(Wg),title(['从载体图像中提取出的水印,NC=',num2str(nc)]);
%%水印攻击实验
function dwtwatermarkattack(action,Iw,W,ntimes,rngseed)
%action;水印攻击类型
%Iw:嵌入水印的图像
%W:原始水印,用来计算相关性
%ntimes,rngseed:水印算法秘钥
%模拟水印攻击
switch lower(action)
    case 'filter'
        Ia=imfilter(Iw,ones(3)/9);
    case 'gaussian noise'
        Ia=imnoise(Iw,'gaussian');
    case 'resize'
        Ia=imresize(Iw,0.5);
        Ia=imresize(Ia,2);
    case 'noise'
        Ia=imnoise(Iw,'salt & pepper',0.01);
    case 'crop'
        Ia=Iw;
        Ia(50:400,50:400,:)=randn();
    case 'rotate'
        Ia=imrotate(Iw,45,'nearest','crop');
        Ia=imrotate(Ia,-45,'nearest','crop');
    case 'motion filter'  %运动模糊
        PSF = fspecial('motion',20,15);
        Ia = imfilter(Iw,PSF,'conv','circular');
    case 'gaussian filter' %高斯模糊       
        G = fspecial('gaussian', [5 5], 2);
        Ia = imfilter(Iw,G,'same');
end
unction Iw =setdwtwatermark(I,W,ntimes,rngseed)
%W水印图像,二值图,且长宽相等
%ntimes:秘钥1,Arnold置乱次数
%rngseed:秘钥2,随机数种子
%Iw:添加了水印后的图像
type=class(I);
% I=double(I);
% IR = I(:,:,1);  IG = I(:,:,2);  IB =( I(:,:,3));
% I=IB;
IHSV=rgb2hsv(I);
IH=IHSV(:,:,1); IS=IHSV(:,:,2); IV=IHSV(:,:,3);
I=IV*255;
[mI,nI]=size(I);
[mW,nW]=size(W);
if mW~=nW
    error('SETDWTWATERMARK:ARNOLD','ARNOLD置乱要求水印图像长宽必须相等!')
end
%%
%对载波图像进行水印分解
[ca1,ch1,cv1,cd1]=dwt2(I,'haar');
[ca2,ch2,cv2,cd2]=dwt2(ca1,'haar');

%%
%对水印进行置乱
Wa=W;
H=[1,1;1,2]^ntimes; 
for i=1:nW
    for j=1:nW
        idx=mod(H*[i-1;j-1],nW)+1;
        Wa(idx(1),idx(2))=W(i,j);
    end
end

%%
%小波数字水印的嵌入
cd2w=cd2;
rng(rngseed);
idx=randperm(numel(cd2),numel(Wa));%随机打乱一个数字序列
for i=1:numel(Wa)
    c=cd2(idx(i));
    z=mod(c,nW);
    if Wa(i)
        if z<nW/4
            f=c-nW/4-z;
        else
            f=c+nW*3/4-z;
        end
    else 
        if z<nW*3/4
            f=c+nW/4-z;
        else
            f=c+nW*5/4-z;
        end
    end
    cd2w(idx(i))=f;
end

  

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]陈浩,方勇,朱大洲,王成,陈子龙.基于蚁群算法的玉米植株热红外图像边缘检测[J].农机化研究. 2015,37(06)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/115190537

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。