LSB最低有效位算法实现
LSB是空域数字水印的一项技术,顾名思义就是在图片的每个像素的最低位上嵌入水印信息。
介绍原理的博客资料网上很多,说点不一样的。
一开始学习的时候在网上看了一个讲解的python实现
此文中的大致意思是将水印图片二值化插入到原图中的像素的最后一位(首先将原图像素的最后一位置零)
用此方法实现:
原图
加水印后图
原水印
提取出的水印图片
可以看出原图与加水印后的图别无二样。
但是这样的弊端是只能存储二值化后的图片,虽然可以一定程度的避开RS(Regular Singular)隐写分析技术。这个下篇博客会讲到。
更常规的LSB算法应该是像此文中所言,将所需要存储的信息转化为二进制存储在数字图像中。
例如:一个若干字节的音频信息(当然也可以是图片,可能字节数多一点罢了) 这里举一个字节的例子(太懒了)133转化为二进制是八位(一个字节)10000101 这八位可以放在图像的八个像素点的最后一位上。
当然这样的话RS(Regular Singular)分析可以轻易的得出隐写率。当然直观上会更隐蔽,存储的信息也不限于二值化的图片,但是存储的总信息量是不变的。
可能有人有疑问为啥第一种方法可以一定程度上避开RS分析,这个问题困惑了好几天,个人认为因为二值化的图片像素间的具有一定的平滑性,相较于第二种随机性弱许多,破坏了RS分析所需要的统计假设。(PS:有大佬懂这个可以详细解释一下)
这里贴上第一种实现的代码,第二种也比较简单,对需要加的水印信息二进制话再插入就行。
这里实现的是RGB三通道的单像素8bit的图,也可以用灰度图,RGB转灰度图的代码下面也给出。(程序中的图片自备)
def rgb2gray(rgb):r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]gray = 0.2989 * r + 0.5870 * g + 0.1140 * breturn np.trunc(gray)#np.trunc对矩阵取整
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 23 11:43:12 2020
@author: MYM
"""
import matplotlib.pyplot as plt
import matplotlib.image as pmg
import numpy as np#读入图像
limit=200#二值化临界值
cr="copytest.jpg"#copyright.jpg
copy_right=pmg.imread(cr)
origin=pmg.imread("lena.bmp")if copy_right.shape[0] > origin.shape[0] or \copy_right.shape[1] > origin.shape[1]:raise ValueError("copyright image must be smaller than original image")
#显示读入的图像
plt.imshow(copy_right)
plt.title("copyright_picture")
plt.axis('off')
plt.figure()plt.imshow(origin)
plt.axis('off')plt.title("origin_picture")
#图片备份
watermark=origin.copy()
copyrig=copy_right.copy()
#对版权图片二值化
for m in range(3):for i in range(copyrig.shape[0]):for j in range(copyrig.shape[1]):if copyrig[i,j,m]>limit:copyrig[i,j,m]=1else:copyrig[i,j,m]=0
#对原图最小位置零
for i in range(0,watermark.shape[0]):for j in range(0,watermark.shape[1]):watermark[i,j,:]=(watermark[i,j,:]//2)*2 #//取整除运算符
#将二值化的版权图片加入原图中
h,w=copyrig.shape[0],copyrig.shape[1]
watermark[0:h,0:w,:]=watermark[0:h,0:w,:]+copyrig
#显示加水印后的图像
plt.figure()
plt.imshow(watermark)
plt.axis('off')
plt.title("watermark")
#提取加水印图像的信息
c_watermark=watermark.copy()
watermark_copyright=(c_watermark%2)*255
#显示提取出的水印信息
plt.figure()
plt.imshow(watermark_copyright)
plt.axis('off')
plt.title("watermark_copyright")
LSB最低有效位算法实现相关推荐
- LSB最低有效位和MSB最高有效位
最低有效位(the least significant bit,lsb)是指一个二进制数字中的第0位(即最低位),具有权值为2^0,可以用它来检测数的奇偶性.与之相反的称之为最高有效位.在大端序中,l ...
- 数字水印_最低有效位算法
最低有效位( Least Significant Bit.,LSB)指的是一个二进制数中的第0位(即最低位) 最低有效位信息隐藏指的是,将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图 ...
- lsb - 最低有效位
英文: Least Significant Bit 中文: 最低有效位 介绍: 对于一个给定的数据串(整数),如二进制的1001或者十进制351,其最低有效位就是拥有最小单位数值的那一位.比如二进制1 ...
- 基于MatLab实现LSB(最低有效位)算法完成图片数字水印隐写功能
文章目录 前言 一.图像处理基础 二.LSB数字隐写算法 三.LSB数字隐写算法实现 四.数字隐写和提取过程 总结 前言 已经好久没写博客了,最近是在有些忙,但是忙里偷闲写一篇新学的知识点,所以准备写 ...
- LSB隐写(最低有效位隐写)
LSB隐写(最低有效位隐写) 我们先思考如下几个问题,然后再去实现 1.图片在计算机中存储的方式 2.什么原因可以是实现隐写 3.为什么选择最低有效位? 4.具体实现思路 5.如果用代码实现LSB隐写 ...
- MATLAB基于LSB的数字水印算法
摘要-LSB是一种简单传统的信息隐藏算法,属于数字水印技术中的一种.本文首先介绍了LSB技术的原理和特点,然后讨论了基于LSB的数字水印算法.最后利用MATLAB 2010 b2对这一算法的加密过程进 ...
- LSB图像信息隐藏算法matlab,实验二LSB信息隐藏实验.doc
实验二LSB信息隐藏实验.doc 实验二LSB信息隐藏实验 综合评分: [实验目的]: 掌握MATLAB基木操作 实现LSB信息隐藏和提取 [实验内容]:(请将你实验完成的项11涂"■&qu ...
- matlab实现GPC隐写算法,基于LSB信息隐藏算法的MATLAB实现
%将水印图像按最低位有效(LSB)方法嵌入到载体图像中,并把水印从载体图像中提取出来 %注:整个算法分为水印嵌入部分和水印提取部分,及hcf com down_sampled水印分析 % 程序代写&a ...
- matlab信息隐藏算法,[转载]基于LSB信息隐藏算法的MATLAB实现
%将水印图像按最低位有效(LSB)方法嵌入到载体图像中,并把水印从载体图像中提取出来 %注:整个算法分为水印嵌入部分和水印提取部分,及hcf com down_sampled水印分析 % 程序代写&a ...
最新文章
- Python一键转Java?“Google翻译”你别闹
- java-分支重载以及构造方法
- 测试结果分析_9种国内外纺织品耐摩擦色牢度测试方法结果分析
- 电脑重装系统文件会丢失吗_电脑黑屏,利用重装系统软件,把黑屏电脑里的文件拷出来...
- Keras【Deep Learning With Python】keras框架下的MNIST数据集训练及自己手写数字照片的识别(分类神经网络)
- node n 切换node版本失败_node版本如何升级
- 期末复习、化学反应工程科目(第三章)
- 前端如何实现网络速度测试功能_前端组件单元测试
- stm32 Flash读写[库函数]
- SpringMVC自学日志03(SpringMVC注解)
- python学到哪知道baseline_Python NLTK学习6(创建词性标注器)
- 纠结的rename命令
- 浅谈JobExecutionContext JobDataMap
- 概率图模型(PGM)学习笔记(三)模式推断与概率图流
- Qt 自定义QWidget中区分鼠标单击和双击
- 2D地图tile纹理自动拼接算法
- BCH采用大爆发,支付理念深入人心
- 什么是无线WIFI空口
- (转载)人机交互技术发展左右产业趋势
- 黑苹果双系统时间不一致_黑苹果与Windows系统时间不对(不同步)的解决办法...
热门文章
- 远离你的电脑,代码写得更好!
- Linux 系统使用WordPress开启“固定链接设置”之后部分页面打不开(404)的解决办法...
- 配置Apache+Php+PDT(Zend Debugger)
- 五种基于RGB色彩空间统计的皮肤检测算法
- DB2中不同于其它数据库的操作
- Twhirl's limit exceeded
- spark++读写mysql_spark读写mysql
- Mosh--mysql 学习笔记(1)
- python匿名函数就是没有名字的函数_python 之 匿名函数
- 河北对口计算机计算机网络,河北对口计算机试题及答案.doc