基于离散余弦变换(DCT)的音频信息隐藏算法

基于离散余弦变换(DCT)的音频信息隐藏算法

信息嵌入步骤

1)将logo图像转化为二进制图片;
2)计算logo大小,变为1行a*b列向量;
3)导入音频从第100个位置开始嵌入,设置深度为0.2;
4)每两个比特嵌入;
5)输出音频。

//matlab
clc;clear;close all
logout=imread('logo.jpg');%导入秘密信息logo
logout=im2bw(logout,0.5);%RGB转二值图
imwrite(logout,'logo_ljx.jpg');%输出二值图像
[a,b]=size(logout);%计算logo大小,a行b列
bitstring=reshape(logout,1,a*b);%将logo变为一行a*b列的向量
for i=1:a*b
    if bitstring(i)>0
        mstring(i)=1;
    else
        mstring(i)=-1;
    end
end
%导入原始音频
[y,fs]=audioread('test2.wav');
%DCT
dcty=dct(y);
%嵌入信息
dcty1=dcty;
k=100;%表示从第100个位置开始嵌入信息
save ab.mat a b k;%保存logo大小,嵌入起始位置k
aa=0.2;%嵌入深度
%2个比特
for j=1:a*b
    if dcty(k+j*2)>0
        dcty1(k+j*2)=(1+aa*mstring(j))*abs(dcty(k+j*2));
    else
        dcty1(k+j*2)=-(1+aa*mstring(j))*abs(dcty(k+j*2));
    end
    if dcty(k+j*2-1)>0
        dcty1(k+j*2-1)=(1+aa*mstring(j))*abs(dcty(k+j*2-1));
    else
        dcty1(k+j*2-1)=-(1+aa*mstring(j))*abs(dcty(k+j*2-1));
    end
end
y1=idct(dcty1);
audiowrite('test2_ljx.wav',y1,fs);%输出音频
a=size(y);
Tn=(a(1)-1)/fs;
t=0:1/fs:Tn;
figure(1)
subplot(211),plot(t,y),xlabel('时间'),ylabel('原始音频') 
subplot(212),plot(t,y1),xlabel('时间'),ylabel('携密音频')
snr=SNR(y,y1) 

信息提取步骤

1)导入原始音频和携密音频;
2)对音频进行dct处理;
3)提取信息;
4)将图片信息变为a*b列的图片;
5)导出图片。

clc;clear;close all
%导入原始音频
[y,fs]=audioread('test2.wav');
%导入携密音频
[yout,fs]=audioread('test2_ljx.wav');
%DCT变换
dcty=dct(y);
dctyout=dct(yout);
k=100;
load ab.mat
for i=1:a*b
    count=0;
    if abs(dctyout(k+i*2))>abs(dcty(k+i*2))
        count=count+1;
    end
    if abs(dctyout(k+i*2-1))>abs(dcty(k+i*2-1))
        count=count+1;
    end
    if count>1
        msout(i)=1;
    else
        msout(i)=0;
    end
end
%变为a行b列的向量
bitstring=reshape(msout,a,b);
imwrite(bitstring,'logo_dct.jpg');
%读取二进制图片
logo_bin=imread('logo_ljx.jpg');
%经过DCT处理的logo
logo_dct=imread('logo_dct.jpg');
%计算psnr
psnr=psnr(logo_bin,logo_dct);
%计算BER
bert=biterr(logo_bin,logo_dct);
ber=bert/(a*b);
  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值