传统的LSB算法由于其变换规律非常明显,很容易被隐写分析检测到,因此需要改进算法提升其隐蔽性。LSB有三个改进方向分别是:对嵌入过程中嵌入的方式进行更改;对嵌入水印的内容进行更改以及对水印嵌入前对水印进行预处理。

利用补余载体更改LSB

方案

嵌入程序LSB.m在原有LSB的基础上增加返回了补余载体。LSB.m在读入原始水印和原始载体在后,生成与原始载体同尺寸的全黑的初始补余载体。水印和载体最低位相同时不变,最低位不同时做更改嵌入(与基础LSB算法相同),嵌入方式改为生成1或-1随机数,若随机数为1则更改原始载体,反之则更改补余载体,返回两个载体完成嵌入。
提取程序inLSB.m则需嵌入载体和补余载体的最低位加和对2取余求解,用改进后两部分载体最低位值的和改进前嵌入后载体水印的最低位值。

分析

该改进方案利用补余水印分散了原本嵌入后载体水印中包含的信息,嵌入水印后载体的水印不可见性进一步提升。同时,仅仅拿到嵌入水印载体的攻击者无法读出全部水印内容,因此抗攻击性也有加强。解密者需要同时拿到嵌入后水印和补余水印方可读出完整水印。

实验结果

可以看到嵌入水印与原始载体基本一致,补余载体中包含部分水印信息、提取载体完整。(原始载体为lena)


LSB.m

function  [piccover1,piccover2] = LSB2( piccover1,pic2ray,M,N,m,n ) %piccover1载体,pic2ray水印,piccover2补余载体,M,N封面行列,m,n二值图行列
piccover2=zeros(M,N);%初始化补余载体
if(m<=M&&n<=N)for i=1:mfor j=1:nif pic2ray(i,j)==1&&mod(piccover1(i,j),2)==1     continue;elseif pic2ray(i,j)==0&&mod(piccover1(i,j),2)==0continue;else                     a=randsrc;           %a为1更改原始载体,反之更改补余载体if a==1if piccover1(i,j)==0piccover1(i,j)=piccover1(i,j)+1;elseif piccover1(i,j)==255piccover1(i,j)=piccover1(i,j)-1;elsepiccover1(i,j)=piccover1(i,j)+1;endelseif piccover2(i,j)==0piccover2(i,j)=piccover2(i,j)+1;elseif piccover2(i,j)==255piccover2(i,j)=piccover2(i,j)-1;elsepiccover2(i,j)=piccover2(i,j)+1;end      endendend         end
elsefprintf('载体对象大小不够!')
end
end

inLSB.m

function picjie = inLSB2(pichide1,pichide2,m,n)
picjie=zeros(m,n);for i=1:mfor j=1:nif mod(mod(pichide1(i,j),2)+mod(pichide2(i,j),2),2)==1picjie(i,j)=255;elsepicjie(i,j)=0;endendendend

利用密钥载体更改LSB

方案

嵌入程序LSB.m在原有LSB的基础上增加返回了密钥载体。LSB.m在读入原始水印和原始载体后,生成与原始水印同尺寸的初始密钥载体。按照原始水印大小每位生成随机数,若为1则将水印变换为与1的差值,反之则不变,随机数作为密钥保存在密钥载体中,根据更改后的水印按照原本LSB的方式进行更改,返回两个载体完成嵌入。
提取程序inLSB.m则需嵌入载体和密钥载体,先提取出最低位的加密后水印,再根据密钥载体的更改方式反解出原始水印。

分析

该改进方案利用密钥水印更改了嵌入水印的内容,水印内容的更改方式保存在密钥水印中,这个密钥每次加密都是随机生成的,每次的加密密钥都不相同。由于必须使用独立密钥才能完成水印的加解密,LSB水印的安全性提升。同时,缺少密钥的攻击者无法破解出全部水印,解密者需要同时拿到嵌入后水印和密钥水印方可读出完整水印。

实验结果

直接按照LSB提取结果无法得到水印,改进后提取可以得到水印。


LSB.m

function  [piccover,piccover2] = LSB1(piccover,pic2ray,M,N,m,n ) %piccover1载体,pic2ray水印,piccover2密钥载体,M,N封面行列,m,n二值图行列
piccover2=zeros(M,N);%初始化密钥载体
for i=1:m%随机生成密钥,水印内容更改for j=1:ntmp = randsrc;if (tmp==1)pic2ray(i,j)=1-pic2ray(i,j);piccover2(i,j)=1;elsepiccover2(i,j)=0;endend
end
if(m<=M&&n<=N)for i=1:mfor j=1:nif pic2ray(i,j)==1&&mod(piccover(i,j),2)==1continue;elseif pic2ray(i,j)==1&&mod(piccover(i,j),2)==0piccover(i,j)=piccover(i,j)+1;elseif pic2ray(i,j)==0&&mod(piccover(i,j),2)==0continue;elseif pic2ray(i,j)==0 && mod(piccover(i,j),2)==1piccover(i,j)=piccover(i,j)-1;endend         end
elsefprintf('载体对象大小不够!')
end
end

inLSB.m

function picjie = inLSB1(pichide1,pichide2,m,n)for i=1:mfor j=1:nif mod(pichide1(i,j),2)==1pichide1(i,j)=255;elsepichide1(i,j)=0;endendendfor i=1:m%按照密钥载体反解原始水印for j=1:nif pichide2(i,j)==1picjie(i,j)=1-pichide1(i,j);elsepicjie(i,j)=pichide1(i,j);endendend
end

利用混沌序列加密更改LSB

方案

混乱预处理程序mass.m用于原始水印的预处理和提取lsb后的水印解密。
嵌入程序LSB.m读入的是处理后的水印和原始载体后,并按照原本LSB的方式进行最低位嵌入,返回两嵌入载体。提取程序inLSB.m提取出最低位的加密后水印,再通过mass.m中的混沌序列进行解密。

分析

该改进方案利用混沌序列进行了水印预处理,攻击者按照lsb解密后无法得到真实水印内容,水印的安全性提升。同时,缺少密钥的攻击者无法破解出全部水印,解密者需要同时拿到嵌入后水印和密钥水印方可读出完整水印。

实验结果

按照混沌序列解密提取后的水印得到原本水印。

mass.m

clear
x(1)=0.5;
for i=1:100*100-1x(i+1)=3.7*x(i)*(1-x(i));
end
[y,num]=sort(x);
pic1=double(rgb2gray(imread('data1.jpg')));
pic2=uint8(zeros(100,100));
for i=1:100*100pic2(i)=pic1(num(i));
end
imwrite(pic2, 'data2.bmp');%加密后保存供lsb嵌入使用
imshow(pic2);pic1=double(imread('result2.bmp'));%读入lsb提取后的加密水印
pic3=uint8(zeros(100,100));
for i=1:100*100pic3(num(i))=pic2(i);
end
figure
imshow(pic3);

matlab LSB算法的三种改进相关推荐

  1. K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

    原文:http://www.cnblogs.com/yixuan-xu/p/6272208.html K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means ...

  2. 【图像隐写】基于LSB+DWT+DCT三种算法实现图像和音频水印嵌入提取含Matlab源码

    1 简介 基于LSB+DWT+DCT三种算法实现图像和音频水印嵌入提取. 1.1 LSB算法 根据LSB算法简单易实现的特点,结合在图像置乱技术中很好特性的Arnold变换.利用变化产生影子图像.通过 ...

  3. C语言快速排序算法及三种优化方式

    C语言快速排序算法及三种优化方式 C语言快速排序算法及三种优化方式 原理 快速排序复杂度分析 1 时间复杂度 2 空间复杂度 快速排序代码实现 1 普通快速排序 2 快速排序优化1-三数取中优化不必要 ...

  4. 【强化学习】DQN 的三种改进在运筹学中的应用

    这篇文章主要介绍 DQN 的三种改进:Nature DQN.Double DQN.Dueling DQN 在运筹学中的应用,并给出三者的对比,同时也会给出不同增量学习下的效果. 这三种具体的改进方式可 ...

  5. js实现阶乘算法的三种方法

    js实现阶乘算法的三种方法 // 非递归写法 function f(n) {if (0 === n) {return 1;}let res = 1;for (let i = 1; i <= n; ...

  6. 希尔伯特黄变换matlab,HHT变换的三种方法 Matla

    压缩包 : f914a6a90d345a26f732d9223e682699.rar 列表 复件 HHT变换的三种方法 Matlab/G Rilling/document.doc 复件 HHT变换的三 ...

  7. 在MATLAB中生成矩阵的三种方法

    在MATLAB中生成矩阵的三种方法 1. 直接输入法 2. 外部文件读入法 3.特殊矩阵函数生成法 1. 直接输入法 (1)矩阵所有元素必须在[]内 (2)矩阵中同行元素以逗号','或空格分隔 (3) ...

  8. ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略

    ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略 目录 三.模型训练 ...

  9. c语言勾股定理程序流程图,方法总结1.表达算法的方法有自然语言.流程图和基本算法语句三种.先有自然语言.再画流程图.最后才能写出基本算法语句.即程序,——青夏教育精英家教网——...

    考点一:自然语言表示的算法 [内容解读]通过对解决具体问题过程与步骤的分析,体会算法的思想,了解算法的含义:对于某一问题往往可以设计出多种算法,通过选用步骤最少的.结构最好的算法. [命题规律]以选择 ...

  10. matlab中阈值计算方法,三种阈值计算方法在MatLab6.5中的实现

    2007 年 10 月 湘南学院学报 Oct. ,2007 第 28 卷第 5 期 Journal of Xiangnan University Vol. 28 No. 5 收稿日期 :2007 - ...

最新文章

  1. 4 月 24 日开播!基于神经网络建模的信息传播预测
  2. python入门练习题-python基础知识练习题一
  3. TJU 2248. Channel Design 最小树形图
  4. H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
  5. 介绍for-of循环
  6. 获取bootgrid选中行数据_Easyui 取得选中行数据_EasyUI 教程
  7. day01 python入门之路
  8. GB35114—⑤、附 录C
  9. 机器学习面试题60~100
  10. verilog实现pwm
  11. 15款最好用的新浪短链接(t.cn接口)在线生成工具
  12. 里费默之死的哲学解释
  13. java中事务并发问题是_事务必会必知
  14. 联想 Thinkpad SL410使用体验
  15. C#中File和FileInfo的区别和用法
  16. TOPSIS(优劣解距离法)【附Python实现代码及可视化代码】
  17. python的matmul_TensorFlow:tf.matmul函数
  18. nck课程笔记:破解补丁工具的使用
  19. 首届“十大最具价值”AR/VR创业项目遴选榜单丨Xtecher权威发布
  20. load和onload的区别

热门文章

  1. 电气火灾监控系统在太焦铁路博爱站房项目的应用
  2. office 2010图标出现异常时的解决办法
  3. 《赖氏经典英语语法》第二集
  4. html5页面左右框架布局代码,网页布局框架(示例代码)
  5. vmware esxi 资源池详解
  6. 大一新生计算机专业对未来的展望,大学生未来展望简短
  7. U盘弹出问题解决尝试和记录
  8. sql-in查询-元素超过1000条解决方案
  9. ROS中关于yaml文件参数的读取,和nh.param函数
  10. java重载和重写的区别_Java重载和重写的区别