当前位置: 首页 > news >正文

数字水印 | 离散小波变换 DWT 的 Python 代码实现

🍍原文: 【图像处理】图像离散小波变换及 Python 代码实现

🍍写在前面: 本文在原文的基础上补全了代码。



1 环境准备

① 安装 p y w t \mathsf{pywt} pywt 包:

pip install PyWavelets

说明: p y w t \mathsf{pywt} pywt d w t \mathsf{dwt} dwt 的库,全称是 P y W a v e l e t s \mathsf{PyWavelets} PyWavelets

② 安装 c v 2 \mathsf{cv2} cv2 包:

pip install opencv-python==3.4.5.20

说明: c v 2 \mathsf{cv2} cv2 用于将 RGB 图像转换为灰度图像。如果安装失败,则可能是 Python 版本和 opencv-python 不匹配。

注意:在 Python 的多版本环境中,使用 pip3.7 而非 pip 命令可以指定使用 Python37,对于其他 Python 版本也一样。否则可能出现安装成功,但 Pycharm 仍然找不到包的情况。



2 完整代码

关键代码就只有前几行,后面都是在画图:

import numpy as np
from matplotlib import pyplot as plt
import pywt
import PIL
import cv2img = PIL.Image.open("white_bear.jpg")
img = np.array(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
LLY, (LHY, HLY, HHY) = pywt.dwt2(img, 'haar')plt.subplot(1, 3, 1)
plt.title("Original", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(img, cmap="Greys")plt.subplot(2, 3, 2)
plt.title("LL", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(LLY, cmap="Greys")plt.subplot(2, 3, 3)
plt.title("HL", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(HLY, cmap="Greys")plt.subplot(2, 3, 5)
plt.title("LH", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(LHY, cmap="Greys")plt.subplot(2, 3, 6)
plt.title("HH", fontsize=12, loc="center")
plt.axis('off')
plt.imshow(HHY, cmap="Greys")plt.show()

上述代码在 p y w t . d w t 2 \mathsf{pywt.dwt2} pywt.dwt2 函数中使用的是哈尔 ( h a a r ) \mathsf{(haar)} (haar) 小波变换,它是由数学家哈尔·阿尔弗雷德于 1909 年所提出的函数变换,也是小波变换中最简单的一种变换。



http://www.lryc.cn/news/347312.html

相关文章:

  • [框架] Unity 公共执行器
  • 二进制转为HEX数组小工具
  • 数据结构-二叉树-红黑树
  • C++11 新特性 decltype 说明符
  • java线程局部变量使用方式
  • 【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙
  • 2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享
  • 中国电子学会(CEIT)2022年12月真题C语言软件编程等级考试三级(含详细解析答案)
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月12日,星期日
  • 微服务思想以及实现
  • C语法:格式符号%f和%lf引发的错误
  • Java基础入门day48
  • C++笔记(体系结构与内核分析)
  • c++ 唤醒指定线程
  • java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • AI图书推荐:利用生成式AI实现业务流程超自动化
  • 什么事防抖和节流,有什么区别,如何实现
  • PanguSync大数据量初始化脚本
  • DELL T630服务器iDRAC分辨率调整办法
  • 您真的会高效使用 Mac 吗?
  • Vue11 Vue3完结撒花
  • CodeTop 高频笔试题总结(持续更新)
  • 类和对象一(从封装开始讲述)
  • LeetCode100题总结
  • 基于截断傅里叶级数展开的抖动波形生成
  • 图片标注编辑平台搭建系列教程(9)——支持撤销的画线行为
  • 赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十一)
  • 使用自关联方法处理多表关系
  • annaconda详细解读换源文件
  • AI大模型系列:编写高质量提示(prompt)的实践技巧