【图像隐写】基于matlab GBT+SVD数字水印嵌入与提取【含Matlab源码 1668期】

举报
海神之光 发表于 2022/05/29 01:29:16 2022/05/29
【摘要】 一、SVD数字水印简介 理论知识参考文献:基于DWT和SVD的彩色图像数字水印算法研究 一种基于DWT-SVD的图像数字水印算法 二、部分源代码 clc close all clear %% Inp...

一、SVD数字水印简介

理论知识参考文献:基于DWT和SVD的彩色图像数字水印算法研究
一种基于DWT-SVD的图像数字水印算法

二、部分源代码

clc
close all
clear
%% Input images
I=imread('Lena.jpg');
I=imresize(I,[512,512]);
logo=randsrc(8,8,[0,1]);

figure
subplot(1,4,1)
imshow(I)
title('原始图片')
subplot(1,4,2)
B=I(:,:,3); % Blue Channel
imshow(logo)
xlabel('水印图片')
gf=100; % Watermark Strength 
n_gt=64; % <=64
zigzag=[1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21 28 35 42 49 57 ...
    50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64];
gt_idx=zigzag(1:n_gt);
%% key generation:
key=randperm(256*256,64*64);
%% Block Selection (Embedding Step):
c=0;
Watermarked_B=B;
for i=1:64:64*64-63
    c=c+1;
    block_index=key(i:i+63);
    blockB=double(reshape(B(block_index),[8,8]));
    % graph-based transform:
    gt_blockB=GT2(blockB);
    % Singular Value Decomposition:
    [U,S,V]=svd(gt_blockB(gt_idx));
    sigmaB=S(1); % Biggest Singular Value
    % embedding watermark image:
    if logo(c)==1
        S(1)=sigmaB+gf;
    else
        S(1)=sigmaB-gf;
    end
    reference{i}=S;
    coeffs=U*S*V; % inverse svd
    rec_gt_block=zeros(8);
    rec_gt_block(gt_idx)=coeffs;
    rec_block=iGT2(rec_gt_block); % inverse gt
    row_block=reshape(rec_block,1,64);
    Watermarked_B(block_index)=row_block;
end
Watermarked_image=I;
Watermarked_image(:,:,3)=Watermarked_B;
subplot(1,4,3),
imshow(Watermarked_image);
title('嵌入水印的图片')
%% Extraction Step
Ex_watermark=zeros(8);
Watermarked_B=Watermarked_image(:,:,3);
c=0;
for i=1:64:64*64-63
    c=c+1;
    block_index=key(i:i+63);
    blockB=double(reshape(B(block_index),[8,8]));
    % graph transform:
    gt_blockB=GT2(blockB);
    % Singular Value Decomposition:
    [Ub,Sb,Vb]=svd(gt_blockB(gt_idx));
    Sbw=reference{i};
    sigmaB=Sb(1); % Biggest Singular Value - Host
    sigmaBW=Sbw(1); % Biggest Singular Value - Watermarked
    % Extracting watermark image:
    if sigmaBW>sigmaB
        Ex_watermark(c)=1;
    end
end
subplot(1,4,4),
imshow(Ex_watermark)
xlabel('提取水印');
Bit_Error_Rate=sum(sum(Ex_watermark~=logo))/numel(logo)
Structure_Similarity_Index=ssim(Watermarked_image,I)
Peak_Signal_toNoise_Ratio=psnr(Watermarked_image,I)
  
 

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]宋俊辉,鲁骏.彩色图像数字水印嵌入和提取模型研究——基于DWT和DCT[J].现代商贸工业. 2011,23(17)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/122439823

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。