隐写术相关笔记

将学习隐写术时整理的笔记记录在此。

LSB、DCT、DWT图片水印代码:https://github.com/iA-oO/my_stegano.git

VQ

VQ(向量量化)是一种图像压缩技术,它可以帮助我们减小图像文件的存储空间。它的工作原理是将图像分成许多小块,然后用能够代表这些块的压缩码来表示它们。
我们用二维图片来理解:
image
在这里,我们用蓝色实线将这张图划分为16个区域。任意的一对数(也就是横轴x和纵轴y组成的任意的一个坐标点(x, y))都会落到上面这张图中的某一特定区域。它将会被该区域的红星点近似。这里有16块不同区域,16个红星点,这些红星点是量化矢量,表示图中的任意一个点都可以量化为这16个矢量中的其中一个。这16个值可以用4位的二进制码来编码表示(2^4=16)。
这里的红星被称为码矢(codevectors),由蓝色边定义的区域叫做编码区域(encoding regions),所有码矢的集合称为码书(codebook),所有编码区域的集合称为空间的划分(partition of thespace)。

假设我们有一幅彩色图像,它可以表示为一个二维矩阵,每个元素代表一个像素点的颜色值(RGB值)。为了进行压缩,我们将图像分割成很多小块,例如4x4的块。
现在,我们想要生成一个码书,用来表示这些小块。我们从训练数据集中选择一些块,可以是图像中的随机块或者特定区域的块。进而得到我们的码字,它们是代表这些块的代表向量。
在编码过程中,我们逐个处理每个小块。对于当前的小块,我们计算它与码书中每个码字的距离(如图上蓝色实线)。就像是将这个小块与码书中的每个码字比较,看它们有多相似。然后,我们选择距离最近的码字,将它的索引作为编码结果。这个索引可以用一个很短的二进制码来表示,所以它可以实现压缩。
在解码过程中,我们使用索引表中的索引来找到对应的码字,然后用这些码字来还原原始图像。我们将每个索引映射到码书中的对应码字,并将它们组合在一起,逐个填充回原来的位置,就可以还原出原始图像。

LSB

见:关于LSB图像水印(含代码连接) – iAFolder

DCT

离散余弦变换(Discrete Cosine Transform,简称DCT)是一种频域变换技术,广泛应用于信号处理领域,特别是在音频和图像压缩中。
在图像压缩中,DCT将图像分成由不同频率组成的小块,然后进行量化。在量化过程中,弃高频(右下方,小数值),留低频(左上方,大数值)

应用:JPEG图像压缩。

关于YUV:
Y 为亮度信息,UV 为色度信息。Y明度,U色调,V饱和度。
image

流程图:
852CE5DB5490F0A9F11ECFCC5C7BBE39

编码:
1,将图像分块,分成若干8×8的图像块image
2,将RGB转换成YUV
3,DCT变换
此时像素构成的矩阵例子:
OI58F$FW71E4%UWAAX$RC_J
首先,我们需要做的是将所有这些值居中,这些值目前以 128 为中心( 0-255),我们需要改变成以零为中心(因为余弦波从 1 到 -1)。我们从每个值中减去 128,得到这样的移位块:
`KBDNCK[L]EYQP2$G(4BBX5
接着,从左至右,从上至下(水平频率从左到右递增,垂直频率从上到下递增)对每个图像块进行DCT变换。这里使用公式(详见后文公式图中的2D DCT),输出一个8×8的矩阵:
image
4,进行量化压缩,将DCT变换后的临时结果,除以各自量化步长并四舍五入后取整,得到量化系数。这里经常会把很多更高频率的成份舍位成为接近0,且剩下很多会变成小的正或负数。
有一个xx%质量标准JPEG量化表。例:
0$K5E6KHV74ANIJ)L{T_H2U
在 JPEG 标准中,不同的压缩器(例如 photoshop 中使用的压缩器)将根据感觉使用不同的量化表。量化步长就是我们设置的质量级别。我们将每个系数除以相应的量化值 (即表中该处的数值,也就是量化步长),然后四舍五入到最近的整数。我们可以看到量化表中右下方的数值比左上方大得多,所以本质上发生的是右下方的值被大量缩放,通常接近于0。例如,370/16=-23:
T~
可以看到唯一对我们有影响的系数是左上方的9个。仅使用这9个,我们就可以得到几乎相同的图像。
接着我们对这个矩阵使用熵编码

最后储存熵编码再二进制编码之后的东西。由于舍弃了某些频率的图像,所以最终呈现出来的图像清晰度会有差异,压缩后的图像比原始图像模糊一些。

DCT具备“去相关性”和“能量集中”的特性。由于DCT能够集中图像能量在较低频率的系数中,在压缩过程中,高频系数可以被丢弃或量化以实现更高的压缩比。
同时,由于人眼对低频敏感而对高频不敏感,省掉右下部分的一些值对人眼来说,看起来实际上是没什么区别的。
image

解码(解压缩):
1,在图像的每个部分之间,你会得到一个小块,上面写着这些是我们使用的量化表和霍夫曼编码表。
将每个值乘以我们的量化表。(注:这是亮度的量化表,而不是色度。)

2,我们对每个图像块使用逆离散余弦变换 (IDCT)(用公式,然后再+128),再转RGB便能重建一幅完整的图像。


我们可以看到输出块的值发生了一些变化,但它和输入块非常接近。
image
这些是从 0 到 255,人眼几乎看不出差异。此例中质量标准是 50%,我们可以将 JPEG 质量设置得更高,并且将量化表中的值设置得更小。
image

公式:

B490BC05BBC3759C51668D3A0E216E7E
17B5A3588C671F95D94C72A15BE8394E

补充知识点:0-padding

DWT

离散小波变换(Discrete Wavelet Transform,简称DWT)是一种用于信号处理和数据压缩的频域变换技术。DWT通过将信号分解为不同尺度的小波函数来表示信号的时间和频率信息。

1.主要特点:可以提供信号在不同时间尺度上的局部信息,这使得DWT在分析非平稳信号(如语音、图像和视频)方面具有优势。

2.DWT的变换过程:分为两个步骤,分解(Decomposition)和重构(Reconstruction)。
(1)分解:在分解阶段,DWT将信号通过低通滤波器(称为低通滤波器或尺度函数)和高通滤波器(称为高通滤波器或小波函数)进行滤波和下采样。低通滤波器捕捉信号的低频信息,而高通滤波器捕捉信号的高频细节。通过多级分解,信号可以被分解成多个尺度上的低频和高频系数。
(2)重构:在重构阶段,通过把每个尺度的低频和高频系数进行上采样和滤波,再加和得到重构的信号。通过不同尺度的低频和高频系数的重建,可以获得与原始信号相似的近似信号和细节。

3.应用:如图像压缩(如JPEG2000)、语音和音频压缩(如MP3)以及信号分析和特征提取等。

DCT(离散余弦变换)和DWT(离散小波变换)的关系:

1.变换方式:DCT是一种正交变换,它将信号分解为一系列不同频率的余弦函数。DWT是一种正交或非正交的变换,它将信号分解为一系列不同尺度和频率的小波函数。
2.表示形式:DCT产生的输出是频域上的离散系数,表示信号在不同频率上的能量。DWT产生的输出是时频域上的系数,表示信号在不同尺度和频率上的能量。
3.频率分辨率:DCT采用固定的基函数(余弦函数),因此它的频率分辨率是固定的。DWT具有可变的基函数(小波函数),因此它的频率分辨率可以在不同尺度之间进行调整。
4.时间-频率局部性:DCT将信号分解成频率上的成分,但无法提供时间上的局部信息。DWT不仅提供频率上的成分,还提供了时间上的局部信息,因为小波函数可以在时间和频率上进行局部化。
5.编码效率:由于DCT和DWT的基函数形式和性质不同,它们在不同类型的信号上的编码效率可能不同。通常情况下,DCT更适合处理平稳信号(如图像和音频),而DWT更适合处理具有时变特性的信号(如语音和视频)。

公式:
(学习内容来自视频:【小波变换:离散小波变换DWT】 https://www.bilibili.com/video/BV1AL4y1Y76R/?share_source=copy_web&vd_source=615eb03d223cf19a23232ca4a7b70c1e

6AAD089FAA9FA9B37379BD34CCC4715B
image

DWT图片水印步骤

编码:
1)读取载体图像与水印图像
2)将水印图像长宽数值嵌入载体图像lsb
3)将水印图像转换为灰度图像
4)修改载体图像的长宽与水印图片长宽
5)将载体图像进行三级离散小波分解,水印图像一级离散小波分解,得到不同分辨率级下的多个细节子图和一个逼近子图
6)拆分载体图像b, g, r值(注意:cv2不是按rgb顺序来读取图像的,而是bgr)
7)将水印图像b通道第一级小波分解后得到的各子图(ca, ch, cv, cd)根据自定义比例系数嵌入第三级小波分解后得到的相应子图(CA3, CH3, CV3, CD3)中
8)对嵌入水印后的小波系数进行三级小波重构,得到嵌入水印的图像

解码:
1)读取原始图像与加密图像
2)从加密图像lsb中提取水印图像长宽值
3)分别拆分出原始图像b, g, r值与加密图像B, G, R值
4)分别将原始图像b通道与加密图像B通道进行三级离散小波分解,得到各自不同分辨率级下的多个细节子图和一个逼近子图
5)由得到子图根据自定义比例系数提取水印图像b通道第一级小波分解后得到的各子图(ca, ch, cv, cd)
6)对得到的小波系数进行一级小波重构,得到嵌入水印的灰度图像

总结

VQ LSB DWT DCT 评估
方法概括 将初始图像分块,逐个处理每个小块,计算它与码书中每个码字的距离,以码书中距离最近的码字的数值代替原图像各块像素值作为编码结果,得到压缩图像。 将水印图像像素值嵌入初始图像像素值最低有效位,得到加密图像。 对整张参考图像进行DWT运算,然后把预加密图像嵌入HH'子带,再IDWT运算得到加密图像。 将初始图像分成m*n块不重叠的8*8大小块,然后对各块进行DCT运算,在高频处嵌入水印图像像素值,再进行IDCT得到加密图像。 计算峰值信噪比(PSNR),PSNR值越高表示视觉质量越高。计算结构相似度(SSIM),SSIM取值范围为0 ~ 1,SSIM值越高表示图像的结构相似度越高。
可用库函数 scipy.cluster.vq pywt.dwt ①scipy.fft.dct ②scipy.fftpack.dct ①psnr-hvsm ②psnr ③psnr ①skimage.metrics ②tf.image.ssim ③SSIM_PIL

学习资料来源及参考

发表评论