📄 qual_emb1.m
字号:
function [Q_coef,A]=qual_emb1(w1,w2,w3,w4,coef,delta)%delta量化步长
W=[w1,w2;w3,w4];
M=size(W,1);
N=size(coef,1);
a=1;b=1;c=1;d=2;K=100;%a,b,c,K是密钥,其中d满足ad-bc=1.
numda=0.618; %numda黄金分割数0.618
Q_f=zeros(N,N);
A=zeros(N,N);
for i=1:M
for j=1:M
x(1)=i;y(1)=j;%x,y的值为始点
for k=1:K-1%水印的嵌入位置由具有混沌特性的Arnold映射确定
x(k+1)=mod(a*x(k)+b*y(k),N);%x,y的初值,递归求x(K)值
y(k+1)=mod(c*x(k)+d*y(k),N);
end
if x(K)==0%避免x下标为0
x(K)=N;
end
if y(K)==0%避免y下标为0
y(K)=N;%在增加水印安全性的同时还解决了水印嵌入位置冲突的问题
end
%对嵌入位置的小波系数的量化
m=x(K);%K不变,固定位置,但不同层时v3,v2,v1,使N变x(K)值变
n=y(K)
A(m,n)=1;%返回后不用,仅起标志位作用
r=fix(coef(m,n)/delta);
if mod(r,2)==0 %提取时就用此段
Q_f(m,n)=((1-sign(coef(m,n)))/2);%uint8
else Q_f(m,n)=((1+sign(coef(m,n)))/2);%uint8
end
%修改嵌入位置的小波系数:coef(m,n)
if W(i,j)~=Q_f(m,n)
if abs( coef(m,n)-fix(coef(m,n)/delta)*delta)>=delta/2
coef(m,n)= fix(coef(m,n)/delta)*delta+sign(coef(m,n))*(2-numda)*delta;
else
coef(m,n)= fix(coef(m,n)/delta)*delta-sign(coef(m,n))*(1-numda)*delta;
end
end
end
end
for i1=1:N
for j1=1:N
Q_coef(i1,j1)=coef(i1,j1);%整理输出
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -