实验12-信息隐藏技术综合复习

一、编写代码exer01.m, 实现功能:读取“baidu.bmp”,分别将其每个像素的最高2位清0、最低2位清0,保存为baidu01.bmp,baidu02.bmp,显示该图像(标题为你的学号) 

A=imread('baidu.bmp');
[h,w]=size(A);
for i=1:h
     for j=1:w
   B(i,j)=bitand(A(i,j), 63);
end
end
imwrite(B,'baidu01.bmp');
imshow(B,[]);
title('0120221751');

A=imread('baidu.bmp');
[h,w]=size(A);
for i=1:h
     for j=1:w
   B(i,j)=bitand(A(i,j), 252);
end
end
imwrite(B,'baidu02.bmp');
imshow(B,[]);
title('0120221751');

二、编写代码exer02.m, 实现功能:读取“pepper.bmp”, 将其R、G、B颜色分量的最低2位清0,再组合成新彩色图像,保存为“pepper01.bmp”,显示该图像(标题为你的学号)  

clc;
A=imread('pepper.bmp');
Ar=A(:,:,1);
Ag=A(:,:,2);
Ab=A(:,:,3);
[h,w]=size(Ar);
for i=1:h
     for j=1:w
   Ar(i,j)=bitand(Ar(i,j),252);
   Ag(i,j)=bitand(Ag(i,j),252);
  Ab(i,j)=bitand(Ab(i,j),252);
end
end
B(:,:,1)=Ar;
B(:,:,2)=Ag;
B(:,:,3)=Ab;
imwrite(B,'pepper01.bmp');
imshow(B,[]);
title('0120221751');

三、4bit替换法

1、编写代码exer03_1.m,实现功能:采用4bit替换法“huawei.bmp”隐藏到“kgy.bmp”中(R、G、B层中任选一个),隐藏后的图像保存为“ kgy01.bmp”,显示该图像(标题为你的学号)。

cover = imread('kgy.bmp') ; 
cover1= cover(:,:,1);
 [row, col] = size(cover1) ; 
msg = imread('huawei.bmp');
%msg=(rgb2gray(RGB));
%修改图片大小
%msg=imresize(msg,[row,col]);
% 置载体图像 R 层的低 4bit 为 0
 for i = 1:row
 for j = 1:col 
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
cover1( i, j) = bitor( cover1( i, j) , shiftmsg4( i, j) ) ;
 end 
end 
% 写回并保存 
cover(:,:, 1) = cover1; 
imwrite( cover, 'kgy01.bmp') ;
imshow(cover,[]);
title("0120221751");

2、编写exer03_2.m,读取“kgy01.bmp”,提取其中隐藏图像,保存为“mark.bmp”,显示该图像(标题为你的学号)。

%以下为提取代码,可单独分离为一个脚本
data = imread('kgy01.bmp') ;
  
A = data(:,:,1) ;
[ row, col] = size( A) ;
for i = 1:row 
for j = 1:col 
A( i, j) = bitand( A( i, j) , 15) ; 
end
 end
A = bitshift( A, 4) ; 
% 显示结果
subplot( 221) , imshow( 'kgy.bmp') ; title( '载体图像');
 subplot( 222) , imshow( msg) ; title( '秘密图像'); 
  
subplot( 223) , imshow( data) ; title( '载密图像0120221774'); 
imwrite(A,'mark.bmp');
subplot( 224) , imshow( A) ; title( '提取的密秘图像0120221774');

四、LSB顺序隐藏技术

1、编写代码exer04_1.m,实现功能:采用LSB顺序隐藏技术,将一段文本信息(hidden.txt)隐藏到“kgy.jpg”中(先把kgy.bmp灰度化保存而来)。隐藏后的图像保存为“kgy04.jpg”,显示该图像(标题为你的学号)。

cover = imread('kgy.bmp') ; 
cover1=rgb2gray(cover);
imwrite(cover1,'kgy.jpg');
cover2=imread('kgy.jpg');
ste_cover = cover2; 
ste_cover=double(ste_cover); 


f_id = fopen('hidden.txt', 'r') ; 
[ msg, len_total] = fread( f_id, 'ubit1');
[ m, n] = size( ste_cover) ; 
if len_total > m*n
error( '嵌入的信息量太大') ;
 end

p = 1; 
for f2 = 1:n
 for f1 = 1:m
%ste_cover( f1, f2) = ste_cover( f1, f2) -mod( ste_cover( f1, f2) , 2) + msg( p, 1) ; 
ste_cover( f1, f2) = bitand(ste_cover( f1, f2), 254) ;
 ste_cover( f1, f2) = ste_cover( f1, f2) + msg( p, 1) ;
if p == len_total
 break; 
end 
p = p + 1; 
end 

end
 ste_cover = uint8( ste_cover) ; %生成隐密后的图像;
 imwrite( ste_cover, 'kgy04.bmp') ; %显示隐藏结果; 
subplot( 1, 2, 1) ; imshow( cover2) ; title( '原始图像0120221774') ;
subplot( 1, 2, 2) ; imshow('kgy04.bmp');title('隐藏信息后的图像');

2、编写代码exer04_2.m,将上述隐藏的信息提取到“hidden04.txt”中。

%文件名:lsbget.m
%程序员:李巍
%编写时间:2004.2.29
%函数功能:本函数将完成提取隐秘于LSB上的秘密消息
%输入格式举例:
result=lsbget('kgy04.bmp',156,'hidden04.txt');
%参数说明:
%output是信息隐秘后的图像
%len_total是秘密消息的长度
%goalfile是提取出的秘密消息文件
%result是提取的消息 
function result=lsbget(output,len_total,goalfile)
ste_cover=imread(output);
ste_cover=double(ste_cover);
%判断嵌入消息量是否过大
[m,n]=size(ste_cover);
frr=fopen(goalfile,'a');
%p作为消息嵌入位数计数器,将消息序列写回文本文件
p=1;
for f2=1:n
    for f1=1:m
         if bitand(ste_cover(f1,f2),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
    if p==len_total
        break;
    end
end
fclose(frr);
end

五、基于调色板的信息隐藏

1、编写代码exer05_1.m,实现功能:先把“baboon.bmp”中转换为带有128种颜色调色板的索引图像,保存为“baboonindex.bmp”。再采用调色板信息隐藏技术,将一段文本信息(hidden.txt)隐藏到“baboonindex.bmp”中。隐藏后的图像保存为“baboonindex05.bmp”,显示该图像(标题为你的学号)。

clc;
clear;
%读取载体图像
A=imread('baboon.bmp');
[ind,map1]=rgb2ind(A,128);
imwrite(ind,map1,'baboonindex.bmp');
[x,map]=imread('baboonindex.bmp','bmp');
wx=x;
[row,col]=size(wx);
wmap=map;
msgfid=fopen('hidden.txt','r');
[msg,count]=fread(msgfid,'ubit1');
fclose(msgfid);
%count=count*8;
%msg = str2bit(msg);
%msg=msg';
oplength=0;
for i=1:256
if map(i,1)~=0||map(i,2)~=0||map(i,3)~=0 
    %检查原调色板中颜色分量值不全为0的数量
oplength=oplength+1;
end
end
%复制调色板
for i=oplength+1:oplength*2
wmap(i,1)=map(i-oplength,1);
wmap(i,2)=map(i-oplength,2);
wmap(i,3)=map(i-oplength,3)+0.0001;

end

for i=1:count

if msg(i,1)==1
wx(i)=x(i)+oplength;
end
end
%imwrite(wx,wmap,'lenaindex1.bmp','bmp');
imwrite(wx,wmap,'baboonindex05.bmp','bmp');
figure;
imshow('baboonindex05.bmp');title('0120221751');

2、编写代码exer05_2.m,将上述隐藏的信息提取到“hidden05.txt”中。


clc;
clear;
%读取隐密图像
[x,map] = imread('baboonindex05.bmp','bmp');

count=150;
fid=fopen('hidden05.txt', 'w');

oplength=128;
 
 for i=1:count
     if x(i)>oplength
        
          fwrite(fid,1,'ubit1');
     else
      
          fwrite(fid,0,'ubit1');
     end     
 end
  
fclose(fid);    

六、完成小测试2的信息提取。

 %第一个图片
 
ste_cover=imread('test1.bmp');
ste_cover1=ste_cover(:,:,3);
ste_cover1=double(ste_cover1);
%判断嵌入消息量是否过大
[m,n]=size(ste_cover1);
frr=fopen('sec04.txt','w');
%p作为消息嵌入位数计数器,将消息序列写回文本文件
len_total=288;
p=1;
for f2=1:n
    for f1=1:m
         if bitand(ste_cover1(f1,f2),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
     if p==len_total
        break;
    end
end
fclose(frr);


 %第二张图片
 
ste_cover=imread('test1.bmp');
ste_cover1=ste_cover(:,:,2);
ste_cover1=double(ste_cover1);
%判断嵌入消息量是否过大
[m,n]=size(ste_cover1);
frr=fopen('sec04.txt','w');
%p作为消息嵌入位数计数器,将消息序列写回文本文件
len_total=368;
p=1;
for f2=1:n
    for f1=1:m
         if bitand(ste_cover1(f1,f2),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
     if p==len_total
        break;
    end
end
fclose(frr);


下面三题见第九章综合复习

七、继续复习基于DCT的顺序隐藏技术(一段文本内容的嵌入)((综合复习9的第7题)

***八、继续复习基于DCT的图像水印嵌入(综合复习9的第10题)

***九、继续复习基于LSB的顺序隐藏技术(图像至图像的嵌入,二值化水印图像)(综合复习9的第9题)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值