奇异值分解水印嵌入以及水印提取代码
时间: 2023-11-12 20:15:10 浏览: 84
奇异值分解算法的m代码,实现了数字水印技术的嵌入及提取过程
以下是一个简单的奇异值分解水印嵌入以及水印提取的 Python 代码示例:
```python
import cv2
import numpy as np
from scipy.linalg import svd
# 加载图像
img = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE)
# 嵌入水印
def embed_watermark(img, watermark, alpha=0.1):
# 对图像进行奇异值分解
U, S, V = svd(img)
# 调整水印大小以适应奇异值矩阵
watermark = cv2.resize(watermark, (S.shape[0], S.shape[1]))
# 嵌入水印
S_watermarked = S + alpha * watermark * np.max(S)
# 重构图像
img_watermarked = np.dot(U, np.dot(np.diag(S_watermarked), V))
# 返回嵌入水印后的图像
return img_watermarked
# 提取水印
def extract_watermark(img_watermarked, alpha=0.1):
# 对图像进行奇异值分解
U, S, V = svd(img_watermarked)
# 提取水印
watermark = (S - np.diag(S)) / (alpha * np.max(S))
# 返回提取的水印
return watermark
# 加载水印并嵌入到图像中
watermark = cv2.imread('watermark.png', cv2.IMREAD_GRAYSCALE)
img_watermarked = embed_watermark(img, watermark)
# 从嵌入水印的图像中提取水印
extracted_watermark = extract_watermark(img_watermarked)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Watermarked Image', img_watermarked)
cv2.imshow('Extracted Watermark', extracted_watermark)
cv2.waitKey(0)
```
注意,此代码示例仅用于演示目的,并不是一个完整的实现。在实际应用中,需要考虑更多的因素,如水印鲁棒性、加密性等。
阅读全文