📄 embed2.m
字号:
clear;
X=double(imread('lena.bmp'));
[XCsource,XSsource]=wavedec2(X,3,'db1');
M=size(X,1); % 读入原图并进行小波分解
xcabs=abs(XCsource); %取绝对值
xctmp=(XCsource); %另复制为tmp 原abs值留做备份
xcabs(1:4096)=0;
for i =1:4096 %
idxall=find(xcabs==max(xcabs));
idx(i)=idxall(1);
xcabs(idx(i))=0;
end
%idx生成 恢复xctmp值
for i=1:4096
change=idx(i); %确定变换位置
for j= 3:-1:1
delta=(M/(2^j))^2 ; %通过delta值确定在哪三个空间中选择
if ((change<2*delta) & (change >= delta+1))
before=change+delta;
after=change+2*delta;
break;
else if ((change > 2*delta+1) &(change < 3*delta))
before = change - delta;
after = change+delta;
break;
else if ((change>3*delta+1)&(change<4*delta))
before = change-2*delta;
after=change-delta;
break;
end
end
end
end
result(1,i)=change; % (1,:)是要嵌入的位置
result(2,i)=before;
result(3,i)=after;
end
XCchange=XCsource;
for i =1:4096
value(1)=xctmp(result(1,i));
value(2)=xctmp(result(2,i));
value(3)=xctmp(result(3,i));%选择相关的三个系数
if (max(value)==min(value))
continue;
else
test1=7*(median(value)-min(value))/(max(value)-min(value));
value(1)=value(1)+1;
if (max(value)==min(value))
continue;
else
test2=7*(median(value)-min(value))/(max(value)-min(value));
value(1)=value(1)-2;
if (max(value)==min(value))
continue;
else
test3=7*(median(value)-min(value))/(max(value)-min(value));%计算用于决策的变量
end
end
end
if (((test1>=1/2)&(test1<=3/2))|((test1>=5/2)&(test1<=7/2))|((test1>=9/2)&(test1<=11/2))|((test1>=13/2)&(test1<=7)))
if (((test2>=1/2)&(test2<=3/2))|((test2>=5/2)&(test2<=7/2))|((test2>=9/2)&(test2<=11/2))|((test2>=13/2)&(test2<=7)))
markvalue(i)=1;
markpoi(i)=result(1,i);
XCchange(result(1,i))=XCchange(result(1,i))+1;% 多多的算法中嵌入+1的情况
end
end
if (((test1>=0)&(test1<1/2))|((test1>=3/2)&(test1<=5/2))|((test1>=7/2)&(test1<=9/2))|((test1>=11/2)&(test1<=13/2)))
if(((test3>=0)&(test3<1/2))|((test3>=3/2)&(test3<=5/2))|((test3>=7/2)&(test3<=9/2))|((test3>=11/2)&(test3<=13/2)))
markvalue(i)=-1;
markpoi(i)=result(1,i);
XCchange(result(1,i))=XCchange(result(1,i))-1;%多多的算法中嵌入-1的情况
end
end
end
im_m=waverec2(XCchange,XSsource,'db1');
figure;
subplot(121);imshow(X,[]);
subplot(122);imshow(im_m,[]);
imwrite(uint8(im_m),'duoduo-lena.bmp');
Y=double(imread('duoduo-lena.bmp'));
psnr_im=10*log10(512^2*255^2/sum(sum((X-Y)^2)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -