信息隐藏实验3  DCT域水印算法

实验目的

一、熟悉变换域隐秘技术

二、使用DCT变换在图片中嵌入和提取文本水印

实验要求

一、要求能够利用C/C++、Matlab等高级编程语言编写基本的算法程序,并通过调试、运行程序。

二、上交实验报告

实验内容

实验3.1:使用LSB上的顺序嵌入算法,将秘密消息文本隐藏于载体图像中。

(1)用imread()函数读取一个宿主图像

(2)对该图像进行DCT变换,形成64像素的小块

(3)将水印信号嵌入DCT系数的中频部位

(4)进行DCT逆变换,得到嵌入水印后的图像

载体图片:lenna.jpg

实验3.2:提取实验3.1生成的隐蔽图像中上的秘密消息文本。

参考程序1

%;文件名:hidedctadv.m

%函数功能:本函数用于DCT域的信息隐藏

%输入格式举例:[count,msg,data]=hidedctadv('lenna.jpg','1.jpg','1.txt',1982,1);

%参数说明:

%image为载体图象

%imagegoal为藏有秘密信息的载体,即隐秘载体

%msg为待隐藏的信息

%key为密钥,用来控制随机选块

%alpha为控制量,用来保证编码的正确性

%count为待隐藏信息的长度

%result为隐藏结果

function [count,msg,result]=hidedctadv(image,imagegoal,msg,key,alpha)

%按位读取秘密信息

frr=fopen(msg,'r');

[msg,count]=fread(frr,'ubit1');

fclose(frr);

data0=imread(image);

%将图象矩阵转为double型

data0=double(data0)/255;

%取图象的一层做隐藏

data=data0(:,:,1);

%对图象分块

T=dctmtx(8);

%对分块图象做DCT变换

DCTrgb=blkproc(data,[8 8],'P1*x*P2',T,T');

DCTrgb0=DCTrgb;

%产生随机的块选择,确定图像块的首地址

[row,col]=size(DCTrgb);

row=floor(row/8);

col=floor(col/8);

a=zeros([row col]);

[k1,k2]=randinterval(a,count,key);

for i=1:count

k1(1,i)=(k1(1,i)-1)*8+1;

k2(1,i)=(k2(1,i)-1)*8+1;

end

%信息嵌入

temp=0;

for i=1:count

if msg(i,1)==0

if DCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2)

temp=DCTrgb(k1(i)+4,k2(i)+1);

DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);

DCTrgb(k1(i)+3,k2(i)+2)=temp;

end

else

if DCTrgb(k1(i)+4,k2(i)+1)

temp=DCTrgb(k1(i)+4,k2(i)+1);

DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);

DCTrgb(k1(i)+3,k2(i)+2)=temp;

end

end

if DCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2)

DCTrgb(k1(i)+3,k2(i)+2)=DCTrgb(k1(i)+3,k2(i)+2)-alpha;%将原本小的系数调整得更小

else

DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+4,k2(i)+1)-alpha;

end

end

%信息写回保存

DCTrgb1=DCTrgb;

data=blkproc(DCTrgb,[8 8],'P1*x*P2',T',T);

result=data0;

result(:,:,1)=data;

imwrite(result,imagegoal);

参考程序2

%文件名:extractdctadv.m

%函数功能:本函数用于DCT隐藏信息的提取

%输入格式举例:tt=extractdctadv('lennahide.jpg','2.txt',1982,40)

%参数说明:

%image为已经藏有信息的图象

%permission为图象格式

%msg为提取信息存放的位置

%key为密钥,用来控制随机选块

%count为信息的比特数,由藏入方给出

function result=extractdctadv(image,msg,key,count)

data0=imread(image);

data0=double(data0)/255;

%用图象第一层做提取

data=data0(:,:,1);

%分块做DCT变换

T=dctmtx(8);

DCTcheck=blkproc(data,[8 8],'P1*x*P2',T,T');

%产生随机的块选择,确定图像块的首地址

[row,col]=size(DCTcheck);

row=floor(row/8);

col=floor(col/8);

a=zeros([row col]);

[k1,k2]=randinterval(a,count,key);

for i=1:count

k1(1,i)=(k1(1,i)-1)*8+1;

k2(1,i)=(k2(1,i)-1)*8+1;

end

%准备提取并回写信息

frr=fopen(msg,'a');

for i=1:count

if DCTcheck(k1(i)+4,k2(i)+1)<=DCTcheck(k1(i)+3,k2(i)+2)

fwrite(frr,0,'bit1');

result(i,1)=0;

else

fwrite(frr,1,'bit1');

result(i,1)=1;

end

end

fclose(frr);

参考程序3

%文件名:randinterval.m

%函数功能:本函数将利用随机序列进行间隔控制,选择消息隐藏位.

%输入格式举例:[row,col]=randinterval(test,60,1983)

%参数说明:

%matrix为载体矩阵

%count为要嵌入的信息的数量(要选择的像素数量)

%key为密钥

%row为伪随机输出的像素行标

%col为伪随机输出的像素列标

function [row,col]=randinterval(matrix,count,key)

%计算间隔的位数

[m,n]=size(matrix);

interval1=floor(m*n/count)+1;

interval2=interval1-2;

if interval2<=0

error( '载体太小不能将秘密信息隐藏进去!' );

end

%生成随机序列

rand('seed',key);

a=rand(1,count);

%初始化

row=zeros([1 count]);

col=zeros([1 count]);

%计算row和col

r=1;

c=1;

row(1,1)=r;

col(1,1)=c;

for i=2:count

if a(i)>=0.5

c=c+interval1;

else

c=c+interval2;

end

if c>n

r=r+1;

if r>m

error( '载体太小不能将秘密信息隐藏进去!' );

end

c=mod(c,n);

if c==0

c=1;

end

end

row(1,i)=r;

col(1,i)=c;

end

dct变换编码研究课设实验报告_信息隐藏实验3相关推荐

  1. dct变换编码研究课设实验报告_制作电磁铁实验报告单_相关文章专题_写写帮文库...

    时间:2019-05-13 02:04:48 作者:admin 实验题目: <制作电磁铁> 实验目的:制作电磁铁并且研究确定自制电磁铁的磁性及磁极. 实验材料:大铁钉.多股绝缘胶线.电池及 ...

  2. LSB图像信息隐藏算法matlab,实验二LSB信息隐藏实验.doc

    实验二LSB信息隐藏实验.doc 实验二LSB信息隐藏实验 综合评分: [实验目的]: 掌握MATLAB基木操作 实现LSB信息隐藏和提取 [实验内容]:(请将你实验完成的项11涂"■&qu ...

  3. 大学物理实验长度的测量实验报告_大学物理实验报告长度测量.doc

    大学物理实验报告长度测量 大学物理实验报告长度测量 大学物理实验报告范例(长度和质量的测量) 怀 化 学 院 大 学 物 理 实 验实验报告 系别物信系年级 2009 专业 电信班级 09电信1班 姓 ...

  4. 大学物理实验长度的测量实验报告_大学物理实验长度的测量实验总结

    大学物理实验是一整套科学缜密的实验方法,有着十分重要的意义.在学习大学物理这个课程之后,可以分享学习方法.今天小编整理了,希望对你有帮助.篇一经过一年的大学物理实验的学习让我受益菲浅.在大学物理实验课 ...

  5. mysql上机实验报告_数据库上机实验7实验报告.doc

    <数据库上机实验7实验报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数据库上机实验7实验报告.doc>文档请在天天文库搜索. 1. 上机 ...

  6. 广州大学数据库实验报告_广州大学学生实验报告.doc

    广州大学学生实验报告 广州大学学生实验报告 开课学院及实验室: 地科院 室2015年5月6日 学院地理科学学院年级.专业.班资环122姓名曾鼎学号1201300045实验课程名称土地利用规划学成绩实验 ...

  7. 眼图观测实验报告_眼图观测实验..doc

    眼图观测实验. 武夷学院实验报告 课程名称:项目名称 ?姓名: 专业: 班级:学号:同组成员 实验准备[1]: 如果将输入波形输入示波器的Y轴,并且当示波器的水平扫描周期和码元定时同步时,在示波器上显 ...

  8. 二分法python上机实验报告_数值分析上机实验报告..doc

    数值分析上机实验报告. 实验报告一 题目: (绪论) 非线性方程求解及误差估计 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要.本实验采用两种常见的求解方法二分法.Newton ...

  9. 大学物理实验长度的测量实验报告_大学物理实验报告范文长度测量

    摘要:热敏电阻是阻值对温度变化非常敏感的一种半导体电阻,具有许多独特的优点和用途,在自动控制.无线电子技术.遥控技术及测温技术等方面有着广泛的应用.本实验通过用电桥法来研究热敏电阻的电阻温度特性,加深 ...

  10. 眼图观测实验报告_眼图观测实验报告.docx

    眼图观测实验报告 武夷学院实验报告 课程名称:通信原理实验项目名称:眼图观测实验 姓名:学号: 实验操作成绩__________实验指导教师签字:__________ 课程 系电子信息与计算机科学系 ...

最新文章

  1. 工厂模式一之简单工厂
  2. 计算机系学生的职业生涯作文,医学生职业生涯规划的作文800字
  3. 一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案
  4. leetcode 216. Combination Sum III | 216. 组合总和 III(Java)
  5. how to render AET extension field as code list
  6. 7-26 Windows消息队列 (25 分)(详解+思路+超时解决)
  7. 自动化运维 python 批量监控服务器_1、python自动化运维——监测服务器状态
  8. arcgis 10.1 导入数据到oracle 发布地图服务
  9. cxf wsdl2java wsdl_通过cxf 包的 wsdl2java 生成客户端 测试webservice
  10. oracle 12c dbca 无法发现 asm diskgroup
  11. 在Qtopia中添加国际化支持
  12. 百度,google等搜索引擎的网络蜘蛛基本原理
  13. 如何连接在同一个局域网内的打印机
  14. linux系统怎么拨号上网,Linux系统下ADSL拨号上网方法
  15. 【报告分享】2021中国瑜伽行业报告-精练(附下载)
  16. 阿里内核月报2014年12月
  17. Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
  18. string字符串常见用法
  19. Python __file__ 详解
  20. 非常适合菜鸟练手的Python项目,墙裂建议收藏!

热门文章

  1. D8(YT88)加密狗破解与加密工具
  2. 如何写出高性能SQL语句?-性能设计沉思录(6)
  3. 秒杀系统架构分析与实战
  4. 宏基4752g linux驱动下载,宏碁笔记本及应用程序驱动下载_硬件驱动下载
  5. Linux内核研究系列之可执行文件格式(转)
  6. 阵列信号处理及matlab实现_数字阵列雷达:发射数字波束形成
  7. 激活Windows10,激活软件被报出,软件存在威胁或者恶意程序?
  8. linux终端设置为管理员权限,ubuntu 中的管理员权限
  9. linux能解锁小米手机吗,【BL锁】还在为小米手机如何解锁及解锁后如何加锁而烦恼吗?...
  10. 02-即时通讯-XMPP 简单介绍