图像处理基于matlab DWT图像水印嵌入提取攻击含Matlab源码 622期
Posted 紫极神光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理基于matlab DWT图像水印嵌入提取攻击含Matlab源码 622期相关的知识,希望对你有一定的参考价值。
一、简介
小波变换原理
小波变换是一种信号的时间一尺度(时间一频率)分析方法,一种窗口大小固定不变形状可改变,时间窗和频率窗都可以改变的时频局部化分析方法。它具有多分辨率分析( Multi-resolution Analysis)的特点,且在时频两域都具有表征信号局部特征的能力。
小波分析方法在低频部分具有较高的频率分辨率和较低的时间分辨率,在高频部分具有较高的时间分辦率和较低的频率分辦率,所以被誉为“数学显微镜”。正是这种特性,使小波变换具有对信号的自适应性。
小波分析被看成调和分析这一数学领域半个世纪以来的工作结晶,已经广泛地应用于信号处理、图像处理、量子场论、地震勘探、语音识别与合成、音乐、雷达、CT成像、彩色复印、流体湍流、天体识别、机器视觉、机械故障诊断与监控、分形以及数字电视等科技领域。
原则上讲,传统上使用傅里叶分析的地方,都可以用小波分析取代。小波分析优于傅里叶变换的地方是在时域和频域同时具有良好的局部化性质。
这样小波变換对不同的频率在时域上的取样步长是调节性的:在低频时,小波变换的时间分辨率较低,而频率分辦率较高;在高频时,小波变换的时间分辨率较高,而類率分辨率较低。这正符合低频信号变化缓慢而高频信号变化迅速的特点。
这便是它优于经典傅里叶变换与短时傅里叶变换的地方。
二、源代码
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
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423
以上是关于图像处理基于matlab DWT图像水印嵌入提取攻击含Matlab源码 622期的主要内容,如果未能解决你的问题,请参考以下文章
图像处理基于matlab DWT图像水印嵌入提取攻击含Matlab源码 622期
水印攻击信息提取基于盲带矩阵DWT变换和DCT变换数字水印嵌入和水印攻击之后的图像信息提取解析matlab仿真(包括噪声攻击,旋转攻击以及压缩攻击)
图像隐藏基于小波变换DWT图像水印嵌入提取含各类攻击matlab源码
图像隐写基于matlab GUI DWT+DCT+SVD数字水印嵌入+提取+攻击(带面板)含Matlab源码 1664期