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

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像隐写基于matlab GBT+SVD数字水印嵌入与提取含Matlab源码 1668期相关的知识,希望对你有一定的参考价值。

一、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
    referencei=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=referencei;
    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)

以上是关于图像隐写基于matlab GBT+SVD数字水印嵌入与提取含Matlab源码 1668期的主要内容,如果未能解决你的问题,请参考以下文章

图像隐写基于matlab遗传算法的奇异值分解数字水印嵌入提取含Matlab源码 2115期

图像隐写基于matlab遗传算法的奇异值分解数字水印嵌入提取含Matlab源码 2115期

语音隐写基于matlab GUI SVD音频信号数字水印嵌入提取攻击含Matlab源码 2095期

语音隐写基于matlab GUI SVD音频信号数字水印嵌入提取攻击含Matlab源码 2095期

语音隐写基于matlab DCT+DWT+SVD音频数字水印嵌入提取含Matlab源码 1408期

图像隐写基于matlab FRFT+SVD盲水印嵌入+攻击+提取含Matlab源码 1757期