这里给出由给定嵌入率随机生成秘密信息的实现:
- 顺序嵌入
image='Lena.bmp';
cover=imread(image);
rate=input('please enter rate(0~1):'); %输入嵌入率
ste_cover=double(cover); %将图像矩阵的类型转换成双精度型,便于后续的运算
[m,n]=size(ste_cover); %读取ste_cover的行和列
%根据rate计算秘密信息位的长度并生成秘密信息
msg_len=floor(m*n*rate);
msg=randsrc(1,msg_len,[0 1;0.5 0.5]);
p=1; %p为秘密信息的位计数器
%按照产生的秘密信息依次将图片层的最后一位替换为秘密消息
for f2=1:n
for f1=1:m
if p>=msg_len
break;
end
ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(1,p);
p=p+1;
end
if p==msg_len
break;
end
end
ste_cover=uint8(ste_cover); %将ste_cover转换为uint8类型
imwrite(ste_cover,'ste_cover.bmp'); %输出密写图像
fprintf('message length=%d\n',msg_len); %输出秘密信息长度
- 由左上角开始嵌入
image='Lena.bmp';
cover=imread(image);
rate=input('please enter rate(0~1):'); %输入嵌入率
ste_cover=double(cover); %将图像矩阵的类型转换成双精度型,便于后续的运算
[m,n]=size(ste_cover); %读取ste_cover的行和列
row=round(m*rate);
col=round(n*rate);
msg=randsrc(row,col,[0 1;0.5 0.5]); %以指定概率生成伪随机数
ste_cover(1:row,1:col)=bitset(ste_cover(1:row,1:col),1,msg); %将ste_cover的每一位第一位(从右开始数,即最低位)设为消息
ste_cover=uint8(ste_cover);
imwrite(ste_cover,'ste_cover.bmp');
网友评论