dct变换编码研究课设实验报告_信息隐藏实验3
信息隐藏实验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相关推荐
- dct变换编码研究课设实验报告_制作电磁铁实验报告单_相关文章专题_写写帮文库...
时间:2019-05-13 02:04:48 作者:admin 实验题目: <制作电磁铁> 实验目的:制作电磁铁并且研究确定自制电磁铁的磁性及磁极. 实验材料:大铁钉.多股绝缘胶线.电池及 ...
- LSB图像信息隐藏算法matlab,实验二LSB信息隐藏实验.doc
实验二LSB信息隐藏实验.doc 实验二LSB信息隐藏实验 综合评分: [实验目的]: 掌握MATLAB基木操作 实现LSB信息隐藏和提取 [实验内容]:(请将你实验完成的项11涂"■&qu ...
- 大学物理实验长度的测量实验报告_大学物理实验报告长度测量.doc
大学物理实验报告长度测量 大学物理实验报告长度测量 大学物理实验报告范例(长度和质量的测量) 怀 化 学 院 大 学 物 理 实 验实验报告 系别物信系年级 2009 专业 电信班级 09电信1班 姓 ...
- 大学物理实验长度的测量实验报告_大学物理实验长度的测量实验总结
大学物理实验是一整套科学缜密的实验方法,有着十分重要的意义.在学习大学物理这个课程之后,可以分享学习方法.今天小编整理了,希望对你有帮助.篇一经过一年的大学物理实验的学习让我受益菲浅.在大学物理实验课 ...
- mysql上机实验报告_数据库上机实验7实验报告.doc
<数据库上机实验7实验报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数据库上机实验7实验报告.doc>文档请在天天文库搜索. 1. 上机 ...
- 广州大学数据库实验报告_广州大学学生实验报告.doc
广州大学学生实验报告 广州大学学生实验报告 开课学院及实验室: 地科院 室2015年5月6日 学院地理科学学院年级.专业.班资环122姓名曾鼎学号1201300045实验课程名称土地利用规划学成绩实验 ...
- 眼图观测实验报告_眼图观测实验..doc
眼图观测实验. 武夷学院实验报告 课程名称:项目名称 ?姓名: 专业: 班级:学号:同组成员 实验准备[1]: 如果将输入波形输入示波器的Y轴,并且当示波器的水平扫描周期和码元定时同步时,在示波器上显 ...
- 二分法python上机实验报告_数值分析上机实验报告..doc
数值分析上机实验报告. 实验报告一 题目: (绪论) 非线性方程求解及误差估计 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要.本实验采用两种常见的求解方法二分法.Newton ...
- 大学物理实验长度的测量实验报告_大学物理实验报告范文长度测量
摘要:热敏电阻是阻值对温度变化非常敏感的一种半导体电阻,具有许多独特的优点和用途,在自动控制.无线电子技术.遥控技术及测温技术等方面有着广泛的应用.本实验通过用电桥法来研究热敏电阻的电阻温度特性,加深 ...
- 眼图观测实验报告_眼图观测实验报告.docx
眼图观测实验报告 武夷学院实验报告 课程名称:通信原理实验项目名称:眼图观测实验 姓名:学号: 实验操作成绩__________实验指导教师签字:__________ 课程 系电子信息与计算机科学系 ...
最新文章
- 工厂模式一之简单工厂
- 计算机系学生的职业生涯作文,医学生职业生涯规划的作文800字
- 一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案
- leetcode 216. Combination Sum III | 216. 组合总和 III(Java)
- how to render AET extension field as code list
- 7-26 Windows消息队列 (25 分)(详解+思路+超时解决)
- 自动化运维 python 批量监控服务器_1、python自动化运维——监测服务器状态
- arcgis 10.1 导入数据到oracle 发布地图服务
- cxf wsdl2java wsdl_通过cxf 包的 wsdl2java 生成客户端 测试webservice
- oracle 12c dbca 无法发现 asm diskgroup
- 在Qtopia中添加国际化支持
- 百度,google等搜索引擎的网络蜘蛛基本原理
- 如何连接在同一个局域网内的打印机
- linux系统怎么拨号上网,Linux系统下ADSL拨号上网方法
- 【报告分享】2021中国瑜伽行业报告-精练(附下载)
- 阿里内核月报2014年12月
- Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
- string字符串常见用法
- Python __file__ 详解
- 非常适合菜鸟练手的Python项目,墙裂建议收藏!
热门文章
- D8(YT88)加密狗破解与加密工具
- 如何写出高性能SQL语句?-性能设计沉思录(6)
- 秒杀系统架构分析与实战
- 宏基4752g linux驱动下载,宏碁笔记本及应用程序驱动下载_硬件驱动下载
- Linux内核研究系列之可执行文件格式(转)
- 阵列信号处理及matlab实现_数字阵列雷达:发射数字波束形成
- 激活Windows10,激活软件被报出,软件存在威胁或者恶意程序?
- linux终端设置为管理员权限,ubuntu 中的管理员权限
- linux能解锁小米手机吗,【BL锁】还在为小米手机如何解锁及解锁后如何加锁而烦恼吗?...
- 02-即时通讯-XMPP 简单介绍