⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 embed2.m

📁 matlib 数字水印源码希望和各位共同交流共享
💻 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 + -