基于Python实现数字图像可视化水印系统
基于Python实现数字图像可视化⽔印系统
⼀、经典数字图像⽔印算法
1.LSB 算法
LSB(Least Significant Bits)算法,全称为最低有效位算法,是利⽤载体对象的⼆进制的最低⼀位(或⼏位)来进⾏秘密信息的隐藏。LSB 算法是隐写术中最常见的算法,多⽤于图像和声⾳载体之中[9]。
LSB 算法的可⾏性说明
图像/⾳频对象均可数字化为{}序列;
每⼀个对象均由若⼲⼆进制位组成;
每⼀个对象的⼆进制低位在某种意义上“不重要”。
对于具体图像来说:
去掉最低 1 位甚⾄最低 1-4 位对图像的整体视觉效果没有太⼤影响;
去掉最低 1 位对图像的统计特性影响不明显。
LSB 算法嵌⼊基本步骤
将要隐藏的⽔印⽂本信息的转换为⼆进制数据;
读⼊载体图像,将图像矩阵的每个像素转换成⼆进制。⽤⽔印信息的⼆进制数据的每⼀⽐特位替换与之相对应的载体图像的最低有效位(LSB 位);
excel无法复制粘贴将载体图像的每⼀像素再由⼆进制转换为⼗进制,从⽽获得含有⽔印信息的图像。
如何做网页
图 3.1  LSB 算法嵌⼊图解
LSB 算法提取基本步骤
① 将嵌⼊⽔印信息的载体图像的像素转换成⼆进制,依次取出每⼀个像素的⼆进制的最后⼀位,拼接成⼆进制数据。
③ 将得到的⼆进制数据转换成⽂本数据,便可得到隐藏的信息。
图 3.2 LSB 算法提取图解
2.DCT 算法
DCT 算法(Discrete Cosine Transform),即离散余弦变换算法,它与离散傅⾥叶变换类似,但是只使⽤实数。DCT 算法于 1974 年被提出,被认为是对语⾳和图像信号进⾏变换的最佳⽅法。DCT 算法⽬前在图像编码中占有极其重要的地位,是 H.261、JPEG、MPEG、H.264 等国际上公⽤的编码标准的重要基础。在视频压缩中,最常⽤的变换⽅法就是 DCT 算法。
在⾃然界中,⼤多数信号的能量都集中在余弦变换后的低频部分。并且⼈眼对于细节信息并不敏感,含有多数能量的低频部分⼏乎可以代表整幅图像,使⽤
DCT 算法进⾏信息隐藏就是在这个特点之上进⾏的。
DCT 变换的原理
数字图像 S 是具有 M ⾏ N 列的⼀个矩阵。为了减弱或去除图像数据相关性,可以运⽤⼆维 DCT,将图像从空间域转换到 DCT 变换域。
① ⼀维 DCT 变换离散余弦变换
逆变换
其中
⼆维 DCT 变换
2 2 ⼆维 DCT 逆变换个人所得税税率表2022
2 2 对于⼆维图像来说,s 表⽰空域(灰度)值,S 表⽰频率系数。
DCT 变换的特点
在基于 DCT 的变换编码中,图像是先经分块(8×8 或 16×16)后再经过 DCT 变换,这种变换是局部的,只反映了图像某⼀部分的信息。当然也可以对整幅图像进⾏ DCT 变换,但是运算速度⽐分块 DCT 要慢。
图像经 DCT 后,得到的 DCT 图像有三个特点:
系数值全部集中在 0 值附近,动态范围很⼩;
DCT 变换后图像能量集中在图像的低频部分,即 DCT 图像中不为零的系数⼤部分集中在⼀起;
明白的反义词
没有保留原图像块的精细结构,从中反映不了原图像块的边缘、轮廓等信息。
DCT 信息嵌⼊算法
DCT 信息嵌⼊算法是以 DCT 变换为基础,对图像经过 DCT 变换后的 DCT 系数进⾏适当改变,以达到隐藏秘密信息的⽬的。将载体图像分成 8×8 的像素块,每⼀块只精确地编码(隐藏)⼀个秘密信息位。在每⼀块中,根据每⼀个图像块的两个 DCT 系数的相对⼤⼩来标明所隐藏的信息位。
⽣物学研究表明,⼈眼对图像平滑区域的变换⽐较敏感,⽽对纹理区域的变换不太敏感。经过离散余弦变换之后,图像信息集中在少数低频系数上,⽽纹理和边缘信息则在中⾼频系数中,所以低频系数的改变对图像视觉上的影响远⼤于⾼频系数。因此,在 DCT 信息嵌⼊的时候我们也是选择中频系数来隐藏信息,在 8×8 的像素块中,我们选择(4,1)和(3,2)这两个位置的中频系数来隐藏信息。当然,这只是其中⼀种选择,选择(4,2)和(2,4)等也是可以的。
嵌⼊过程开始时,⾸先随机地选择⼀个图像块,它经⼆维 DCT 变换后得到,⽤它对第 i 个消息⽐特进⾏编码。发送者和接收者必须事先约定嵌⼊过程中使⽤的两个 DCT 系数的位置,为了达到隐藏的健壮性和不可察觉性,应该在 DCT 的中频系数中选取,⽐如⽤(1, 1)和(2, 2)代表所选定的两个系数的坐标。嵌⼊过程为:
如果(1, 1)> (2, 2),就代表隐藏信息“1”;
如果(1, 1)< (2, 2),就代表“0”。
中国音超
如果需要隐藏的信息位为“1”,但是(1, 1)< (2, 2),那么就把两个系数相互交换。最后发送者做⼆维逆 DCT 变换,将图像变回空间域,进⾏传输。
图 3.3 DCT 信息嵌⼊⽰意图
图 3.4 DCT 数字⽔印嵌⼊算法流程
DCT 信息提取算法
DCT 信息提取是 DCT 信息嵌⼊的逆变换,将图像进⾏ DCT 变换后,从 DCT 系数中按照嵌⼊时的规则提取出隐藏信息。
如果(1, 1)> (2, 2),代表本信息块隐藏的信息为“1”; 如果(1, 1)< (2, 2),代表本信息块隐藏的信息为“0”。
将提取的信息拼接起来得到的就是隐藏的⽔印信息
图 3.5 DCT 数字⽔印提取算法流程
⼆、经典数字图像⽔印算法的改进
2.1 随机间隔算法
随机间隔算法是 LSB 算法的改进,发送者和接受者使⽤同⼀个密钥作为随机数⽣成器的种⼦,⽣成随机序列 k1,k2,…,kl(m),并进⼀步以此⽣成隐藏位置的指标集。
随机间隔法嵌⼊⽔印
随机间隔法嵌⼊⽔印的过程与 LSB 基本算法嵌⼊⽔印的过程基本相似,可以参见图 3.1,只是不再按顺序依次在载体图像的每⼀位像素中嵌⼊了,⽽是根据随机序列和步长来跳跃⼀段间隔,这也是为什么叫做随机间隔算法的原因。
⽔印信息
随机间隔法嵌⼊信息⽰意图
伪代码⽰意为:
使⽤种⼦⽣成随机序列 ki
n←k1
for i=1…,l(m) do
si←mi
n← n+ki+1
end for
随机间隔法提取⽔印
随机间隔算法提取⽔印是随机间隔法嵌⼊⽔印的逆操作,提取信息时使⽤与嵌⼊时相同的随机数序列,即可跳跃到相同的位置提取出隐藏信息。
伪代码⽰意为:使⽤种⼦⽣成随机序列 ki n←k1
for i=1…,l(m) do mi ← LSB(sn) n← n+ki+1
end for
随机间隔法性能分析
优点
随机确定⽔印信息⽐特嵌⼊的位置,提⾼了安全性,使⽔印位置不容易被定位。
因为有随机间隔步长的存在,⽔印信息的嵌⼊⽐基本 LSB 算法更为分散,⽔印嵌⼊对载体图⽚的统计特性影响更⼩,更不易被察觉。
缺陷
跑步技巧隐藏容量⽐基本 LSB 技术⼩。
随机间隔算法的步长对存储信息容量的影响
=/
其中,Capacity 是存储信息的容量,也即存储信息的长度。Width 和 Height 是载体图⽚的长和宽,Width*Height 是载体图⽚的⼤⼩。Step 为随机间隔法的步长。
由此可见,在给定载体图⽚的情况下,随机间隔算法的步长与存储信息容量

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。