为了弥补传统密码技术的不足,我们依据新型的版权保护技术——数字水印,设计实现了一种基于空域的图像水印算法,提出了一种基于空域LSB算法的数字图像加密算法,该加密算法对不同的值对应的图像点像素进行不同的加密,然后根据给定的随机整数寻找加密结果的存放位置。

一、数字水印的基本理论

1、数字水印技术的定义和基本框架

数字水印(Digital Watermark)技术是将与多媒体内容相关或不相关的一些标示信息直接嵌入多媒体内容当中,但不影响原内容的使用价值,并不容易被人的知觉系统觉察或注意到。通过这些隐藏在多媒体内容中的信息,可以达到确认内容创建者、购买者,或者是否真实完整。数字水印是信息隐藏技术的一个重要研究方向。

图l展示了水印的嵌入过程,该系统的输入是水印信息W、原始载体数据I和一个可选的私钥/公钥K。其中水印信息可以是任何形式的数据,如随机序列或伪随机序列;字符或栅格;二值图像、灰度图像或彩色图像;3D图像等等。水印生成算法G应保证水印的唯一性、有效性、不可逆性等属性。

2、数字水印的分类

随着数字水印技术的发展,水印算法的分类方法繁多。

1)按水印发展来看,可分为第1代水印和第2代水印;

2)按嵌入的水印信号形式来分,可以分为一维水印和多维水印;

3)按嵌入方法可以分为可逆水印和不可逆水印;

4)按水印检测方法,可以分为盲水印和非盲水印;

5)按鲁棒性来分,可分为易脆水印、半易脆水印和鲁棒水印;

6)从外观上分类,可分为可见水印和不可见水印;

7)按载体分类,可分为图像水印、视频水印、音频水印和文档水印;

8)从水印的嵌入域来分,可分为空间域水印和变换域水印。

3、水印的攻击方法和对策

从数字水印的应用中可以看出,数字水印在认证、防盗版方面有重要的应用。然而,水印技术与密码术一样,是在不停的“攻”与“防”中不断发展的,因此,研究数字水印的攻击方法对于数字水印的发展有着重要的作用。按照攻击原理可以将攻击分为4类:简单攻击、同步攻击、削去攻击和混淆攻击。

二、水印嵌入算法

数字水印技术的学科特点在于它横跨图像处理、多媒体技术、模式识别、密码学、数字通信等多学科领域,以这些领域的算法、思想和概念为基础。一个数字水印方案一般总是综合利用这些领域的最新进展,各学科的学者们也提出了不尽相同的算法。针对静态图像压缩标准JPEG,在离散余弦变换基础上植入数字水印的研究成为热点;针对目前流行的视频压缩标准MPEG、H.263,Dittmann等提出了2种适用于空域和频域的算法例;1995年,Cox等在传统通信系统的基础上,提出了扩频水印的概念。这种方法较好地利用了人类视觉系统的特性,水印信息经过一定的调制过程隐藏于数字图像感知比较重要的频谱部分,从而可以抵抗有损压缩和其它数字图像处理操作;Xia,Zeng等做了基于离散小波变换的数字水印技术研究;Zhu等在DWT技术上,从编码角度做了一些研究;Pitas等在统计学和混沌的基础上,提出了一种新颖的算法;Wolfgang,schyndel等在其定义的m-序列基础上,提出了可以有效抵抗线性和非线性滤波以及JPEG有损压缩的数字水印植入算法;QU等以图形着色问题为基础,提出了2种有趣的数字水印技术;Kankanhalli等研究了基于图像内容的数字水印技术H1,这与计算机视觉的发展是密不可分的;在计算机图形学研究领域,1999年的SIGGRAPH大会上,Praun等提出了在造型的三维网格上植人数字水印的方法,Ohbuchi也做了类似的工作;Maes等提出了基于几何变形的方法;Paute等从分形压缩的角度提出了方法。此外,很多学者还提出了一些对数字水印进行攻击的方法,非常有助于鲁棒性要求很高的数字水印技术的研究。

1、空域算法

该类算法中典型的水印算法是将信息嵌入到随机选择的图像点中最不重要的像素(LSB:least significantbits)上,这可保证嵌入的水印是不可见的,但是由于使用了图像不重要的像素位,算法的鲁棒性差,水印信息很容易为滤波、图像量化、几何变形的操作破坏.另外一个常用方法是利用像素的统计特征将信息嵌人像素的亮度值中。

2、变换域算法

基于变换域的数字水印技术往往采用类似于扩频图像的技术来隐藏水印信息。这类技术一般基于常用的图像变换(基于局部或是全局的变换),这些变换包括离散余弦变换(DCT)、离散小波变换(DWT)、傅氏变换(DFT或FFT)、傅立叶一梅林(Fourie-Mellin)变换以及哈达马变换(Hadamard transform)等等。

三、数字图像加密算法之空域LSB

1、LSB算法介绍

采用直接改变图像中像素的最后4位bit值来嵌入秘密文件。由秘密文件的传输过程,可相应地分为3个阶段:嵌入过程、传播过程、抽取过程,就整体设计方案而言,可以用模型来概括。

待检测的载体信号( Signal)提取出的秘密信息提取秘密信息,秘密信息指要传送的要隐藏的信息,像、声音、文字等。

这是一种典型的空间域数据隐藏方法,L.F.Tumer与R.G.Van Schyndel等先后利用此方法将特定的标记隐藏于数字音频和数字图像内。以图像数据而言,一幅图像的每个像素是以多比特的方式构成的,在灰度图像中,每个像素通常为8位;在真彩色图像(RGB方式)中,每个像素为24比特,其中RGB三色各为8位,每一位的取值为0或1。在数字图像中,每个像素的各个位对图像的贡献是不同的。对于8位的灰度图像,每个像素的数字g可用公式表示为:

其中:i代表像素的第几位;幺表示第f位的取值,bi∈{o,l}。

这样,把整个图像分解为8个位平面,从LSB(最低有效位O)到MSB(最高有效位7)。从位平面的分布来看,随着位平面从低位到高位(即从位平面0到位平面7),位平面图像的特征逐渐变得复杂,细节不断增加。到了比较低的位平面时,单纯从一幅位平面上已经逐渐不能看出测试图像的信息了。由于低位所代表的能量很少,改变低位对图像的质量没有太大的影响。LSB方法正是利用这一点在图像低位隐藏入水印信息。

2、加密算法的实现

(1)利用MATLAB语言实现了在一个400x 533大小的灰度图“grayl.bmp”中隐藏了一个文本文件“gray2.bmp”,事实上,在该大小的位图中最大可隐藏的字符数为256x 256/8=8 192个,约汉字4000多个。由此可见,隐藏信息的容量非常大。加密算法具体如下:

1)嵌入秘密信息

第1步:读人载体文件,并显示它。

original_carrier-1 mread(’grayl.bmp‘);

carner=original_carrier;

subplot(2,3,1),imshow(carrier),title(’原始的载体图像’)

第2步:决定载体的LSB及嵌入的位数,采用嵌入图像中所有像素的最后4位;对载体图像做预处理,置其低4位相位为O;

carrierl=bitand(carner,254);

subplot(2,3,2),imshow(carrierl),title(‘载体图像低1位是0‘,见图4)

carrier2=bitand(carner,252);

subplot(2,3,3),imshow(carner/),title(’载体图像低2位是O‘,见图5)

camer3=bitand(carner,248);

subplot(2,3,4),imshow(carrier3),title(’载体图像低3位是O’,见图6)

carrier4=bitand(carrier, 240);

subplot(2,3,5),imshow(carrier4),title(‘载体图像低4位是0‘,见图7)

第3步:将秘密图像读人,并存储;并对秘密图像做预处理。

original_secret=imread(‘gray2.bmp‘);

secret =original_sec ret ;

subplot(2,3,3),imshow(secret),title(’原始的秘密图像’,见图8)

secret=bitand(secret, 240);

subplot(2,3,4),imshow(sec ret),title(’低4位为O的秘密图像‘,见图9)

secret=bitshift(secret,-4);

第4步:将处理后的秘密图像嵌入到载体中,并且显示隐藏后的最终结果。

carrier=bitor(carrier, secret) ;

subplot (2,3,5),imshow (carrier),title(’隐藏后的载体图像’)

imwrite (carrier, 'd: \l_imagehide.bmp') 。

(2)读取秘密信息

第1步:读人含有秘密文件的图像;

carner=imread(’d:\l_imagehide.bmp’);

第2步:输出隐藏后的文件,并提取秘密图像;将秘密图像像位左移4位,显示提取后的秘密图像见图11。

A=bitand(carner,15);

A=bitshift (A,4);

subplot(2,3,6)!imshow (A),title(’提取的隐藏图像’)。

2)实验2利用MATLAB语言实现了在一个400x 533大小的彩色图“rgbl.jpg"中隐藏了一个文本文件“gray2.bmp",将秘密信息隐藏到JPG彩色图像的B层中。并成功提取隐藏的信息,完成信息隐藏。

第1步读入载体文件,并显示它。

original_carrier=imread ( 'rgbl.jpg' )

original_secret-imread 'gray2.bmp')

data=original_carrier;

carrier=original_carrier;

subplot (3,3,1),imshow (carrier),title(‘原始的载体图像’)

secret=originaLsecret;

第2步读取RGB图像的B层,显示B层的载体图像,置载体图像低4位是O,并显示它。

carner=carrier(: , : ,3);

subplot(3,3,2),imshow(carner),title(’B层的载体图像’)

carrier=bitand(carner,240);

subplot(3,3,3),imshow(carrier),title(’置低4位为O的载体图像‘)

第3步显示原始的秘密图像,置秘密图像低4位是O,并显示它,再把秘密图像高4位右移。

subplot(3,3,4),imshow(secret),title(’原始的秘密图像’)

secret=bitand (secret, 240);

subplot(3,3,5),imshow(secret),title(‘置低4位为0的秘密图像‘)

secret=bitshift(secret, -4);

第4步将秘密信息隐藏到载体的B层,并显示隐藏后的图片。

carrier=bitor(carrier,secret);

subplot (3,3,6),imshow(carner),title(‘隐藏在B层的载体图像’)

data(: , : , 3) =carrier;

subplot(3,3,7),imshow(data),title(’隐藏后的载体图像’)

第5步读人隐藏后的图片,并提取秘密信息。

A=imread(’d:\2_imagehide.bmp');

subplot (3,3,8),imshow (A),title(’读人隐藏后的载体图像‘)

row, col, rgbl=size (A);

A=A(:,:,3);

A=bitand (A. 15);

secret=bitshift (A, 4);

subplot (3,3,9),imshow(secret),title(’提取之后的隐藏图像’)

figure, imshow (original_carrier),title(’原始的载体图像’)

figure, imshow (data),title(’隐藏后的载体图像‘)

3、评价

LSB算法,就是通常把信息隐藏在图像像素的最后几位,这时信息通常是文本。把文本化成二进制代码,然后把它嵌人到图像像素的最后几位,这样做的好处是对图片的损耗很小,肉眼几乎无法分辨,该算法实现起来比较简单,且不可见性好,而且抵抗剪切和JPEG压缩的能力较强,算法的时间复杂度较低,加密效果较好,安全性较高;但鲁棒性差,轻微的噪音和压缩就有可能破坏水印,而且算法一旦被发现,敌手就可以轻易改变水印信息。

小知识之LSB加密算法

LSB(LeastSignificant Bits)加密算法:将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。

lsb算法 matlab隐藏图片算法,数字图像加密算法之空域LSB相关推荐

  1. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc

    图像放大算法总结及MATLAB源程序 1,插值算法(3种): (1)最邻近插值(近邻取样法): 最近插值的的思想很简单就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色.可见,最邻近插 ...

  2. matlab 图像白平衡算法,Matlab常用白平衡算法

    <Matlab常用白平衡算法>由会员分享,可在线阅读,更多相关<Matlab常用白平衡算法(21页珍藏版)>请在人人文库网上搜索. 1.1 灰色世界法灰色世界法(grey wo ...

  3. 关于精英蚁群算法matlab,蚁群算法MATLAB解VRP问题

    Excel  exp12_3_2.xls内容: ANT_VRP函数: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT ...

  4. 小波分析加密 matlab,基于小波变换的数字图像加密算法

    小波变换是傅里叶变换发展史上里程碑式的进展,小波变换在时域和频域上同时具有良好的局部化性质,并对各种信号特征进行多分辨率分析有极大的适应性,已广泛用于信号与图像处理.语言识别与合成等科技领域.那么今天 ...

  5. 压缩感知算法matlab,压缩感知算法matlab

    MATLAB代码如下: 压缩感知仿真实例 压缩感知仿真实例在MATLAB R2001b中的计算结果如下: 原图像 采样率0.7 采样率0.5 采样率0.3 压缩感知仿真实例采用均方误差...... M ...

  6. bfgs算法matlab程序,bfgs算法matlab代码

    (对 Large -scale 问题) 对应文件 \\toolbox\\matlab\\funfun\\fminbnd.m \\toolbox\\optim\\sfminbx.m \\toolbox\ ...

  7. 随机洗牌算法+matlab,洗牌算法及 random 中 shuffle 方法和 sample 方法浅析

    对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...

  8. 爬山算法matlab程序,爬山算法和模拟退火算法

    爬山算法 大体思路 爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶 具体操作 把当前的节点和要走的节点的值进行比较. 如果当前节点是最大的,那么不进行操作:反之 ...

  9. 车牌识别算法 matlab,车牌识别算法及其MATLAB实现

    一.算法 读取拍摄图像-->截取车牌部分 --> 识别车牌 图像预处理: 将图像经过图像灰度化.图像增强.边缘提取.二值化等操作,转换成便于车牌定位的二值化图像: 车牌定位: 利用车牌的边 ...

  10. ncut算法matlab程序,Ncut算法的MATLAB代码下载及实现在MATLAB上正常运行

    这里我所使用的平台是:win7(64bit)+MATLAB2014a(64bit) Ncut算法全称应该是:Multiscale Normalized Cut image segmentation,是 ...

最新文章

  1. sendmail启动报错
  2. 一段人人都应该知道的从Vue到React的过渡史
  3. php字符串综合作业,0418php字符串的操作
  4. 安装hexo,建站并新建博客
  5. 用python求两个人的平均身高_黄哥Python:分治算法(Divide-and-Conquer)
  6. python怎么读取csv文件-python怎么读取csv文件
  7. 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
  8. linux网络子系统分析(一)——协议栈分层实现综述
  9. 【oracle】sql处理重复数据
  10. IDEA 配置Java环境
  11. EasyPay移动支付框架
  12. 伟大程序员必须具备的7个好习惯
  13. 微信公众号正式号网络授权域名操作
  14. 试用了5款BI分析工具,终于找到了上手最快的那一个!
  15. 让你快速了解外汇EA
  16. uniapp的苹果全屏播放再退出会导致页面字体变大解决方法
  17. 人生不该有如此压力,来吃下这口缓解焦虑的良药[50P]
  18. html 图片透明字不透明,CSS实现背景图片透明,文字不透明效果的两种方法
  19. MySQL 怎么插入10天前的日期_使用 MySQL 的 SQL_MODE 有哪些坑,你知道么?
  20. java输入月份获得该年的这个月最后一个工作日是多少号(星期一到星期五)

热门文章

  1. Matlab文件IO操作函数,fgetl和textscan介绍以及使用时可能遇到的问题
  2. pip install -Uqq 是什么意思?
  3. Bootstrap栅格系统(屏幕大小)
  4. select into from 和 insert into select 的用法和区别
  5. vhdl变量除法_在VHDL中实现高精度快速除法
  6. java 拼音排序:Collator类
  7. 企业网站建设流程步骤,教你快速建网站
  8. VSCode项目启动与调试配置
  9. Word2016目录怎么自动生成
  10. connect ETIMEDOUT