实验4-------------

一、 低4位替换隐写技术(隐藏载体是RGB图像)

1、在word文档中写下你的学号及姓名全拼,截图保存为1.bmp.

0120221751luruohan

2、在matlab中读取1.bmp并修改为512X512大小,保存为11.bmp.

I=imread('C:\Users\S3214\Desktop\1.bmp'); 
n = imresize(I,[512,512]);
imwrite(n,'C:\Users\S3214\Desktop\11.bmp')
imfinfo('C:\Users\S3214\Desktop\11.bmp')

3、参考所附的隐藏算法,将11.bmp隐藏到airplane.bmp中,隐藏后的图像保存为airplane11.bmp.

4、参考所附的复原部分代码,编写脚本,读取airplane11.bmp,将其隐藏的图像提取并显示出来。

彩色图片低4位替换 

%文件名:imagehide.m

%函数功能:直接将秘密图像的高4bit隐藏在RGB载体图像的R、G、B层中所选的那一层的低4bit,并将秘密图像提取出来,最后显示。要求载体图像的大小大于等于秘密图像的大小。且秘密图像是二值或灰度图像。
%输入格式:
data=imagehide('D:\1751\picture\airplane.bmp','C:\Users\S3214\Desktop\11.bmp','D:\1751\picture\airplane11.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('提取的秘密图像');
end

思考:考虑通过低3位替换方法将待隐藏图像的高3位隐藏到载体图像中去(加分题)。 编写脚本并演示你的算法。

二、参照上题做法,将11.bmp隐藏到lena1.bmp中,隐藏后的图像保存为lena11.bmp.(此图为灰度图)再用复原脚本提出隐藏的图像并显示出来。

先将lena1转换成rgb的格式

I=imread('D:\1751\picture\lena1.bmp')
[X,map]=gray2ind(I,8);
imshow(X,map);
imwrite(X,map,'D:\1751\picture\lena2.bmp','bmp');
[X,map]=imread('D:\1751\picture\lena2.bmp');
RGB=ind2rgb(X,map);                    
set(0,'defaultFigurePosition',[100,100,1000,500]);  
set(0,'defaultFigureColor', [1 1 1]);               
figure, imshow(X,map);     
figure,imshow(RGB);
imwrite(RGB,'D:\1751\picture\lena3.bmp','bmp');
imfinfo('D:\1751\picture\lena3.bmp')

三、猫脸置乱算法

参考所给的代码,编写脚本mycatface1.m,实现图像置乱

1、读入一幅图像(灰度图像或索引图像,如果是彩色图,则进行适当转换)并置乱,置乱后的图像保存为after.bmp。

img=imread('D:\1751\picture\lena1.bmp');    %修改文件路径
imshow(img,[])
[h,w]=size(img);

%  读取图片,相对路径,图像必须是正方形,否则不具备Arnold变换的条件 
n=10;%
a=3;b=5;
N=h;%N%N代表图像宽高,宽高要一样

%置乱与复原的共同参数,就相当于密码,有了这几个参数,图片就可以复原
imgn=zeros(h,w);
for i=1:n
    for y=1:h
        for x=1:w           
            xx=mod((x-1)+b*(y-1),N)+1;   %mod(a,b)就是a除以b的余数?
            yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1;        
            imgn(yy,xx)=img(y,x);                
        end
    end
    img=imgn;
end
imwrite(imgn,'D:\1751\picture\after.bmp');    %修改文件路径
figure;
imshow(imgn,[]) %%置乱后的图片

2、编写置乱复原脚本:mycatface2.m,读取after.bmp,提取其中隐藏的图像并显示出来。

img=imread('D:\1751\picture\lena1.bmp');
imshow(img,[])
[h,w]=size(img);

%  读取图片,相对路径,图像必须是正方形,否则不具备Arnold变换的条件 
n=10;%
a=3;b=5;
N=h;%N%N代表图像宽高,宽高要一样

%置乱与复原的共同参数,就相当于密码,有了这几个参数,图片就可以复原
imgn=zeros(h,w);
for i=1:n
    for y=1:h
        for x=1:w           
            xx=mod((x-1)+b*(y-1),N)+1;   %mod(a,b)就是a除以b的余数?
            yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1;        
            imgn(yy,xx)=img(y,x);                
        end
    end
    img=imgn;
end
figure;
imshow(imgn,[])%%置乱后的图片

%澶嶅師
img=imgn;
for i=1:n
    for y=1:h
        for x=1:w            
            xx=mod((a*b+1)*(x-1)-b*(y-1),N)+1;
            yy=mod(-a*(x-1)+(y-1),N)+1  ;        
            imgn(yy,xx)=img(y,x);                   
        end
    end
    img=imgn;
end
figure
imshow(imgn,[])%复原图
 

*** 四、在360平台上,自行选做一个信息隐藏实验题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
广工EDA实验4-8是一个电子设计自动化实验,旨在帮助学生掌握EDA工具的使用和电路设计的基本原理。 在这个实验,我们将学习如何使用广工EDA软件来设计和验证数字电路。首先,我们需要了解EDA工具的基本操作,包括创建新项目、导入模块和配置设计约束等。然后,我们将使用EDA工具来设计一个特定的数字电路,例如门电路、时序电路或状态机。通过EDA工具的模拟功能,我们可以模拟电路的行为并进行性能分析,以确保电路的准确性和可靠性。 在实验过程,我们会遇到各种问题和挑战,例如设计约束的选择、电路逻辑的优化和时序问题的解决等。通过解决这些问题,我们可以提高自己的设计能力和逻辑思维能力。 此外,在实验我们还将学习如何使用EDA工具的布局和布线功能。通过布局和布线,我们可以将电路设计转化为物理实现,确定电路组件的位置和互联关系,以优化电路性能和减少功耗。 最后,在实验的结尾,我们需要对我们的设计结果进行验证和分析。通过EDA工具的验证功能,我们可以检测电路设计的错误和矛盾,确保我们的电路设计与预期一致。 总之,广工EDA实验4-8是一个有助于学生掌握EDA工具和电路设计原理的实验。通过实验,我们可以提高自己的设计能力和逻辑思维能力,并在完成实验后获得对数字电路设计的更深入的理解和应用能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值