基于dwt(离散小波变换)实现彩色图像水印嵌入部分_2.0
2022/2/25 23:26:30
本文主要是介绍基于dwt(离散小波变换)实现彩色图像水印嵌入部分_2.0,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
修改了尺寸变换导致的图像失真问题,同时简化了部分代码。
本次内容为验证嵌入流程,所以过程不算繁杂,关键参数和小波变换级数后期可作为密钥。
import cv2 import pywt import numpy as np from PIL import Image def inches3(num,times): for i in range(times): num = round((num/2+1)) return num def Icm(Img_path): def maxRC(): Img = cv2.imread(Img_path, 0) R = Img.shape[0] C = Img.shape[1] num = max(R, C) return num num = maxRC() rc_new = inches3(num, 2) # 3-1(3维小波-1维小波) return rc_new Img_path = '100_10.bmp' waterImg_path = 'new.bmp' Img = cv2.imread(Img_path) Img = Img[:, :, [2, 1, 0]] # 调整通道顺序 waterImg = cv2.imread(waterImg_path, 0) # 读取水印灰度图像 rcnew = Icm(Img_path) # 对应1920,此处值为482 waterImg_new = cv2.resize(waterImg, (rcnew, rcnew)) R = Img.shape[0] C = Img.shape[1] RC_new = max(R, C) Img_new = cv2.resize(Img, (RC_new, RC_new)) (r, g, b) = cv2.split(Img_new) # 原图像三级小波变换 coeffs1 = pywt.wavedec2(b, 'db2', level=3) [ca, (ch3, cv3, cd3), (ch2, cv2, cd2), (ch1, cv1, cd1)] = coeffs1 # 水印图像一级小波变换 coeffs2 = pywt.wavedec2(waterImg_new, 'db2', level=1) [cA, (cH1, cV1, cD1)] = coeffs2 # 自定义嵌入系数 a1 = 0.1 a2 = 0.2 a3 = 0.1 a4 = 0.1 # 嵌入部分 ca = ca + cA * a1 ch3 = ch3 + cH1 * a2 cv3 = cv3 + cV1 * a3 cd3 = cd3 + cD1 * a4 newImg = pywt.waverec2([ca, (ch3, cv3, cd3), (ch2, cv2, cd2), (ch1, cv1, cd1)], 'db2') merged = np.ones(Img_new.shape, dtype=np.uint8) merged[:, :, 2] = newImg merged[:, :, 1] = g merged[:, :, 0] = r Img = Image.fromarray(merged) Img = Img.resize((1920, 1080), Image.ANTIALIAS) #重新调整大小,抗锯齿 Img.save('test.png')
原图像为1920*1080 .bmp格式(从视频中抽取)
因为后期将用于视频文件处理,所以代码中的尺寸变换暂时只针对这一固定尺寸。
结果示例:
嵌入后
原图(.bmp格式无法上传,此处为截图)1920*1080
水印图像( 经过Arnold置乱处理)100*100
Arnold阿诺德置乱(猫脸变换)图像盲水印注入预处理(python)
基于dwt(离散小波变换)实现彩色图像水印嵌入部分_1.0
这篇关于基于dwt(离散小波变换)实现彩色图像水印嵌入部分_2.0的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)