matlab音频和图像简单处理——信息隐藏基础

离散傅里叶,离散余弦和离散小波变换是图像、音频信号常用的基础操作,时域信号转化到不同变换域以后,会导致不同程度的能量集中,信息隐藏利用这个原理在变换域选择适当位置系数进行 改、嵌入信息,并确保图像、音频信号经处理后感官质量无明显变化。

至于什么是傅里叶变换、有什么作用,虽然学过但是上课划水,不是很了解。看了几篇博客找到一篇讲解生动的,读后感觉了解了许多:
简单了解傅里叶变换

音频

%声音信号的傅氏变换
% [x,fs]=audioread('tada.wav'); 
% fx=fft(x);
% plot(abs(fftshift(fx)));
% xlabel('Time');
% ylabel('Amplitude');
% title('The Wave form of signal');
% grid on; 
%小波变换
% [a,fs]=audioread('tada.wav'); 
% [ca1,cd1]=dwt(a(:,1),'db4');%近似,细节
% a0=idwt(ca1,cd1,'db4',length(a(:,1)));
% subplot(4,1,1);plot(a(:,1));
% subplot(4,1,2);plot(cd1);
% subplot(4,1,3);plot(ca1);
% subplot(4,1,4);plot(a0);
%语音信号小波变换三级分解
% [a,fs]=audioread('tada.wav'); 
% [c,l]=wavedec(a(:,2),3,'db4');
% ca3=appcoef(c,l,'db4',3);%提取第3层的近似系数
% cd3=detcoef(c,l,3);%提取第3层的细节系数
% cd2=detcoef(c,l,2);
% cd1=detcoef(c,l,1);
% a0=waverec(c,l,'db4');
% 
% subplot(6,1,1);plot(a(:,2));
% subplot(6,1,2);plot(cd1);
% subplot(6,1,3);plot(cd2);
% subplot(6,1,4);plot(cd3);
% subplot(6,1,5);plot(ca3);
% subplot(6,1,6);plot(a0);
% 离散余弦变换
% len=40000;
% [fn,pn]=uigetfile('* .wav','请选择音频文件')
% [x,fs]=wavread(strcat(pn,fn),len);
% xsync=idct(xf);
% [row,col]=size(x);
% xff=zeros(row,col);
% xff(1:row,1:col)=xf(1:row,1:col);
% y=idct(xff);
clear;
[x,fs]=audioread('tada.wav');
len=40000;
f1=[0:len-1]*fs/len;
xf=dct(x);
figure;
subplot(2,1,1);plot(x);title('original audio');
subplot(2,1,2);plot(abs(xf));title('DCT');



图像

% b=imread('lena.jpg');     % 读入图像,像素值在b中
% b=rgb2gray(b);    % 转换为灰度图像
% figure(1);
% I=im2bw(b);
% imshow(b);
% title('(a)原图像');
% figure(2);
% fa=fft2(I);        % 使用fft函数进行快速傅立叶变换
% ffa=fftshift(fa);    % fftshift函数调整fft函数的输出顺序,将零频位置移到频谱的中心 
% imshow(ffa,[200,225]);
% title('(b)幅度谱');
% figure(3);
% image(abs(ffa));
% l=mesh(abs(ffa));   % 画网格曲面图
% title('(c)幅度谱的能量分布');
% lena图像的一级小波变换
% b=imread('lena.jpg');
% a=im2bw(b);
% nbcol=size(a,1);
% [ca1,ch1,cv1,cd1]=dwt2(a,'db4');
% cod_ca1=wcodemat(ca1,nbcol);
% cod_ch1=wcodemat(ch1,nbcol);
% cod_cv1=wcodemat(cv1,nbcol);
% cod_cd1=wcodemat(cd1,nbcol);
% image([cod_ca1,cod_ch1;cod_cv1,cod_cd1]);
%图像的二级小波变换
b=imread('lena.jpg');
a=im2bw(b);
nbcol=512;
nbc=256;
[ca1,ch1,cv1,cd1]=dwt2(a,'db4');
[ca2,ch2,cv2,cd2]=dwt2(ca1,'db4');
cod_ca1=wcodemat(ca1,nbc);
cod_ch1=wcodemat(ch1,nbc);
cod_cv1=wcodemat(cv1,nbc);
cod_cd1=wcodemat(cd1,nbc);
cod_ca2=wcodemat(ca2,nbcol);
cod_ch2=wcodemat(ch2,nbcol);
cod_cv2=wcodemat(cv2,nbcol);
cod_cd2=wcodemat(cd2,nbcol);
tt=[cod_ca2,cod_ch2;cod_cv2,cod_cd2];
tt=imresize(tt,[131,131]); %这里要根据cod_ca2更改
image([tt,cod_ch1;cod_cv1,cod_cd1]);
%离散余弦变换
% b=imread('lena.jpg');% 读入图像,像素值在b中
% b=rgb2gray(b);    % 转换为灰度图像
% figure(1);
% imshow(b);
% title('(a)原图像');
% 
% I=im2bw(b);
% figure(2);
% c=dct2(I);   % 进行离散余弦变换
% imshow(c);
% title('(b)DCT变换系数');
% 
% figure(3);
% mesh(c);     % 画网格曲面图
% title('(c)DCT变换系数(立体视图)');

%读bmp
% clear all;
% [A,M]=imread('d:\matlabcode\lena.bmp','bmp');
% figure
% imshow(A);
% [x,y]=size(A);% x = 512   y = 1536
% class(A); % ans = uint8
% gray=rgb2gray(A);
% size(gray);% ans =   512   512
% imshow(gray);
% bw=im2bw(gray);
% imshow(bw);
% imwrite(bw,'b.bmp');

你可能感兴趣的:(junior2信息隐藏)