基于DWT的数字图像信息隐藏算法代码,带有高斯噪声攻击,可以运行,载体图像和水印图像经过灰度处理,用python实现
时间: 2023-06-18 20:04:25 浏览: 175
以下是基于DWT的数字图像信息隐藏算法代码,带有高斯噪声攻击的Python实现,包括了载体图像和水印图像的灰度处理。其中使用了pywt库来进行离散小波变换。
```python
import numpy as np
import cv2
import pywt
# 载入原始图像和水印图像
img = cv2.imread('carrier_image.jpg')
watermark = cv2.imread('watermark_image.jpg')
# 将原始图像和水印图像转换为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_watermark = cv2.cvtColor(watermark, cv2.COLOR_BGR2GRAY)
# 进行离散小波变换
coeffs = pywt.dwt2(gray_img, 'haar')
cA, (cH, cV, cD) = coeffs
# 对水印图像进行二值化处理
_, binary_watermark = cv2.threshold(gray_watermark, 127, 1, cv2.THRESH_BINARY)
# 调整水印图像大小,使其与载体图像大小相同
resized_watermark = cv2.resize(binary_watermark, cA.shape[::-1])
# 将水印图像嵌入到低频系数中
watermarked_cA = cA + resized_watermark * 0.1 * np.max(cA)
# 进行逆离散小波变换
watermarked_img = pywt.idwt2((watermarked_cA, (cH, cV, cD)), 'haar')
# 添加高斯噪声攻击
mean = 0
variance = 100
sigma = np.sqrt(variance)
noisy_img = watermarked_img + np.random.normal(mean, sigma, watermarked_img.shape)
# 显示原始图像、水印图像和嵌入水印后的图像
cv2.imshow('Original Image', gray_img)
cv2.imshow('Watermark Image', gray_watermark)
cv2.imshow('Watermarked Image', watermarked_img)
cv2.imshow('Noisy Watermarked Image', noisy_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,离散小波变换使用的是haar小波。水印图像被二值化处理,然后通过调整大小使其与载体图像大小相同。水印被嵌入到低频系数中,其中0.1是嵌入强度。最后,高斯噪声被添加到嵌入水印的图像中,攻击强度由variance参数控制。
阅读全文