基于MATLAB的小波变换dwt和离散余弦dct的多方法对比数字水印系统

分手后的思念是犯贱 2023-01-01 03:53 312阅读 0赞
  1. 课题介绍

本课题为基于MATLAB的小波变换dwt和离散余弦dct的多方法对比数字水印系统。带GUI交互界面。有一个主界面GUI,可以调用dwt方法的子界面和dct方法的子界面。流程包括,读取宿主图像和水印图像,嵌入,多种方法的攻击(剪切,加噪,旋转等),提取,最后利用psnr峰值信噪比进行评价不同攻击下,鲁棒性的好坏。

  1. GUI界面
  2. 资源链接:
  3. https://gitee.com/liplip/shuzishuiyinicon-default.png?t=L892https://gitee.com/liplip/shuzishuiyin
  4. 主界面

v2-a88fda3a80ec7290e05a2656ccfb9b29\_b.jpg

  1. dct子界面

v2-e646132d38b327368725d266b0266a2c\_b.jpg

  1. dwt子界面

v2-6f272c70ae835bcddad3aa72fe06a56c\_b.jpg

  1. 其中dwt方法运行截图

v2-cd86c89fff86034f5ea19d54c2ae5ffe\_b.jpg

  1. 源码
  2. 读取宿主图像

    [name,path]=uigetfile({‘*.bmp’;’gif’},’载入图像’);

    1. X=imread([path,name]); %获取位置
    2. axes(handles.axes1);%axes表示获取位置,这里选取的位置为axes1
    3. imshow(X); %显示图像
    4. save('X'); %保存变量
    5. guidata(hObject,handles) %更新结构体;

    读取水印图像
    [name,path]=uigetfile({‘*.bmp’;’gif’},’载入图像’);

    1. W=imread([path,name]); %获取位置
    2. axes(handles.axes2);%axes表示获取位置,这里选取的位置为axes1
    3. W=rgb2gray(W)
    4. W=imresize(W,[64 64])
    5. imshow(W); %显示图像
    6. save('W'); %保存变量
    7. guidata(hObject,handles) %更新结构体;

    嵌入
    for i = 1:64

    1. ref1(i)=mean(lowarray(:,i)); %对矩阵每列求均值
    2. ref2(i)=mean(lowarray(i,:)); %对矩阵每行求均值
    3. for j=1:64
    4. w(i,j,:)=int8(dec2bin(W(i,j),8))-48; %dec2bin将矩阵W的每个元素转换成二进制值,每个二进制长度为8
    5. result(i,j,1)=xor(w(i,j,1),(lowarray(i,j)>ref1(i)));
    6. result(i,j,2)=xor(w(i,j,2),(lowarray(i,j)>ref2(i)));
    7. end

    end
    for i=1:4096

    1. ref3tmp=[XCsource(16381+4*i:16384+4*i)];%128*128=16384
    2. ref3(i)=mean(ref3tmp);
    3. ref4tmp=[XCsource(32765+4*i:32768+4*i)];%128*256=32768
    4. ref4(i)=mean(ref3tmp);
    5. ref5tmp=[XCsource(49149+4*i:49152+4*i)];%(128+64)*256=49152 or (128+256)*128=49152
    6. ref5(i)=mean(ref5tmp);
    7. ref6tmp=[XCsource(65521+16*i:65536+16*i)];%256*256=65536 or 128*512=65536
    8. ref6(i)=mean(ref6tmp);
    9. ref7tmp=[XCsource(131057+16*i:131072+16*i)];%256*512=131072
    10. ref7(i)=mean(ref7tmp);
    11. ref8tmp=[XCsource(196593+16*i:196608+16*i)];%(128+256)*512=196608
    12. ref8(i)=mean(ref8tmp);

    end
    攻击
    if get(handles.radiobutton1,’value’)

    1. option=1;

    q=num2str(get(handles.edit3,’string’))

    1. Z = imrotate(Z,q,'crop');%旋转 角度可以控制

    elseif get(handles.radiobutton2,’value’)

    1. option=2;
    2. q1=str2num(get(handles.edit4,'string'))
    3. q2=str2num(get(handles.edit6,'string'))
    4. q3=str2num(get(handles.edit7,'string'))
    5. q4=str2num(get(handles.edit8,'string'))
    6. Z(q1:q2,q3:q4)=255;%剪切 区间和嵌入值可以控制
  1. elseif get(handles.radiobutton3,'value')
  2. option=3;
  3. q=str2num(get(handles.edit5,'string'))
  4. Z=imnoise(Z,'gaussian',q);%加噪声 选择参数 help imnoise
  5. elseif get(handles.radiobutton4,'value')
  6. option=4;
  7. Z=Z
  8. end
  9. axes(handles.axes4)
  10. imshow(Z,[]);
  11. 提取
  12. for i =1:64
  13. for j=1:64
  14. pick(i,j,3)=xor(std(i,j,3),(lowarray(i,j)>(alaph3*reref3(i,j))));
  15. pick(i,j,4)=xor(std(i,j,4),(lowarray(i,j)>(alaph4*reref4(i,j))));
  16. pick(i,j,5)=xor(std(i,j,5),(lowarray(i,j)>(alaph5*reref5(i,j))));
  17. pick(i,j,6)=xor(std(i,j,6),(lowarray(i,j)>(alaph6*reref6(i,j))));
  18. pick(i,j,7)=xor(std(i,j,7),(lowarray(i,j)>(alaph7*reref7(i,j))));
  19. pick(i,j,8)=xor(std(i,j,8),(lowarray(i,j)>(alaph8*reref8(i,j))));
  20. end
  21. end
  22. for i=1:64
  23. for j=1:64
  24. od=double(reshape(pick(i,j,:),1,8));
  25. dec(i,j)=bin2dec(char(od+48));
  26. end
  27. end
  28. psnr计算
  29. origImg = double(origImg);
  30. distImg = double(distImg);
  31. [M N] = size(origImg);
  32. error = origImg - distImg;
  33. MSE = sum(sum(error .* error)) / (M * N);
  34. if(MSE > 0)
  35. PSNR = 10*log(255*255/MSE) / log(10);
  36. else
  37. PSNR = 99;
  38. end

发表评论

表情:
评论列表 (有 0 条评论,312人围观)

还没有评论,来说两句吧...

相关阅读

    相关 离散变换DWT)整理

    毕业设计涉及到对信号的去噪操作,而一维的离散小波变换可以运用在信号降噪中。因此对离散小波变换展开了调研,将内容整理如下。 离散小波变换(Discrete Wavelet Tr