上篇博客介绍了LSB(最低有效位)算法。
这篇针对LSB算法介绍RS隐写分析的实现。
先介绍几个概念:
翻转函数为:

平滑度函数为:

掩码算子M为:

掩码算子可以取随机0,1但是一定要各占50%概率。

RS分析分为几个步骤:
1.对像素分组
以8位灰度图像为例,图像的像素取值范围为集合𝑃
P={0,……,255}

分组可以看情况取,不一定非要是4。
2.对分组后的数据计算相关性(用平滑度函数),分别进行F1与F-1翻转后再计算相关性,进行对比得出RM,SM,R−M,S−MR_{M},S_{M},R_{-M},S_{-M}RM,SM,R−M,S−M的数值。
3.对图像的每个像素最低位取反,同样进行第二步操作。得出另外一组RM,SM,R−M,S−MR_{M},S_{M},R_{-M},S_{-M}RM,SM,R−M,S−M
设隐写率为p,第三步算出的RM,SM,R−M,S−MR_{M},S_{M},R_{-M},S_{-M}RM,SM,R−M,S−M为隐写率(1−p2)(1-\frac{p}{2})(1−2p)情况下的,记为RM(1−p2)R_{M}(1-\frac{p}{2})RM(1−2p)
4.解下面方程,取其中较小的数为解xxx,则隐写率估计为p=xx−0.5p=\frac{x}{x-0.5}p=x−0.5x
判断是否经过LSB隐写:

如果经过LSB隐写则对图片进行F1翻转与进行F-1翻转会对图片平滑度造成不同的影响,进而导致RM,SM,R−M,S−MR_{M},S_{M},R_{-M},S_{-M}RM,SM,R−M,S−M参数的不对称性,可以明显看出经过隐写。
通过F1隐写相当于在最低位增加了噪声,加水印时也相当于增加了最低位的噪声,但是F1变换引入噪声对像素的影响最多为1,原图单独引入F-1变换引入噪声对像素的影响同样最多为1。
但是,引入F-1变换时,如果加了水印的话相当于部分像素先进行了F1变换后进行了F-1变换将噪声引入像素的影响可以达到2。
对于上文LSB算法提到的第一种方法比第二种更具有RS分析的隐蔽性,可以直观理解为原图与水印图都具有是图片具有像素上的平滑性,直接二值化嵌入的话会将水印图的像素平滑性引入加水印后的图片,这样的话导致通过平滑度计算来分析隐写率较为困难。(也不是说第一种好,第一种也有缺点,比如存储二值化图片数据、直接提取最后一位信息直接就暴露了)
下面给两个代码:一种算子是随机取0,1,一种是0,1间隔。一种平滑度计算是Z字型顺序计算,一种是一行一行的计算。
# -*- coding: utf-8 -*-
"""
Created on Wed May 13 13:15:42 2020
@author: MYM
"""
import matplotlib.pyplot as plt
import matplotlib.image as pmg
import numpy as np
import random
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
def Fp(picture,flag=0):#单个元素的翻转 输入参数为:元素,翻转标签
if flag==1:
if picture%2==0:
picture= picture+1
else:
picture= picture-1
elif flag==-1:
if picture%2==0:
picture=picture-1
else:
picture=picture+1
return picture
def Fp_block(block_ori,wei,flag=0):#块翻转,输入参数为:数据块,维度,翻转标签
block=block_ori.copy()
if wei==2:
if flag==1:
block[0,0]=Fp(block[0,0],1)
block[0,1]=</

本文深入探讨了RS隐写分析技术的实现过程,包括翻转函数、平滑度函数及掩码算子的概念。通过具体步骤,如像素分组、计算相关性、图像最低位取反等,展示了如何估计隐写率,并提供了两种不同掩码算子和平滑度计算方法的代码示例。
最低0.47元/天 解锁文章
1015

被折叠的 条评论
为什么被折叠?



