ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:86.47KB ,
资源ID:8917430      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8917430.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(密码学实验第八组实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

密码学实验第八组实验报告.docx

1、密码学实验第八组实验报告云南大学数学与与统计学院上机实践报告课程名称:密码学实验学期:2013-2014学年第一学期成绩:指导教师: 陆正福学生姓名:卢富毓 学生学号:20101910072实验名称:数字水印实验要求:必做实验学时:4学时实验编号: No.8实验日期:2013/12/15完成日期:2012/12/30学院:数学与统计学院专业 : 信息与计算科学年级: 2010级 一、实验目的熟悉并掌握数字水印的内容。二、实验内容 用Matlab实现图像数字水印的离散余弦变换嵌入和提取。三、实验环境Win 7, Matlab, Java&Eclipse四、实验过程(请学生认真填写):1. 预备知

2、识:二维DCT变换原理: MN矩阵的二维离散余弦变换定义为: 其中,f(m, n)是MN矩阵中坐标为(m, n)元素的原始值, F(u, v)是经离散余弦 变换后对应值。 对应的DCT逆变换定义为: 其中: 2. 实验过程A、 原理分析: 水印嵌入思路:(1)选用灰色图像lena.jpg作为宿主图像,选用二值图像c.jpg作为水印图像。(2)提取原始图像lena的像素矩阵A和嵌入图像c的像素矩阵B;(3)对像素矩阵A进行8*8分块,然后进行(快速)DCT变换;(4)在进行DCT像素矩阵中的特定位置嵌入水印信息(如果B中对应位置是1则加一个系数d,否则减d)。水印提取思路:(1)获得原始图像的像

3、素矩阵A和水印的嵌入图像的像素矩阵A*;(2)对A和A*进行8*8分块,并进行(快速)DCT变换。(3)比较进行DCT像素矩阵中嵌入水印的5个位置系数大小,如果A*对应位置上系数大则水印信息为1,相反为0。B、实验结果:可以看出,Matlab处理图像变换,造成图像的失真度很小,效果很好。这个实验最开始我想用Java实现的,但在实验过程中遇到很多问题,虽然最后从理论上弄懂了,但是实现起来并不容易,最后完成了代码,却没有得到好的结果。五、实验总结1遇到的问题、分析并的出方案(列出遇到的问题和解决办法):遇到问题: 如何Java中将图像信息提取成为矩阵块,以及如何将像素矩阵还原成图像分析并解决:只是

4、由于过于急于编写程序,对文献1中的细节部分没有仔细研究,只是对离散余弦变换这块阅读了一下,在编写代码过程中遇到一些Java调用包之类的问题,都查看文档跟参考文献尝试解决。 2体会和收获。 由于准备考研的事情导致了这学期编写的实验质量不是很高。由于对数字水印处理这方面没有花太多时间深究,阅读文献也并不全面,导致最后的实现有问题,没有得到较好的结果,但在这个过程中,通过阅读文献还是学到很多东西,比如学长讲的是灰色图像如何嵌入水印和提取水印,在学习过程中,我还了解到如何在彩色图像中进行水印的嵌入和提取。六、参考文献应用密码学 林岱岳密码学概论wade trapeJAVA实现图像处理七、教师评语:八、

5、代码/Matlab代码clc;clear;M=256; N=32; d=5; NewPrint=zeros(N,N,uint8);InsertImage = zeros(M,M,uint8);D=zeros(M,M); I=imread(d.jpg);subplot(2,2,1);imshow(I);title(); Origin=imread(c.jpg);subplot(2,2,3);imshow(Origin);title(); % for i=1:N for j=1:N II=zeros(8,8);% for k=1:8 for l=1:8 II(k,l)=I(8*(i-1)+k,8*

6、(j-1)+l); end end Idct=dct2(II);%Dct if (Origin(i,j)=0) Idct(4,4)= Idct(4,4)-d; Idct(4,5)= Idct(4,5)-d; Idct(4,6)= Idct(4,6)-d; Idct(5,4)= Idct(5,4)-d; Idct(5,5)= Idct(5,5)-d; Idct(5,6)= Idct(5,6)-d; else Idct(4,4)= Idct(4,4)+d; Idct(4,5)= Idct(4,5)+d; Idct(4,6)= Idct(4,6)+d; Idct(5,4)= Idct(5,4)+d;

7、 Idct(5,5)= Idct(5,5)+d; Idct(5,6)= Idct(5,6)+d; end Bidct=idct2(Idct);%Idct for k=1:8 for l=1:8 InsertImage(8*(i-1)+k,8*(j-1)+l)= Bidct(k,l); end end endendfor i=1:256 for j=1:256 InsertImage(i,j)=round(InsertImage(i,j); endendsubplot(2,2,2);imshow(InsertImage);title(); %imwrite(InsertImage,e.jpg,q

8、uality,100);IV=imread(e.jpg);for i=1:N for j=1:N a=0; b=0; II=zeros(8,8); IX=zeros(8,8); for k=1:8 for l=1:8 II(k,l)=I(8*(i-1)+k,8*(j-1)+l); IX(k,l)=IV(8*(i-1)+k,8*(j-1)+l); end end Idct=dct2(II); Idct2=dct2(IX); if (Idct(4,4)Idct2(4,4) a=a+1; else b=b+1; end if (Idct(4,5)Idct2(4,5) a=a+1; else b=b+

9、1; end if (Idct(5,4)Idct2(5,4) a=a+1; else b=b+1; end if (Idct(5,5)Idct2(5,5) a=a+1; else b=b+1; end if (ab) NewPrint(i,j)=0; else NewPrint(i,j)=255; end endendimwrite(NewPrint,f.jpg,quality,100);subplot(2,2,4);imshow(NewPrint);title();/Java 代码/嵌入水印package FDCT;import java.awt.image.BufferedImage;im

10、port java.awt.image.WritableRaster;/FDCT水印嵌入public class m3_2a private static final int d = 5; public static void main(String args) m3_2a embed = new m3_2a(); embed.start(); public void start() BufferedImage oImage = ImageAssistance.getImage(Picturea.jpg, jpeg); BufferedImage wImage = ImageAssistanc

11、e.getImage(Picturezhong.jpg, jpeg); int type = oImage.getType(); WritableRaster oRaster = oImage.getRaster(); WritableRaster wRaster = wImage.getRaster(); int oWidth = oRaster.getWidth(); int oHeight = oRaster.getHeight(); int wWidth = wRaster.getWidth(); int wHeight = wRaster.getHeight(); int oPixe

12、ls = new int3 * oWidth * oHeight; int wPixels = new int3*wWidth * wHeight; oRaster.getPixels(0, 0, oWidth, oHeight, oPixels); wRaster.getPixels(0, 0, wWidth, wHeight, wPixels); int RGBPixels = ImageAssistance.getRGBArrayToMatrix(oPixels, oWidth, oHeight); / 得到RGB图像的三层矩阵表示 double rPixels = MathTool.i

13、ntToDouble(RGBPixels1); int wDMatrix = MathTool.arrayToMatrix(wPixels, wWidth, wHeight); double result = rPixels; / 嵌入算法 for (int i = 0; i wWidth; i+) for (int j = 0; j wHeight; j+) double blk = new double88; / 对原始图像8 * 8 分块 for (int m = 0; m 8; m+) for (int n = 0; n 8; n+) blkmn = rPixels8 * i + m8

14、 * j + n; double dBlk = FDct.fDctTransform(blk); if (wDMatrixij = 0) dBlk33 = dBlk33 - d; dBlk34 = dBlk34 - d; dBlk35 = dBlk35 - d; dBlk43 = dBlk43 - d; dBlk53 = dBlk53 - d; else dBlk33 = dBlk33 + d; dBlk34 = dBlk34 + d; dBlk35 = dBlk35 + d; dBlk43 = dBlk43 + d; dBlk53 = dBlk53 + d; blk = IFDct.iFDc

15、tTransform(dBlk); /8 block 恢复 for (int m = 0; m 8; m+) for (int n = 0; n 8; n+) result8 * i + m8 * j + n = blkmn; double temp = new double3oWidthoHeight; temp0 = MathTool.intToDouble(RGBPixels0); temp2 = MathTool.intToDouble(RGBPixels2); temp1 = result; double rgbResult = ImageAssistance.getRGBMatri

16、xToArray(temp); / 把嵌入水印的结果写到BufferedImage对象 BufferedImage outImage = new BufferedImage(oWidth, oHeight, type); WritableRaster outRaster = outImage.getRaster(); / 将像素写入到Raster outRaster.setPixels(0, 0, oWidth, oHeight, rgbResult); / 将BufferedImage对象写入磁盘 ImageAssistance.setImage(outImage, Picturer.jpg

17、, jpg); / end/提取水印package FDCT;/ 程序名 : m3_2b.java/ 目的 : 用于FDCT水印提取实验 / 编写时间: 2008年10月13日import java.awt.image.*;public class Distill public static void main(String args) Distill distill = new Distill(); distill.start(32, 32); public void start(int wWidth, int wHeight) String fnm = Picturer.jpg; Stri

18、ng fnm1 = Pictured.jpg; / mImage是嵌入水印后的图像 BufferedImage mImage = ImageAssistance.getImage(fnm, jpeg); / 原始图像 BufferedImage oImage = ImageAssistance.getImage(fnm1, jpeg); WritableRaster oRaster = oImage.getRaster(); WritableRaster mRaster = mImage.getRaster(); int oWidth = oRaster.getWidth(); int oHe

19、ight = oRaster.getHeight(); int oPixels = new int3 * oWidth * oHeight; int mPixels = new int3 * oWidth * oHeight; oRaster.getPixels(0, 0, oWidth, oHeight, oPixels); mRaster.getPixels(0, 0, oWidth, oHeight, mPixels); / 得rgb图像三层矩阵,mRgbPixels0表示b层分量 int mRgbPixels = ImageAssistance.getRGBArrayToMatrix(

20、mPixels, oWidth, oHeight); int oRgbPixels = ImageAssistance.getRGBArrayToMatrix(oPixels, oWidth, oHeight); double oDPixels = MathTool.intToDouble(mRgbPixels2); double mDPixels = MathTool.intToDouble(oRgbPixels2); double result = new doublewWidthwHeight; for (int i = 0; i wWidth; i+) for (int j = 0;

21、j wHeight; j+) resultij = 0; /提取水印算法 for (int i = 0; i wWidth; i+) for (int j = 0; j wHeight; j+) double oBlk = new double88; double mBlk = new double88; int d = 0; int f = 0; for (int m = 0; m 8; m+) for (int n = 0; n 8; n+) oBlkmn = oDPixels8 * i + m8 * j + n; mBlkmn = mDPixels8 * i + m8 * j + n;

22、double dOBlk = FDct.fDctTransform(oBlk); double dMBlk = FDct.fDctTransform(mBlk); if (dOBlk33 dMBlk33) d+; else f+; if (dOBlk34 dMBlk34) d+; else f+; if (dOBlk35 dMBlk35) d+; else f+; if (dOBlk43 dMBlk43) d+; else f+; if (dOBlk53 = f) resultij = 0; else resultij = 1; int outResult = MathTool.matrixT

23、oArray(result); / 把嵌入水印的结果写到BufferedImage对象 BufferedImage outImage = new BufferedImage(wWidth, wHeight, BufferedImage.TYPE_3BYTE_BGR); WritableRaster outRaster = outImage.getRaster(); outRaster.setPixels(0, 0, wWidth, wHeight, outResult); ImageAssistance.setImage(outImage, Picturemark.jpg, jpeg);/ 将BufferedImage对象写入磁盘 / end

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1