opencv-15 数字水印原理

最低有效位(Least Significant Bit,LSB)指的是一个二进制数中的第 0 位(即最低位)。
最低有效位信息隐藏指的是,将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图像的最低有效位层替换为当前需要隐藏的二值图像,从而实现将二值图像隐藏的目的。
由于二值图像处于载体图像的最低有效位上,所以对于载体图像的影响非常不明显,其具有较高的隐蔽性。

这种信息隐藏也被称为数字水印,通过该方式可以实现信息隐藏、版权认证、身份认证等功能。
例如,如果嵌入载体图像内的信息是秘密信息,就实现了信息隐藏;如果嵌入载体图像内的信息是版权信息,就能够实现版权认证;如果嵌入载体图像内的信息是身份信息,就可以实现数字签名,等等。所以,被嵌入载体图像内的信息也被称为数字水印信息。
数字水印信息可以是文本、视频、音频等多种形式

内容有点多,要是我看到直接就蒙圈了,一点点看,一天看一些理解下也可以

原理

从位平面的角度考虑,数字水印的处理过程分为下面两步。
 嵌入过程:将载体图像的第 0 个位平面替换为数字水印信息(一幅二值图像)。
 提取过程:将载体图像的最低有效位所构成的第 0 个位平面提取出来,得到数字水印信
息。

1.嵌入过程

嵌入过程是将数字水印嵌入载体图像的过程。该过程实现的是,将载体图像的最低有效位
用数字水印信息替换,得到包含水印信息的载体图像。
为了处理和说明起来方便,这里以原始图像为灰度图像、水印图像为二值图像为例。在实际处理中,原始图像、水印图像均可以为彩色图像,这时需要先对它们进行通道分解、图层分解,后续的处理方法与在灰度图像内嵌入二值水印图像的处理方法相同。

(1)原始载体图像预处理
为了便于理解,我们将载体图像处理为二进制形式,并标记出最低有效位。
例如,有灰度图像 O 作为载体图像,图像 O 中各个像素点的像素值为:

在这里插入图片描述
其对应的二进制表示 OB 为:

在这里插入图片描述
为了更直观,我们用下画线将图像的二进制表示 OB 的最低有效位标记出来了。被标记的值构成了载体图像 O 的第 0 个位平面,即“最低有效位”位平面 OBLSB,其具体值为:

在这里插入图片描述

(2)水印图像处理
为了方便处理,在嵌入水印前,需要将水印信息处理为二值图像。比较典型的情况是将灰度二值水印信息进行阈值处理,将其处理为二进制二值水印信息。
在灰度二值图像中,像素值只有 0 和 255 两种类型值,分别用来表示黑色和白色。可以将其中的 255 转换为 1,这样就得到了一幅二进制二值图像。在二进制二值图像中,仅仅用一个比特位表示一个像素值,像素值只有 0 和 1 两种可能值。经过上述处理,能够更方便地实现水印嵌入。
例如,有灰度二值水印图像 W,其像素值为

在这里插入图片描述
不能直接将上述水印图像嵌入载体图像内,需要将其转换为二进制二值水印图像,以方便嵌入。通过阈值处理,得到二进制二值水印图像 WB,其具体值为:

(在OpenCV中,阈值处理是一种常用的图像处理技术,它可以将图像中的像素值分成两个或多个区域,从而实现图像的分割和二值化)

在这里插入图片描述
经过处理后,二进制二值水印信息正好可以嵌入载体图像的最低有效位上。

(3)嵌入水印
将载体图像的最低有效位替换为二进制水印图像,完成水印的嵌入。
例如,将载体图像 OB 的最低有效位用水印信息 WB 替换,得到含水印载体图像的二进制形式 WOB,其具体值为:

在这里插入图片描述
将 WOB 转为十进制形式,即得到含水印载体图像的十进制值形式 WO,其值为:

在这里插入图片描述

由于信息的最低有效位对值的大小影响有限,因此,将载体图像最低有效位的值用水印信息替换后,载体图像像素的值并没有发生太大变化,人眼不足以看出区别,水印具有较高的隐蔽性。

提取水印

提取过程是指将水印信息从包含水印信息的载体图像内提取出来的过程。提取水印时,先
将含水印载体图像的像素值转换为二进制形式,然后从其最低有效位提取出水印信息即可。因
此,可以通过提取含水印载体图像的“最低有效位”位平面的方式来得到水印信息。
例如,有包含水印信息的载体图像 WOE,其具体值为:

在这里插入图片描述
将含水印信息的载体图像 WOE 转换为二进制形式 WOEB,得到:

在这里插入图片描述
提取 WOEB 的最低有效位信息(“最低有效位”位平面,即第 0 个位平面),即可得到水印信息 WE,其值为:

在这里插入图片描述

根据需要,决定是否进行阈值处理。如有必要,则通过阈值处理将其中值为 1 的像素点转换为 255,得到含有 0 和 255 两个值的二值水印图像 WET,具体值为:

在这里插入图片描述
通过上述例题可以发现,经过上述处理后,得到的水印图像 WET 与嵌入的水印图像 W 是一致的。
为了便于理解,这里仅介绍了原始载体图像为灰度图像的情况,在实际中可以根据需要在多个通道内嵌入相同的水印(提高鲁棒性,即使部分水印丢失,也能提取出完整水印信息),
或在各个不同的通道内嵌入不同的水印(提高嵌入容量)。在彩色图像的多个通道内嵌入水印的方法,与在灰度图像内嵌入水印的方法相同。

实现方法

最低有效位水印的实现包含嵌入过程和提取过程,下面对具体的实现方法进行简单介绍。
1.嵌入过程
嵌入过程完成的操作是,将数字水印信息嵌入载体图像内,其主要步骤如下。

(1)载体图像预处理
读取原始载体图像,并获取载体图像的行数 M 和列数 N。
例如,有原始载体图像 O,其像素值为:

在这里插入图片描述
将其对应的二进制形式记为 OB,其具体值为:

在这里插入图片描述
(2)建立提取矩阵
建立一个 M×N 大小、元素值均为 254 的提取矩阵(数组),用来提取载体图像的高七位。
例如,按照原始图像 O 的大小建立一个 4×4 大小、元素值均为 254 的数组 T,其具体为:

在这里插入图片描述

T 所对应的二进制形式记为 TB,其具体值为:

在这里插入图片描述

(3)保留载体图像的高七位,将最低位置零
为了实现该操作,需要将载体图像与元素值均为 254 的提取矩阵进行按位与运算。
将一个值在[0,255]之间的像素值 P 与数值 254 进行按位与运算,则会将像素值 P 的最低有
效位置零,只保留其高七位。例如:
 某个像素 Pa 的像素值为 217,将像素 Pa 与 254 进行按位与运算,则像素 Pa 的二进制
像素值高七位保持不变,最低有效位被清零。像素 Pa 的最低有效位上原来的值是 1,
因此,经过运算后像素 Pa 的像素值 217 减少 1,变为 216。
 某个像素 Pb 的像素值为 216,将像素 Pb 与 254 进行按位与运算,则像素 Pb 的二进制
像素值高七位保持不变,最低有效位被清零。像素 Pb 的最低有效位上原来的值就是 0,
因此在运算后像素 Pb 的像素值仍然是 216。
该运算示例具体如表 3-17 所示。

在这里插入图片描述
表中的 LSB 表示 Least Significant Bit,即最低有效位。
根据以上分析,将载体图像与元素值均为 254 的提取矩阵进行按位与运算,相当于将载体
图像内的每个像素值均与值 254 进行按位与运算。这样就实现了将整个图像内所有像素二进制值的高七位保留、最低位置零。

例如,将原始载体图像 OB 与元素值均为 254 的提取矩阵 TB 进行按位与运算,则 OB 的
高七位保持不变,而最低有效位被置零。即实现了只保留 OB 的高七位,得到 OBH,其具体值为:

在这里插入图片描述
(4)水印图像处理
有些情况下需要对水印进行简单处理。例如,当水印图像为 8 位灰度图的二值图像时,就需要将其转换为二进制二值图像,以方便将其嵌入载体图像的最低位。
例如,有一幅灰度二值水印图像 W,具体值为:

在这里插入图片描述
我们将其中的像素值 255 转换为像素值 1,以方便嵌入载体图像。该灰度二值图像对应的二进制图像为 WT,其值具体为:

在这里插入图片描述
其对应的 8 位二进制形式 WTB 为:

在这里插入图片描述
(5)嵌入水印
将原始载体图像进行“保留高七位、最低位置零”的操作后,我们得到一幅新的图像,将新图像与水印图像进行按位或运算,就能实现将水印信息嵌入原始载体图像内的效果。

将一个最低有效位(LSB)为 0 的数值 A 与一个只有一位的二进制值 B(单位二进制值)进行按位或运算时:

 当该二进制值 B 为 0 时,按位或运算的结果是 0,数值 A 的值保持不变。由于 B 的值为 0,因此,如果从最低有效位的角度理解,可以理解为数值 A 的最低有效位被替换为单位二进制值 B 的值,也可以理解为将单位二进制值 B 嵌入数值 A 内(的最低有效位上)。

 当该二进制值 B 为 1 时,按位或运算的结果是 1,数值 A 的高七位保持变,而最低有效位变为 1。因此,如果从最低有效位的角度理解,可以理解为数值 A 的最低有效位被替换为单位二进制值 B 的值,也可以理解为将单位二进制值 B 嵌入数值 A 内(的最低有效位上)。

总结来看,将一个最低有效位(LSB)为 0 的数值 A 与一个单位二进制值 B 进行按位或运算,相当于用该单位二进制值 B 替换原始数值 A 的最低有效位,即可以实现将单位二进制值 B嵌入数值 A 的最低有效位上。

例如,将最低有效位是 0 的数字 216 分别与单位二进制值 0 和单位二进制值 1 进行按位或
运算,如表 3-18 所示。

在这里插入图片描述
可以推断,如果将二进制二值水印图像(单位二进制值的水印图像)与最低有效位被置零
后得到的原始载体图像进行按位或运算,就可以实现将水印信息嵌入原始载体图像内。
因此,将水印信息 WB 与原始载体图像 O 的高七位图像 OBH 进行按位或运算,即完成将
水印信息嵌入原始载体图像 O 的 OBH 内,就可以得到含水印载体图像 WO。WO 的具体值为:
在这里插入图片描述
(6)显示图像
完成上述处理后,分别显示原始载体图像、水印图像、含水印图像。水印嵌入过程的流程图如图 3-12 所示。
在这里插入图片描述

2.提取过程

提取过程将完成数字水印的提取,具体步骤如下。
(1)含水印载体图像处理
读取包含水印的载体图像,获取含水印载体图像的大小 M×N。
例如,读取含水印载体图像 WO,获取其大小为 4×4。WO 的具体值为:

在这里插入图片描述
(2)建立提取矩阵
定义一个与含水印载体图像等大小的值为 1 的矩阵(数组)作为提取矩阵。
例如,定义一个大小为 4×4 的矩阵作为提取矩阵,使其中的值均为 1,将该矩阵标记为 T1:

在这里插入图片描述
其对应的 8 位二进制形式 Te 为:

在这里插入图片描述
(3)提取水印信息
将含水印载体图像与提取矩阵进行按位与运算,提取水印信息。
将一个值在[0, 255]之间的像素 P 与数值 1 进行按位与运算,则会将像素 P 的像素值的高七
位置零,只保留像素 P 的最低有效位(LSB)。

下面分别以像素 P 的最低有效位为 0 和 1 为例进行说明。
 如果像素 P 的最低有效位为 1,则会得到值 1。
例如,某像素 Pa 的值为 217,将其与数值 1 进行按位与运算,则 Pa 的高七位被置零,
只有其最低有效位被保留,得到值 1。
 如果像素 P 的最低有效位为 0,则会得到值 0。
例如,某像素 Pb 的值为 216,将其与数值 1 进行按位与运算,则 Pb 的高七位被置零,
只有其最低有效位被保留,得到值 0。

该实例的具体计算如表 3-19 所示。

在这里插入图片描述
基于上述规则,针对图像内的每个像素,将其与数值 1 进行按位与操作,即可将图像的最
低有效位提取出来。
因此,可以将含水印载体图像与元素值均为 1 的提取矩阵进行按位与运算,以实现提取水
印信息。

例如,含水印载体图像 WO 为:

在这里插入图片描述

将含水印图像 WO 与提取矩阵 Te 进行按位与运算,即可得到二进制值水印信息 We,其值为:

在这里插入图片描述
将提取出来的二进制水印信息 We 进行阈值处理,将其中值为 1 的像素值调整为 255,以
便显示。阈值处理后,得到二值水印图像 WG,具体值为:
在这里插入图片描述
(4)计算去除水印后的载体图像
有时需要删除包含在水印载体图像内的水印信息。通过将含水印载体图像的最低有效位置
零,即可实现删除水印信息。
建立一个大小为 4×4、元素值均为 254 的矩阵,将该矩阵标记为 T2,其具体为:

在这里插入图片描述
将上述 T2 所对应的二进制形式记为 TB,其具体值为:

在这里插入图片描述
通过将含水印载体图像 WO 与 TB 进行按位与运算,即可将载体图像 WO 的最低有效位置
零,得到删除水印信息的载体图像 ODW。该操作的具体实现原理及过程,与水印嵌入时对原
始图像的最低有效位置零操作是类似的。

(5)显示图像
根据需要,分别显示提取出来的水印图像 WG、删除水印信息的载体图像 ODW。
水印提取过程的流程图如图 3-13 所示。

在这里插入图片描述
就是说,也可以通过让含水印载体图像像素值对 2 取模的方式,来获取最低有效位水印。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再开源一款轻量内存池

前两天已开源线程池,开源一款轻量线程池项目,本节继续开源另一个孪生兄弟:内存池。 本节的线程池与内存池代码解析会在我的星球详细讲解。 内存池:https://github.com/Light-City/light-memory-pool 线程池:https://gi…

Python案例分析|使用Python图像处理库Pillow处理图像文件

本案例通过使用Python图像处理库Pillow,帮助大家进一步了解Python的基本概念:模块、对象、方法和函数的使用 使用Python语言解决实际问题时,往往需要使用由第三方开发的开源Python软件库。 本案例使用图像处理库Pillow中的模块、对象来处理…

ZooKeeper原理剖析

1.ZooKeeper简介 ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能: 帮助系统避免单点故障,建立可靠的应用程序。提供分布式协作服务和维护配置信息。 2.ZooKeeper结构 ZooKeeper集群中的节点分为三种角色:Le…

git如何撤销commit(未push)

文章目录 前言undo commitreset current branch to here Undo Commit,Revert Commit,Drop Commit的区别 是否删除对代码的修改是否删除Commit记录是否会新增Commit记录Undo Commit不会未Push会,已Push不会不会Revert Commit会不会会Drop Com…

vue 3.0 如何加载图片

.logo { background: url(~/assets/images/logo.svg) no-repeat center center/contain; width: 117px; height: 24px; margin: 0 20px; } <a class"logo" href"#"></a> 比较实用的书写方式

汽车销售数据可视化分析实战

1、任务 市场需求&#xff1a;各年度汽车总销量及环比&#xff0c;各车类、级别车辆销量及环比 消费能力/价位认知&#xff1a;车辆销售规模及环比、不同价位车销量及环比 企业/品牌竞争&#xff1a;各车系、厂商、品牌车销量及环比&#xff0c;市占率及变化趋势 热销车型&…

python多线程排查

问题 公司服务总是莫名其妙的cpu饱满排查了代码中的定时任务&#xff0c;排除之后仍经常出现类似问题。是时候debug了 排查过程 cpu劣化是一个过程&#xff0c;cpu持续增长到60%&#xff0c;然后突然服务雪崩不服务了。排查下来看sleep的物理线程和cpu增长的幅度一致 那么…

hadoop安全保护机制(kerberos + ldap)

信息安全理论&#xff1a; CIA模型&#xff1a;机密性、完整性和可用性 CIA模型能够帮助建议一些信息安全原则&#xff0c;但该模型并不是一个需要严格遵守的规则 hadoop平台可能设计多个CIA模型组件&#xff0c;也kennel一个也不涉及 机密性&#xff1a; 信息只应该被期望的…

探索AI图像安全,助力可信AI发展

探索AI图像安全&#xff0c;助力可信AI发展 0. 前言1. 人工智能发展与安全挑战1.1 人工智能及其发展1.2 人工智能安全挑战 2. WAIC 2023 多模态基础大模型的可信 AI2.1 WAIC 2023 专题论坛2.2 走进合合信息 3. AI 图像安全3.1 图像篡改检测3.2 生成式图像鉴别3.3 OCR 对抗攻击技…

Vis相关的期刊会议

中国计算机学会推荐国际学术会议和期刊目录 文档&#xff0c; 下载 link&#xff1a;CCF推荐国际学术刊物目录-中国计算机学会 一.可视化方向文章 1.IEEE VIS&#xff0c;是由 IEEE Visualization and Graphics Technical Committee(VGTC) 主办的数据可视化领域的顶级会议&a…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 17 日论文合集)

文章目录 一、检测相关(5篇)1.1 TALL: Thumbnail Layout for Deepfake Video Detection1.2 Cloud Detection in Multispectral Satellite Images Using Support Vector Machines With Quantum Kernels1.3 Multimodal Motion Conditioned Diffusion Model for Skeleton-based Vi…

【Linux】自动化构建工具-make/Makefile详解

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

深度学习——LSTM解决分类问题

RNN基本介绍 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如文本、语音、时间序列等具有时序关系的数据。 核心思想 RNN的关键思想是引入了循环结构&#xff0c;允许…

什么是剪贴板劫持-剪贴板劫持教程

目录 前言 什么是剪贴板劫持如何避免剪贴板劫持&#xff1f;如何执行剪贴板劫持&#xff1f; 总结 前言 我来写剪贴板劫持教程。 什么是剪贴板劫持 剪贴板劫持是一种危险的攻击技术&#xff0c;借助该攻击者可以控制受害者的剪贴板并将恶意代码粘贴到目标机器中&#xff0c;…

基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前信息和状态&#xff1b;通过语音识别模块对当前垃圾种类进行语音识别&#xff1b; 通过蜂鸣器进行声光报警提醒垃圾桶已满&#xff1b;采用舵机控制垃圾桶打开关闭&#xff1b;超声波检测当前垃圾桶满溢程度&#xff1…

认识spring项目的创建 和 从spring中进行Bean对象的存取

前言 本篇简单介绍如何创建spring项目&#xff0c;如何存储到spring容器中&#xff0c;如何从容器中获取Bean对象&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 创建spring项目2. 将Bean对象存…

RS485/RS232自由转ETHERNET/IP网关rs485和232接口一样吗

你是否曾经遇到过这样的问题&#xff1a;如何将ETHERNET/IP网络和RS485/RS232总线连接起来呢&#xff1f; 远创智控的YC-EIP-RS485/232通讯网关&#xff0c;自主研发的ETHERNET/IP从站功能&#xff0c;完美解决了这个难题。这款网关不仅可以将ETHERNET/IP网络和RS485/RS232总线…

服务器数据恢复-ESX SERVER无法连接到STORAGE的数据恢复案例

服务器数据恢复环境&#xff1a; 某公司信息管理平台&#xff0c;数台VMware ESX SERVER虚拟机共享一台IBM某型号存储。 服务器故障&#xff1a; VC报告虚拟磁盘丢失&#xff0c;管理员ssh到ESX中执行fdisk -l命令查看磁盘&#xff0c;发现STORAGE已经没有分区表了。重启设备后…

WAIC2023:图像内容安全黑科技助力可信AI发展

目录 0 写在前面1 AI图像篡改检测2 生成式图像鉴别2.1 主干特征提取通道2.2 注意力模块2.3 纹理增强模块 3 OCR对抗攻击4 助力可信AI向善发展总结 0 写在前面 2023世界人工智能大会(WAIC)已圆满结束&#xff0c;恰逢全球大模型和生成式人工智能蓬勃兴起之时&#xff0c;今年参…

C++第五讲

思维导图 续&#xff1a;myString类完善 /* ---------------------------------author&#xff1a;YoungZorncreated on 2023/7/19 19:20.--------------------------------- */ #include<iostream> #include<cstring>using namespace std;class myString { priva…