信息隐藏实验1 计算机图像的基本操作
实验目的
一、熟悉MATLAB图像基本操作
二、使用图像降级技术实现图中藏图
实验要求
一、要求能够利用C/C++、Matlab等高级编程语言编写基本的算法程序,并通过调试、运行程序。
二、上交实验报告
实验内容
一、熟悉MATLAB,完成下述实验:
实验1.1:用MATLAB计算3+2
实验1.2:矩阵操作
>>X=zeros(m,n) ; %m,n自由选择
>>Y=zeros(size(X));
>>Z=[1,2,3;4,5,6;7,8,9];
>>Z(1,2)=?
>>X(p,q)=Z(1,2); %p,q自由选择
实验1.3:伪随机发生器一般模型:
>>rand(‘seed’, num); %num自己选择
>>rand(n,m); %m,n自己选择
>>randint(n,m,rg); %m,n,rg自己选择
实验1.4:熟悉一般文件的导入操作
>>frr=fopen(filepath,’r’); %filepath自己选定
>>[msg,msg_len]=fread(frr,’ubit1’);
实验1.5:熟悉图像的导入操作
>>data1=imread(‘c:\woman.bmp’); %图像自己选定
>>data2=imread(‘c:\lena.jpg’); %图像自己选定
实验1.6:RGB图像分层
>> imageR=data2(:,:,1); %data2由实验1.5生成
实验1.7:RGB图像合并
>>%对R层进行处理
>> data2(:,:,1)=imageR;
实验1.8:熟悉显示图像实验结果操作:
>>subplot(121),imshow(data1);title(‘woman’),
subplot(122),imshow(data2);title(‘lena’);
实验1.9:熟悉MATLAB的位操作
>>data3=bitand(data1,240);
实验1.10:熟悉取图像大小的操作
>>[row,col]=size(data1);
实验1.11:二维绘图plot
>>y=rand(100,1)
>>plot(y);
实验1.12:二维绘图plot
>>x=1:0.1*pi:2*pi;
>>y=sin(x);
>>z=cos(x);
>>plot(x,y,'-ob',x,z,':ms');
绘图结果:
实验1.13:熟悉MATLAB脚本编程的基本语法,
生成脚本文件*.m,实现以下多个基本绘图操作:
>>t=0:0.01*pi:2*pi;
>>plot(t,sin(t));
>>title(‘0到2π的正弦曲线’,’FontSize’,16);
>>xlabel(‘t=0到2 π’);
>>ylabel(‘sin(t)’);
>>text(pi,sin(pi),’\bullet\leftarrow sin(t)=0’);
>>gtext(’\bullet\最小值sin(t)=-1’);
绘图结果:
实验1.14:三维绘图plot3
>>y=rand(100,1)
>>x=0:pi/50:10*pi;
>>y=sin(x);
>>z=cos(x);
>>plot3(x,y,z);
绘图结果:
实验1.15:三维绘图mesh
>>x=-8:0.5:8;
>> y=x';
>> a=ones(size(y))*x;
>> b=y*ones(size(x));
>>c=sqrt(a.^2+b.^2)+eps;
>> z=sin(c)./c;
>>mesh(z);
绘图结果:
二、使用图像降级技术实现图中藏图
实验1.16:图像降级
给定同样尺寸的伪装载体和秘密图像,发送者把伪装载体图像灰度(或彩色)值的4个最低比特替换成秘密图像的4个最高比特。接收者从隐藏后的图像中把四个最低比特提取出来,从而获得秘密图像的4个最高比特位。
lm脚本程序如下:
%文件名:imagehide.m
%函数功能:直接将秘密图像的高4bit隐藏在RGB载体图像的R、G、B层中所选的那一层的低4bit,并将秘密图像提取出来,最后显示。要求载体图像的大小大于等于秘密图像的大小。且秘密图像是二值或灰度图像。
%输入格式:
%data=imagehide('c:\Lenna.bmp','c:\woman.bmp','c:\mix.bmp','bmp',3)
%参数说明:
% cover是载体图像的地址
% massage是秘密图像的地址
% goleimage是隐藏后图像的地址
% pemission是图像的类型
%level是作为的载体的具体层。R为1,G为2,B为3。
%data是隐藏后图像的矩阵
function data=imagehide(cover,massage,goleimage,permission,level)
%提取图像信息并分层
cover = imread(cover,permission);
data=cover;
msg=imread(massage,permission);
[row,col]=size(cover);
cover1=cover(:,:,level);
%置载体图像R层的低4bit为0
for i=1:row
for j=1:col/3
cover1(i,j)=bitand(cover1(i,j),240);
end
end
%置秘密图像的低4bit为0
takemsg4=bitand(msg,240);
%将秘密图像的高4bit右移4位
shiftmsg4=bitshift(takemsg4,-4);
%图像隐藏
for i=1:row
for j=1:col/3
cover1(i,j)=bitor(cover1(i,j),shiftmsg4(i,j));
end
end
%写回并保存
data(:,:,level)=cover1;
imwrite(data,goleimage,permission);
%提取秘密图像信息,检测隐藏效果
data=imread(goleimage,permission);
[row,col]=size(data);
A=data(:,:,level);
for i=1:row
for j=1:col/3
A(i,j)=bitand(A(i,j),15);
end
end
A=bitshift(A,4);
%显示结果
subplot(221),imshow(cover);title('载体图像');
subplot(222),imshow(massage);title('秘密图像');
subplot(223),imshow(data);title('隐藏后的图像');
subplot(224),imshow(A);title('提取的秘密图像');
l实验绘图结果: