基于MATLAB的数字水印嵌入系统
- 格式:pdf
- 大小:61.45 KB
- 文档页数:2
( 一) 水印的嵌入算法 数字水印技术的关键在于如何处理签字信号的鲁棒性、 不 可 感 知 性 、以 及 所 嵌 入 的 数 据 量 大 小 这 三 者 之 间 的 关 系 。判 断其算法优劣的一般衡量准则为: 对于主信号发生的部分失 真, 签字信号是否具备一定的鲁棒性。对于有意或无意的窃 取 、干 扰 或 去 除 操 作 , 签 字 信 号 是 否 具 备 一 定 的“抵 抗 ”能 力 , 从而保证隐藏信息的安全可靠和完整性。签字信号的嵌入是 否严重降低了主信号的感知效果以及数据嵌入量的大小。 常 见 的 数 字 水 印 算 法 有 : 最 低 有 效 位 算 法 ( LSB) ; 文 档 结 构 微 调 方 法 ; 将 水 印 设 计 成 一 种 抖 动 矩 阵 的 形 式 ; Patchwork 方法( 基于统计的数据水印嵌入方案) ; 纹理块映射编码方法, 仅适于具有大量任意纹理区域的图像, 而且尚不能完全自动 完成; 频率域数字水印方法 ( 类似扩频通信的技术来隐藏数 据的方法, 技术可以抗击有损压缩编码和其他一些具有信号 失真的数据处理过程) 等。 现在多数水印系统都在变换域中进行处理。采用小波分 析, 算法的鲁棒性更强, 水印信息量相比也更大。假设待嵌入 二值图像水印的原始图像大小为 2mNx×2mNy, 水印图像的大小 为 2Nx×2Ny( M=2) , 水印嵌入算法步骤如下: 1.嵌入水印的原始图像进行两级小波分解, 得到不同分辨 率级别下的细节子图 cDj+1(h), cDj+1(v), cDj+1(d)( j=0, 1) (分 别 代 表 j+1 分辨率级别 下 的 水 平 方 向 、 垂 直 方 向 和 对 角 线 方 向 的 三个细节子图)和一个逼近子图 cA2。 2.将每个细节子图分割成互不重叠的大小皆是 Nx×Ny 的 细节子图块 cDj+1(h), cDj+1, i(v), cDj+1, i(d)(i=1, 2, 2m- 2j)。 3.基于稳健性考虑, 希望图像水印的统计特性类似白噪声, 即均值为 0, 所以在嵌入水印之前, 首先将水印图像中 0 和 1 变
成- 1 和+1, 然后 对 水 印 图 像 进 行 一 次 小 波 分 解 得 到 三 个 细 节 子 图 w(h), w(v), w(d)和 一 个 逼 近 子 图 w(ca)(皆 为 大 小 是 Nx×Ny 的 子 图 )。
4.为增强嵌入水印信息的稳健性和不可见性, 可利用图像 多分辨率技术, 相同分辨率层次的数字水印嵌入对应的相同 分辨率层次的原始静态图像之中, 水印嵌入算法公式如下:
cDj+1, i(h)= cDj+1, i(h)+α×w(h) cDj+1, i(v)= cDj+1, i(v)+α×w(v) cDj+1, i(d)= cDj+1, i(d)+α×w(d) 其中, α为对应的加权因子, 用于控制嵌入水印强度。α取 值大, 鲁棒性好, 不可见性差; 反 之 , α取 值 小 , 不 可 见 性 好 , 但 稳健性差。 5.通过对嵌入水印后的系数进行重构, 即可获得加水印后 的图像。 ( 二) MATLAB 与数字图像 MATLAB 是 一 款 功 能 强 大 的 科 学 与 工 程 计 算 的 软 件 工 具, 其中的图像处理工具包是由一系列支持图像处理操作的 函 数 组 成 的 , 所 支 持 的 图 像 处 理 操 作 有 : 几 何 操 作 、区 域 操 作 和 块 操 作 ; 线 性 滤 波 和 滤 波 器 设 计 ; 变 换 ( DCT 变 换 ) ; 图 像 分 析和增强; 二值图像操作等。本系统主要使用函数有: 单尺度 二 维 离 散 小 波 变 换 : dwt2(); 多 尺 度 二 维 小 波 分 解 : wavdec2(); 单尺度逆二维离散小波分析: idwt2(); 多尺度二维小波重构: wa- verec2(); 对二维小波系数进行单支重构: wrcoef2(); 对二维小波 分 解 的 直 接 重 构 : upcoef2 (); RGB 图 像 转 换 为 灰 度 图 像 函 数 : rgb2gray(), I=ind2gray(RGB), 其作用是将真彩色 图 像 RGB 转 换 为 灰 度 图 像 I; 函 数 RGB2IND(), 将 RGB 图 像 转 换 为 索 引 图 像 ; 将 图 像 转 换 为 二 进 制 图 像 : im2bw(); 从 灰 度 图 像 产 生 索 引 图像函数: grayslice()。 ( 三) 数字水印管理系统的编程实现 本 程 序 应 用 MATLAB6.0 进 行 编 程 , 实 现 以 下 功 能 : 原 始 图像到二值图像的转换; 水印的嵌入; 混合图像的保存; 水印 的检测与提取等。设计思路及其主要实现代码如下: 1.在 GUI 模式下进行界面设计。用 MATLAB 的控件, 做出 窗体上所需的图像显示区和命令按钮, 合理布局。用菜单编辑 器设置菜单, 各菜单选项对函数进行相关调用。 2.在 编 程 窗 口 中 进 行 编 程 。 包 括 以 下 主 要 代 码 : ( 1) 打开原图的方法 f1=' ' ; [f1, p]=uigetfile(' *.jpg; *.bmp; *.tif; *.gif' , ' 打开原始图
end xishu=5; swa3=swa+swa2*xishu; swh3=swh+swh2*xishu; swv3=swv+swv2*xishu; swd3=swd+swd2*xishu; swa4=swa1+swa2*xishu; swh4=swh1+swh2*xishu; swv4=swv1+swv2*xishu; swd4=swd1+swd2*xishu; %嵌入水印:水印图像的水平、垂直、对角线和一个细节子图 乘以一个权值后, 分别于对应的原始图像的一级和二级子图相加 a1=iswt2(swa4, swh4, swv4, swd4, ' db1' ); a1=iswt2(a1, swh3, swv3, swd3, ' db1' ); %嵌入后, 则重构 图像, 则成为合成图像. delete(h1); image(a1, ' parent' , handles.axes3); colormap(map); set(handles.axes3, ' xtick' , [], ' ytick' , [], ' xcolor' , [0 0 1], ' ycolor' , [ 0 0 1]); set(handles.figure1, ' pointer' , ' arrow' ); else msgbox(' 没有水印图像' , ' 提示' , ' modal' ); end time=num2str(toc); set(handles.text5, ' string' , [' 用时: ' , time, ' 秒' ]);
值图像水印进行小波多分辨率分解, 组合对应方向上的小波细节子图数据, 从而实现了在原始静态图像上嵌入二值图像水印。
【关键词】数字水印; MATLAB; 小波变换
【中 图 分 类 号 】T P309
【文 献 标 识 码 】A
【文章编号】1008- 1151(2006)05- 0027- 02
一、引言
日常生活中, 人眼所能感受到的两幅质量十分相似的数 字图像, 其像素值可能存在很大的差别。这种依赖于人的视觉 系统的不完善性, 为数字图像的失真压缩和信息隐藏提供了 非常巨大的施展空间。数字水印技术在多媒体信息的版权归 属和信息安全领域已得到广泛关注。将水印信息通过某一算 法嵌入到原始数字信息如数字图像中, 但不影响数据的正常 使用和价值, 且不能被人的视觉系统所察觉。水印的嵌入借助 于算法进行实现, 而且用嵌入的逆算法, 可以提取水印。被嵌 入的数字水印种类很多, 本文介绍的水印是二日期】2006- 02- 02 【作者简介】舒云星( 1962- ) , 男, 洛阳工业高等专科学校教授。
- 27 -
像文件' ); addpath(p); if f1==0 return; end h1=figure_2(' 正在打开原始图像文件...' ); set(handles.figure1, ' pointer' , ' watch' ); %设置鼠标图
2006年第 5 期 ( 总第 91 期)
大众科技
DA ZHONG KE J I
No.5, 2006 (Cumula tive ly No.91)
基于 MATLAB 的数字水印嵌入系统
舒云星, 卫莉莉
( 洛阳工业高等专科学校计算机系, 河南 洛阳 471003)
【摘 要】文章利用 MATLAB 语言及其小波工具箱 , 采 用 小 波 变 换 算 法 , 开 发 数 字 水 印 嵌 入 系 统 , 通 过 对 原 始 静 态 图 像 和 二
标为忙状态
tic%程 序 计 时 X=rgb_toind(f1); %把 原 始 图 像 转 换 成 索 引 图 像 , 便 于 小 波工具箱处理
delete(h1); image(X, ' parent' , handles.axes1); colormap(map); %显示原始图像 set(handles.axes1, ' xtick' , [], ' ytick' , [], ' xcolor' , [0 0 1], ' ycolor' , [ 0, 0, 1]); ( 2) 图像转换函数 rgb_toind(), 通过图像转换函数, 把原始 图像转换成索引图像, 是用小波工具箱对其进行处理。 ( 3) 水印嵌入小波变换算法的实现, 根据前面介绍的小波 变换算法, 对图像进行分解。原始图像二次分解 函 数 x_fenjie (), 主要通过下面代码实现: if rem(size(X, 1), 2) ̄ =0 | rem(size(X, 2), 2) ̄ =0 X=wextend(' 2D' , ' per' , X, [1, 1]); %对 原 图 像 矩 阵 进 行延拓. end [swa, swh, swv, swd]=swt2(X, 1, ' db1' ); [swa1, swd1, swh1, swv1]=swt2(swa, 1, ' db1' ); ( 4) 水印图像延拓分解函数 y_fenjie(), 对水印图像进 行 一 次小波分解。 ( 5) 嵌入水印的实现 If~isempty(f2) f=[]; h1=figure_2(' 正在嵌入水印...' ); set(handles.figure1, ' pointer' , ' watch' ); if size(X, 1) ̄ =size(y, 1) | size(X, 2) ̄ =size(y, 2) y=y_fenjie(y_yuanshi);