实验报告模板szm.docx
《实验报告模板szm.docx》由会员分享,可在线阅读,更多相关《实验报告模板szm.docx(17页珍藏版)》请在冰豆网上搜索。
实验报告模板szm
实验一:
RGB图像分层及分层加强
一:
实验目的:
(1)了解图像的基本的类型和表示方式。
(2)了解索引图像中图像矩阵与调色板的关系。
(3)掌握RGB图像分层结构及分层加强的方法。
二:
实验内容:
(1)熟悉并尝试使用Matlab的命令方式和程序方式处理数组及图像。
(2)用Matlab对RGB图像分层,并将图像的指定层加强。
三:
实验过程:
1.3.1索引图像的操作:
>>[data,map]=imread('c:
\lenna256.jpg','jpg');%从C盘中读取jpg图像
>>image(data),colormap(map);%将读取的索引图像显示出来。
图1.1索引图像
1.3.2RGB颜色色谱的分层显示:
>>RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]);
>>R=RGB(:
:
1);
>>G=RGB(:
:
2);
>>B=RGB(:
:
3);
>>subplot(141),imshow(R),title('红色分量');
>>subplot(142),imshow(G),title('绿色分量');
>>subplot(143),imshow(B),title('蓝色分量');
图1.2RGB颜色色谱的分层显示
1.3.3RGB图像分层显示和指定层的加强:
打开Matlab实验环境,在File选项中新建M-Flie。
并在M-file中写入操作代码:
%将输入的RGB图像分层,并将图像的指定层加强
%输入格式举例:
【imageRGB,imageR,imageG,imageB,result】=rgbanalysis('c:
\lenna256.jpg','jpg',1)
function[imageRGB,imageR,imageG,imageB,result]=rgbanalysis(image,permission,level);
imageRGB=imread(image,permission);
imageRGB=double(imageRGB)/255;
result=imageRGB;
%对图像进行分层提取
imageR=imageRGB(:
:
1);
imageG=imageRGB(:
:
2);
imageB=imageRGB(:
:
3);
%显示结果
subplot(321),imshow(imageRGB),title('原始图像');
subplot(322),imshow(imageR),title('R层灰度图像');
subplot(323),imshow(imageG),title('G层灰度图像');
subplot(324),imshow(imageB),title('B层灰度图像');
%对相应的层进行颜色加强
iflevel==1
imageR=imageR+0.2;
end
iflevel==2
imageG=imageG+0.2;
end
iflevel==3
imageB=imageB+0.2;
end
result(:
:
1)=imageR;
result(:
:
2)=imageG;
result(:
:
3)=imageB;
imwrite(result,'temp.jpg','jpg');
result=imread('temp.jpg','jpg');
subplot(325),imshow(result),title('色彩增强的结果');
在Matlab命令行中输入如下指令:
>>[imageRGB,imageR,imageG,imageB,result]=rgbanalysis('c:
\lenna256.jpg','jpg',1);
可得到实验结果图:
图1.3RGB分层显示和加强图像
四:
试验总结:
本实验是对RGB图像的分层及强化处理,而MATLAB在处理图像的时候是要将图像化为矩阵来处理,所以,在对图像处理前需要将图像转化为RGB图像矩阵,并分层提取,之后才能进行加强操作。
在分层加强层时,R、G、B分别是1、2.、3对应该层。
本次实验加深了我们对课本内容的理解,同时加强了我们的学习兴趣,动手对图像进行操作更是从另一方面让我们学习MATLAB知识。
实验二:
LSB信息隐藏和提取
一:
实验目的:
(1)深入理解信息隐藏的相关内容,能进行简单的信息隐写和数字水印操作。
(2)掌握顺序选择像素点及随机选择像素点,将消息嵌入LSB并提取消息。
(3)掌握相关工具的使用。
二:
实验内容:
(1)顺序选择像素点将消息嵌入LSB并提取消息。
(2)随机选择像素点将消息嵌入LSB并提取消息。
(3)分析LSB算法的抗攻击能力。
三:
实验详细过程:
2.3.1:
顺序选择像素点将消息嵌入LSB并提取消息。
新建M-file编写顺序隐藏代码:
%函数功能:
本函数将完成在LSB上的顺序信息隐秘
function[ste_cover,len_total]=lsbhide(input,file,output)
%读入图像矩阵
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);
iflen_total>m*n
error('嵌入消息量过大,请更换图像');
end
%p作为消息嵌入位数计数器
p=1;
forf2=1:
n
forf1=1:
m
ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p,1);
ifp==len_total
break;
end
p=p+1;
end
ifp==len_total
break;
end
end
ste_cover=uint8(ste_cover);
imwrite(ste_cover,output);
%显示实验结果
subplot(1,2,1);imshow(cover);title('原始图像');
subplot(1,2,2);imshow(output);title('隐藏信息的图像');
保存后在命令行执行:
>>[ste_cover,len_total]=lsbhide('lenna512.bmp','1.txt','d.bmp');
得到如下对比图像:
图2.1LSB空域信息隐藏后图像与原始图像对比
2.3.2:
随机选择像素点将消息嵌入LSB并提取消息:
新建M-file文件写入代码:
%函数功能:
本函数将完成随机选择LSB的信息隐秘
function[ste_cover,len_total]=randlsbhide(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);
iflen_total>m*n
error('嵌入消息量过大,请更换图像');
end
%p作为消息嵌入位数计数器
p=1;
%调用随机间隔函数选取像素点
[row,col]=randinterval(ste_cover,len_total,key);
%在LSB隐秘消息
fori=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);
ifp==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('隐藏信息的图像');
在命令行输入如下指令:
>>[ste_cover,len_total]=randlsbhide('lenna512.bmp','1.txt','hided.bmp',213)
得到随机隐藏信息的图像:
图3.2随机选择像素点将消息嵌入LSB并提取消息
2.3.3:
隐藏信息的提取:
前面通过实验已经将秘密信息隐藏在图像中,下面通过实验将隐藏的秘密信息提取出来:
新建M-file文件:
%函数功能:
本函数将完成提取隐秘于LSB上的秘密消息
functionresult=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;
forf2=1:
n
forf1=1:
m
ifbitand(ste_cover(f1,f2),1)==1
fwrite(frr,1,'bit1');
result(p,1)=1;
else
fwrite(frr,0,'bit1');
result(p,1)=0;
end
ifp==len_total
break;
end
p=p+1;
end
ifp==len_total
break;
end
end
fclose(frr);
在命令行执行如下代码:
result=lsbget('d.bmp',1736,'secret.txt');
可得到隐藏信息文件secret.txt,打开原文件对比:
图3.3隐藏信息与提取信息对比
在新建随机信息提取文件M-file:
%函数功能:
本函数将完成提取隐秘于LSB上的秘密消息
functionresult=randlsbget(output,len_total,goalfile,key)
ste_cover=imread(output);
ste_cover=double(ste_cover);
%判断嵌入消息量是否过大
[m,n]=size(ste_cover);
frr=fopen(goalfile,'a');
%p作为消息嵌入位数计数器,将消息序列写回文本文件
p=1;
%调用随机间隔函数选取像素点
[row,col]=randinterval(ste_cover,len_total,key);
fori=1:
len_total
ifbitand(ste_cover(row(i),col(i)),1)==1
fwrite(frr,1,'bit1');
result(p,1)=1;
else
fwrite(frr,0,'bit1');
result(p,1)=0;
end
ifp==len_total
break;
end
p=p+1;
end
fclose(frr);
在命令行执行如下代码:
result=randlsbget('hided.jpg',424,'secret2.txt',1988)
即可得到隐藏的信息共424,(原始隐藏文件是53个字符,对应与2进制正好424)
四:
实验总结:
通过本次实验使我们对图像处理和信息隐藏有了更深的了解。
图像在存储的时候是2进制代码形式,所以在本次实验中对信息的隐藏是通过将信息转化为2进制代码,替换到图像的最低有效位中去。
另外,本实验对图像和信息数据量都是有要求的,为了能将图像简单处理,实验中用的几乎都是一些特殊大小的图像,隐藏的信息也是有大小限制的,为了能将信息全隐藏进图像,实验用的信息只有424Byte。
综合评分:
实验三:
W-SVD数字水印实验
【实验目的】:
(1)了解图像小波变换。
(2)掌握W-SVD数字水印生成、嵌入、检测的方法。
(3)了解数字水印基本模型。
(4)学会stirmark攻击W-SVD的方法。
【实验内容】:
(请将你实验完成的项目涂“■”)
实验完成形式:
■用MATLAB函数实现W-SVD的三大策略
□用MATLAB命令行方式实现实现W-SVD的三大策略
□其它:
(请注明)
实验效果和分析所使用的手段:
□结合水印性能分析使用StirMark对水印进行了攻击
■结合水印性能分析编写程序绘制了“攻击-健壮性曲线”
■结合水印性能分析编写程序绘制了“强度-不可见性曲线”
■对W-SVD进行了合谋攻击并给出分析
□其它:
(请注明)
【实验工具及平台】:
■Windows+Matlab□其它:
(请注明)
【实验分析】:
1、请尽量使用曲线图、表等反映你的实验数据及性能
2、对照实验数据从理论上解释原因
3、如无明显必要,请不要大量粘贴实验效果图
4、说明你在以下栏目中分析所使用的方法,给出实验数据,最后总结结论
1、水印强度参数α对水印鲁棒性的影响:
(如果完成了本部分实验请写明你的方法、实验数据及结论)
方法是将a分别取0.01,0.05,0.1,0.5得到四张不同的嵌入水印图像(保持其他参数不变),再对这些图像做jpeg压缩,计算出相应的相关值,用matlab编程实现,得到下面四。
上面四张图分别是a=0.01,a=0.05,a=0.1,a=0.5,由上面四张图可以看出,水印强度系数a越大,水印鲁棒性越好。
实验时d/n=0.99。
所以检测的阙值取0.1,随着a的增大,误检率降低。
2、水印强度参数α对水印不可见性的影响:
(如果完成了本部分实验请写明你的方法、实验数据及结论)
用均方差来衡量a对水印不可见的影响。
用matlab编写plotmse()函数绘图如下:
3、水印容量参数d/n对水印鲁棒性的影响:
(如果完成了本部分实验请写明你的方法、实验数据及结论)
方法是将d/n分别取0.01,0.1,0.3,0.99得到四张不同的嵌入水印图像,再对这些图像做jpg压缩,计算出相应的相关值,画出jpeg攻击-健壮性曲线和种子相关曲线。
当d/n=0.6时。
要正确测出水印,把检测阙值定为0.8,在它的jpeg攻击-健壮性曲线上可以看出相关性值高于0.8的区域很少,它抗jpeg攻击的能力就很小。
当d/n=0.99时,要正确检测出水印,就要把检测阙值定为0.1,在它的jpeg攻击-健壮性曲线上可以看出相关性值高于0.1的区域比较大,它抗jpeg攻击的能力就越强,
所以,d/n越接近于1,水印的鲁棒性就越强。
4、水印容量参数d/n对水印不可见性的影响
(如果完成了本部分实验请写明你的方法、实验数据及结论)
用均方差来衡量d/n对水印不可见性的影响
由上图可见,d/n的值对于水印的不可见性影响不大。
d/n由0变化到1,MSE的值总在16.35到16.5之间。
5、水印其它参数(小波尺度、小波基等)对水印性能的影响
(如果完成了本部分实验请写明你的方法、实验数据及结论)
1.小波尺度对水印不可见性的影响:
小波尺度对水印不可见性的影响:
小波尺度从1到6,计算出的MSE分别是输入数据的MSE:
16.3541,16.375,16.586,16.789,16.6537,16.6481,说明它对水印不可见性的影响不大。
2.小波尺度对水印鲁棒性的影响
由图可见,小波尺度为5和2的检测阈值都可以设为0.1。
但是小波尺度越大,检测就越困难。
由攻击曲线可以看出小波尺度大的鲁棒性好一些,因为水印嵌入的是图象能量更高的地方,所以它的鲁棒性好一些,但是它嵌入的信息就少要一些,这就加大了检测的难度。
【实验结论】:
1、请绘制W-SVD水印对应的理论模型图(参照《实验教程》P213-215面)
2、结论:
由w-svd水印的原理和上述实验数据可知,d/n是指随机模版占水印的比例,比例越大,水印具有的随机性就越好,拥有的信息量也越多,因此检测起来也就更方便。
水印强度参数a越大,水印数据就越大,那么水印的鲁棒性就越好,但是不可见性就越差。
小波尺度越大,水印嵌入的是图象能量越高的地方,所以它的鲁棒性好一些,但是它嵌入的信息就少要一些,这就加大了检测的难度。