Matlab-LSB信息隐藏实验

Matlab-LSB信息隐藏实验
⼀、实验内容
实验完成形式:
⽤MATLAB函数实现LSB信息隐藏和提取
实验选择载体:
512×512灰度图像
实验效果和分析:
usb转音频1.完成基本的LSB信息隐藏及提取
2.能随机选择嵌⼊位进⾏信息隐藏及提取(考虑安全性因素)
3.能够计算PSNR,分析信息隐藏图像质量
4.完成对秘密信息的图像载体进⾏攻击,采⽤的攻击⽅法: jpeg压缩,resize缩放
5.计算每种攻击⽅法提取的秘密信息误码率
⼆、实验涉及到的相关算法
1.基本LSB信息隐藏及提取算法——图像的第⼀层是LSB层,替换后对原图像的影响较⼩,第8层为MSB层对原图像影响较⼤。
1)读⼊图像载体:gray=imread('lena_gray.bmp');
2)读⼊要隐藏的图像,并转换为⼆进制:woman=imread('woman_rgb.bmp'); woman_to_binary=im2bw(woman);
3)在图像载体的第⼀层隐藏图像:gray_set=bitset(gray,1,woman_to_binary);
4)提取隐藏的图像:gray_get_1=bitget(gray_set,1);
算法实现源代码:
gray=imread('lena_gray.bmp');
gray_8=bitget(gray,8);
gray_6=bitget(gray,6);
gray_7=bitget(gray,7);
woman=imread('woman_rgb.bmp');
woman_to_binary=im2bw(woman);
gray_set=bitset(gray,1,woman_to_binary);
gray_set_8=bitset(gray,8,woman_to_binary);
gray_get_8=bitget(gray_set_8,8);
gray_get_1=bitget(gray_set,1);
subplot(221),imshow(gray),title('原始图像');
subplot(222),imshow(logical(gray_8)),title('原始图像的第8层');
subplot(223),imshow(gray_set_8),title('在第8层隐藏信息后');
subplot(224),imshow(logical(gray_get_8)),title('获取隐藏的图像');
figure,%新打开⼀个窗⼝十二水磷酸氢二钠
subplot(221),imshow(gray),title('原始图像');
subplot(222),imshow(woman_to_binary),title('要隐藏的图像');
subplot(223),imshow(gray_set),title('在第1层隐藏信息后');
subplot(224),imshow(logical(gray_get_1)),title('获取隐藏的图像');
2.完成随机选择嵌⼊位进⾏LSB信息隐藏及提取算法。
随机选择嵌⼊位,嵌⼊⽔印信息,input为载体图像,file为要嵌⼊的⽂本⽂件,output为嵌⼊⽔印后的图像,key为随机数种⼦。
%2.随机选择嵌⼊位
function [ste_cover,len_total]=rand_lsb_hide(input,file,output,key)
%读⼊图像矩阵
cover=imread(input);
ste_cover=cover;
ste_cover=double(ste_cover);
%将⽂本⽂件转换为⼆进制
f_id=fopen(file,'r');
[msg,len_total]=fread(f_id,'ubit1');
%判断嵌⼊的信息量是否过⼤
[m,n]=size(ste_cover);
if len_total>m*n
error('嵌⼊信息量过⼤,请重新选择图像');
end
%p作为消息嵌⼊位计数器
p=1;
%调⽤随机间隔函数选取像素点
[row,col]=randinterval(ste_cover,len_total,key);
%在LSB隐藏信息
for i=1:len_total
ste_cover(row(i),col(i))=ste_cover(row(i),col(i))-mod(ste_cover(row(i),col(i)),2)+msg(p,1);
if p==len_total
break;
end
p=p+1;
end
ste_cover=uint8(ste_cover);
imwrite(ste_cover,output);
%显⽰实验结果
subplot(1,2,1);imshow(cover);title('原始图像');
subplot(1,2,2);imshow(output);title('隐藏信息的图像');
实现效果:
读取嵌⼊的⽔印信息,output为嵌⼊⽔印后的图像,goalfile为提取出的⽔印⽂件,key与嵌⼊⽔印时的值相同:
function result = rand_lsb_get(output,len_total,goalfile,key) ste_cover=imread(output);
ste_cover=double(ste_cover);
%判断嵌⼊信息量是否过⼤
[m,n]=size(ste_cover);
if len_total>m*n
error('嵌⼊信息量过⼤,请重新选择图像');
end
frr=fopen(goalfile,'a');
%p作为消息嵌⼊位计数器,将消息序列写回⽂本⽂件
p=1;
%调⽤随机间隔函数选取像素点
[row,col]=randinterval(ste_cover,len_total,key);
for i=1 :len_total
if bitand(ste_cover(row(i),col(i)),1)==1
fwrite(frr,1,'ubit1');
result(p,1)=1;
else
fwrite(frr,0,'ubit1');
result(p,1)=0;
end
if p ==len_total
break;
宫灯制作
end
p=p+1;
end
fclose(frr);
随机数⽣成算法:
%书上50页
function [row,col]=randinterval(matrix,count,key)
%计算间隔的位数
[m,n]=size(matrix);
interval1=floor(m*n/count)+1;
interval2=interval1-2;
if interval2==0
error('载体太⼩,不能将私密信息隐藏进去');
end
%⽣成随机序列
rand('seed',key);
a=rand(1,count);
%初始化
row=zeros([1 count]);
col=zeros([1 count]);
%计算row,col
r=1;
c=1;温室保温被
row(1,1)=r;
col(1,1)=c;
for i=2:count
if a(i)>=0.5
c=c+interval1;
else
c=c+interval2;
end
if c>n
r=r+1;
if r>m
error('载体太⼩,不能私密信息隐藏进去');
end
c=mod(c,n);
if c==0
c=1;
end
end
row(1,i)=r;
col(1,i)=c;
end
3.计算误码率的算法——分别对含有秘密信息的图像载体进⾏攻击,攻击⽅式为jpeg压缩,resize缩放,根据不同的压缩⽐例,缩放⽐例的分别计算误码率并显⽰如下:
function ber_resize=calcute_resize_ber(input,messagefile,len_total,key)
床垫钢丝for resize =0.5:1:10
%读取已经隐藏信息的图像。
fp=imread(input);
%使⽤ imresize 函数对图像进⾏缩放,设定缩放⽐例。
output=imresize(fp,resize,'bicubic'); %利⽤双三次插值⽅法将 Ifp放⼤ size 倍
intchanged=double(output);
%p作为消息嵌⼊位计数器,将消息序列写回⽂本⽂件
p=1;
%调⽤随机间隔函数选取像素点
[row,col]=randinterval(intchanged,len_total,key);
for i=1 :len_total
if bitand(intchanged(row(i),col(i)),1)==1
result(p,1)=1;
else
result(p,1)=0;
汽车智能防盗系统
end
if p ==len_total
break;
end
p=p+1;
end
%读取原⽂件,即隐藏的信息,以⼆进制读取。并取得消息长度
message=fopen(messagefile,'r');
%按位以⼆进制形式读取⽂本内容与长度
[msg,len_total]=fread(message,'ubit1');
%⽐较取得的信息和原信息的每⼀位,记录不相等位数的个数。
bit_error=find(result~=msg); %寻不相等的位置
bit_error_count=size(bit_error,1); %统计不相等的个数
%⽤不相等个数除以总长度即可得到误码率ber
ber_resize(resize+0.5)=bit_error_count/len_total;
end
% plot参数说明:
% 参数1是横坐标⾃变量,参数2是纵坐标⾃变量,参数3是指⽤说明形式描点,参数4和5代表把散点链接起来resize=0.5:1:10;
plot(resize,ber_resize,'*',resize,ber_resize);
title('基于图⽚缩放质量的误码率图表');

本文发布于:2024-09-25 02:32:05,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/212756.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信息   图像   隐藏   提取   参数   消息
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议