nsf5隐写算法 matlab,基于纹理复杂度的JPEG图像自适应隐写

0 引言

隐写术是一种利用载体的掩蔽效应将秘密信息隐藏,实现信息秘密传递的技术.隐写载体可以是图像、音频、视频、文本等网络数字媒体.由于JPEG已成为目前互联网上进行图像传输时最常用的图像格式,因此以JPEG图像作为载体的隐写研究也成为了图像隐写领域的热点.

通过修改载体图像空域或频域的LSB(lest significant bit)位即可以实现最简单的隐写,这种修改会造成图片像素或DCT系数统计频率中相邻值对趋于一致,为了避免这种现象,LSB匹配(MLSB)被提出.为了进一步提升隐写算法性能,编码技术被引入隐写过程.文献[[,大大提高了隐写编码的效率.然而,矩阵编码仅仅解决了降低修改率的问题,并未考虑隐写位置与隐写安全性之间的相关性.事实上,隐写载体中,部分位置的隐写具有很好的隐藏效果,而另一些位置的隐写将会大大增加风险.湿纸编码[能够将载体中风险较大的嵌入位置标记为湿点,从而在隐写过程中跳过这些危险的嵌入位置,实现隐写算法安全性提升.正是基于这样的编码优势,文献[

矩阵编码和湿纸编码都提升了隐写算法的安全性,但是在可隐写的位置范围内,所有隐写位置被等风险对待.也就是说,隐写算法尚未达到一种最低代价的隐写路径.随着STCs编码[的出现,这一问题得到了很好解决.STCs算法将卷积编码和维特比算法结合起来,通过针对载体的特性设计不同的失真模型,并据此选择嵌入信息的位置.一方面,在隐写嵌入率较小的情况下,STCs编码有着极高的编码效率,可大大降低隐写修改率;另一方面,STCs可以寻找一条近似最低代价的修改路径,实现失真最小化.因此,STCs隐写框架下的算法仅仅需要设计一个失真数学模型即代价函数,即可极大提升隐写算法安全性.该编码方法也是目前隐写算法最好的编码,而代价函数的设计成为STCs隐写中的核心问题.

基于STCs隐写方法的代价函数可以针对特定的隐写分析方法设计,如HUGO算法[根据SPAM[隐写分析方法提取的特征针对性地设计失真代价函数,将失真定义为三阶共生矩阵的权重,对SPAM具有很强的抗检测能力.也可以利用JPEG图像DCT系数的统计特性等设计代价函数,如文献[

与上述隐写分析方法不同,本文针对图像的纹理特性,设计了一种自适应隐写算法,同时,将均匀嵌入[的思想引入,摆脱隐写嵌入在DCT系数绝对值为0附近改动较大的缺点,提高算法的安全性.

1 相关工作

1.1 纹理特征描述

图像的纹理分析方法有很多,利用灰度共生矩阵研究纹理特征是其中比较经典的方法之一.

设图像的灰度级为N,则对应该图像的灰度共生矩阵K为N阶矩阵,在矩阵中处于第i行第j列的值代表在图像的灰度矩阵中灰度值为i的元素和灰度值为j的元素在距离为(Δx, Δy)的情况下成对出现的次数,记为pΔx, Δy(i, j).基于灰度共生矩阵,可以从反差和熵两个方面提取纹理特征.

1) 反差

825ccd05071e78e04a10297d0f233a01.png

(1)

反差主要用于表征图像的纹理的粗细程度,能够在一定程度上表现出图像的清晰程度.对于纹理较粗的图像,p(i, j)会主要出现在灰度共生矩阵的主对角线附近的位置,此时(i-j)值比较小,对应式中的G值也会比较小,反之在纹理比较细的图像中G值就会比较大.

2) 熵

edbef5637822b39145d87163413a71b4.png

(2)

熵用于表征图像中纹理出现的随机性.当图像的灰度共生矩阵中p(i, j)值都相同时,S值达到最大,此时图像显得比较平滑,当p(i, j)值完全不相同的时候,S值达到最小

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中实现自适应数字水印算法需要用到一些图像处理和数字信号处理的库和工具,比如 OpenCV、PIL、numpy 等等。下面是一个简单的示例,展示了如何使用 Python 实现自适应数字水印算法。 首先,安装必要的库和工具: ``` pip install opencv-python pip install numpy pip install Pillow ``` 接下来是代码实现: ```python import cv2 import numpy as np from PIL import Image # 读取图像 img = cv2.imread('lena.jpg') # 将图像转换为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 获取图像大小 height, width = gray_img.shape # 创建一个二维高斯函数模板 # sigma1 和 sigma2 的值可以根据实际情况进行调整 sigma1, sigma2 = 2, 5 gaussian = lambda x, y: np.exp(-(x ** 2 + y ** 2) / (2 * sigma1 ** 2)) - np.exp(-(x ** 2 + y ** 2) / (2 * sigma2 ** 2)) gaussian_kernel = np.fromfunction(gaussian, (5, 5)) # 对图像进行滤波操作 filtered_img = cv2.filter2D(gray_img, -1, gaussian_kernel) # 生成水印 watermark = np.random.randint(0, 2, size=(height, width)) # 将水印嵌入到图像中 alpha = 0.5 # 嵌入强度 watermarked_img = alpha * filtered_img + (1 - alpha) * watermark # 将水印提取出来 extracted_watermark = (watermarked_img - alpha * filtered_img) / (1 - alpha) # 显示结果 cv2.imshow('Original Image', img) cv2.imshow('Watermarked Image', watermarked_img) cv2.imshow('Extracted Watermark', extracted_watermark) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,首先使用 OpenCV 读取图像,并将其转换为灰度图。然后,创建一个二维高斯函数模板,并使用该模板对图像进行滤波操作。接着,生成一个随机的水印,并将其嵌入到图像中。最后,将水印从嵌入后的图像中提取出来,并显示结果。 需要注意的是,这只是一个简单的示例,实际的自适应数字水印算法可能需要更加复杂的处理和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值