文章目录

  • 一、前言
    • 实验目的
    • 简单回顾一下小波变换:
  • 二、环境配置
  • 三、实验思路及过程(附图)
  • 四、源代码
  • 五、参考资料

一、前言

实验目的

用小波变换对图像去噪。

简单回顾一下小波变换:

数学公式我就不上了,估计上了也没人会认真看…

小波变换之所以诞生,是由于之前使用的傅里叶变换有一些缺点:

  • 傅立叶变换提取信号的频谱,需要利用信号的全部时域信息。
  • 傅立叶变换,没有随着时间的变化信号频率成分的变化情况。
  • 傅立叶变换积分作用平滑了非平稳信号的突变成分。

用大白话说就是:

  • 前两点:因为傅里叶变换是统计一段时间内的图像频率变化(高频低频波普啊什么的),他本身是不具备时间属性的,用户只知道这一段时间里面频域率总共发生了什么,但是先后顺序啊这种时间信息一概不知。
  • 第三点:傅里叶变换由于本身性质,对于偶然出现的一个超大值点,会被其影响整个时间段的频率图像分布,但是小波变换由于具有时间属性,就能够锁定这个突变点(再进行什么操作那是后话,反正是知道这个突变点是什么时候出现的)

傅里叶变换:

但是在这种情况,如图所示,傅里叶变换不能区分这两种图像区别:

自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。所以就引出了小波变换:

  • 首先,顾名思义,小波变换是对波进行了一些处理,把大波变成了小波的操作将无限长的三角函数基换成了有限长的会衰减的小波基。
  • 这就是为什么它叫“小波”,因为是很小的一个波嘛~
  • 小波还有一些好处,比如,我们知道对于突变信号,傅里叶变换存在吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号:

二、环境配置

python 小波库PyWavelets 直接在cmd中输入:

pip install PyWavelets

要运行PyWavelets所有测试还需要安装 Matplotlib 包

pip install Matplotlib.

如果已经安装,则会出现如下图示:

三、实验思路及过程(附图)

  1. 首先,用小波变换(随便选去一个小波基,我用的哈尔)对图像进行分解,得到高低频分量(其中高频有三个分量)。
#读取灰度图
img = cv2.imread('pic/house.jpg',0)#cA,cH,cV,cD 分别为近似分量(低频分量)、水平细节分量、垂直细节分量和对角细节分量
cA,(cH,cV,cD)=dwt2(img,'haar')#dwt2函数第二个参数指定小波基#打印语句
plt.subplot(232), plt.imshow(cA, 'gray'), plt.title('cA')
plt.subplot(233), plt.imshow(cH, 'gray'), plt.title('cH')
plt.subplot(234), plt.imshow(cV, 'gray'), plt.title('cV')
plt.subplot(235), plt.imshow(cD, 'gray'), plt.title('cD')

  1. 之后,由于噪声往往是高频信息,所以我打算先对高频分量设一个阈值,把过高的高频像素点置0(并不是灰度值置0,是频率值置0,因为经过小波变换之后,我实际测试,像素的值就不是0~255了,而是有正有负,绝对值越大频率越大,0是频率最低值),为此我写了一个函数用来专门去噪,之后再主函数中处理高频分量看看效果:
def tool_Denoising(inputGrayPic,value):result = inputGrayPicheight = result.shape[0]weight = result.shape[1]for row in range(height):for col in range(weight):result[row, col]     if (abs(result[row, col]) > value):print(abs(result[row, col]))result[row, col] = 0#频率的数值0为低频return result
VALUE = 60#处理水平高频
cH = tool_Denoising(cH,VALUE)#处理垂直高频
cV = tool_Denoising(cV,VALUE)#处理对角线高频
cD = tool_Denoising(cD,VALUE)#重构图像
rebuild = idwt2((cA,(cH,cV,cD)), 'haar')

能看出来,虽然通过修改高频分量,好像能重构的图片比原图强了一点点,但是效果很有限。而且可以发现大部分的噪声其实还是来自低频分量cA。(不知道是否能够得出结论,仅仅一次小波变换之后出来的低频分量并不完全是低频分量?)

  1. 随后我打算再对低频分量再进行一次小波变换,看看效果:

可以看出,这次的2阶低频分量(我姑且先用2阶这个词)就有比较明显的低频特征了,我打算大幅度舍去第二次变幻的高频细节,之后重构图像,试试效果:

#第二次小波变换
cA2,(cH2,cV2,cD2)=dwt2(cA,'haar')#dwt2函数第二个参数指定小波基
VALUE2 = 10
#处理水平高频
cH2 = tool_Denoising(cH2,VALUE2)
#处理垂直高频
cV2 = tool_Denoising(cV2,VALUE2)
#处理对角线高频
cD2 = tool_Denoising(cD2,VALUE2)
rebuild2 = idwt2((cA2,(cH2,cV2,cD2)), 'haar')
rebuild = idwt2((rebuild2,(cH,cV,cD)), 'haar')

最终的输入输出对比,也算是一定程度上完成了去噪(虽然我觉得也很像模糊),但是图案发浅,高频信息舍去过多这个问题最终我也没有解决。

四、源代码

说在前面,本次使用的是python的pywt包,文档入口:

https://pywavelets.readthedocs.io/en/latest/ref/index.html

import cv2
import numpy as np
from pywt import dwt2, idwt2
import matplotlib.pyplot as plt#用于显示图片##################################################################################
############################遍历图像,将高频点置0#################################
##################################################################################
def tool_Denoising(inputGrayPic,value):result = inputGrayPicheight = result.shape[0]weight = result.shape[1]for row in range(height):for col in range(weight):result[row, col]     if (abs(result[row, col]) > value):print(abs(result[row, col]))result[row, col] = 0#频率的数值0为低频return result
##################################################################################
##################################################################################
###################################################################################读取灰度图
img = cv2.imread('pic/house.jpg',0)#cA,cH,cV,cD 分别为近似分量(低频分量)、水平细节分量、垂直细节分量和对角细节分量
cA,(cH,cV,cD)=dwt2(img,'haar')#dwt2函数第二个参数指定小波基#打印语句
#plt.subplot(232), plt.imshow(cA, 'gray'), plt.title('cA')
#plt.subplot(233), plt.imshow(cH, 'gray'), plt.title('cH')
#plt.subplot(234), plt.imshow(cV, 'gray'), plt.title('cV')
#plt.subplot(235), plt.imshow(cD, 'gray'), plt.title('cD')#设置去噪阈值。因为噪音一般都是高频信息,遍历像素,将VALUE的像素点置0
VALUE = 60
#处理低频
#cA = tool_Denoising(cA,100)
#处理水平高频
cH = tool_Denoising(cH,VALUE)
#处理垂直高频
cV = tool_Denoising(cV,VALUE)
#处理对角线高频
cD = tool_Denoising(cD,VALUE)
#重构图像
rebuild = idwt2((cA,(cH,cV,cD)), 'haar')#第二次小波变换
cA2,(cH2,cV2,cD2)=dwt2(cA,'haar')#dwt2函数第二个参数指定小波基
VALUE2 = 10
#处理水平高频
cH2 = tool_Denoising(cH2,VALUE2)
#处理垂直高频
cV2 = tool_Denoising(cV2,VALUE2)
#处理对角线高频
cD2 = tool_Denoising(cD2,VALUE2)
rebuild2 = idwt2((cA2,(cH2,cV2,cD2)), 'haar')
rebuild = idwt2((rebuild2,(cH,cV,cD)), 'haar')plt.subplot(231), plt.imshow(img, 'gray'), plt.title('img')
plt.subplot(232), plt.imshow(cA, 'gray'), plt.title('cA')
plt.subplot(233), plt.imshow(cH, 'gray'), plt.title('cH')
plt.subplot(234), plt.imshow(cV, 'gray'), plt.title('cV')
plt.subplot(235), plt.imshow(cD, 'gray'), plt.title('cD')
plt.subplot(236), plt.imshow(rebuild, 'gray'), plt.title('rebuild')#打印图片
#plt.subplot(231), plt.imshow(img, 'gray'), plt.title('Input')
#plt.subplot(232), plt.imshow(cA2, 'gray'), plt.title('cA2')
#plt.subplot(233), plt.imshow(cH2, 'gray'), plt.title('cH2')
#plt.subplot(234), plt.imshow(cV2, 'gray'), plt.title('cV2')
#plt.subplot(235), plt.imshow(cD2, 'gray'), plt.title('cD2')
#plt.subplot(236), plt.imshow(rebuild, 'gray'), plt.title('rebuild')
plt.axis('off')
plt.show()

五、参考资料

单尺度二维离散小波重构(逆变换)idwt2
https://www.cnblogs.com/xixixing/p/5827599.html

【图像处理】python小波变换
https://blog.csdn.net/u011285477/article/details/104162355

形象易懂讲解算法I——小波变换
https://zhuanlan.zhihu.com/p/22450818

【数字图像处理4】小波变换 处理图像相关推荐

  1. 数字图像处理笔记-02(图像空域增强技术及联合运用)

    数字图像处理笔记-02(图像空域增强技术及联合运用) (一) 图像增强 1.1 基本概念 由于图像在传输或者处理过程中会引入噪声或使图像变模糊,从而降低了图像质量,甚至淹没了特 征,给分析带来了困难. ...

  2. 数字图像处理-DFTDCTWHT小波变换分解重构(Matlab)

    文章目录 数字图像处理-DFT&DCT&WHT&小波变换分解重构(Matlab) 基本的matlab图像处理函数的使用 代码块 运行效果 傅里叶变换(DFT) 对图像进行傅里叶 ...

  3. 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片点运算处理,包括图像灰度线性变换 ...

  4. 以窗口形式进行数字图像处理时,在图像边界处对超出图像边界的窗口内容的映射(对称)处理

    在数字图像处理时,我们经常会以窗口的形式进行相关的运算,如滤波处理,而在图像边界处,窗口可能太大以至于超出边界,这时候我们可以做一个映射(对称)处理,来补齐窗口中超出图像边界的部分.如下图,窗口大小是 ...

  5. 数字图像处理、拼接,图像静态滤镜(GPUImage/GPU加速) - Android

    图像滤镜处理的两种方式:RGB点乘运算:GPU的矩阵运算(效率更高).图片处理中的计算:RGBA~利用自带的方法修改色调,饱和度,亮度来修改图片:矩阵~利用矩阵计算得到新的矩阵修改图片. 几个图像像素 ...

  6. Matlab数字图像处理 实验3、图像边缘检测的计算机实现

    子曰:桃李不言,下自成蹊. 图 像 边 缘 检 测 的 计 算 机 实 现 图像边缘检测的计算机实现 图像边缘检测的计算机实现 P a r t . 0 实 验 目 的 仅 限 于 学 习 交 流 Pa ...

  7. 【数字图像处理】实验一图像基本变换(MATLAB实现)

    目录 一.实验意义及目的 二.实验内容 三.Matlab 相关函数介绍 四.参考代码 五.运行结果 六.实验要求 (1)将彩色图像采用不同的灰度化方法实现灰度化: (2)将彩色图像变换到 YCbCr. ...

  8. 数字图像处理(六)图像降噪处理

    1.噪声 1.1噪声分类 噪声是图像干扰的重要原因.一幅图像在实际应用中可能存在各种各样的噪声,这些噪声可能在传输中产生,也可能在量化等处理中产生. 根据噪声和信号的关系可将其分为三种形式:(f(x, ...

  9. matlab相位相关图像配准,数字图像处理,相位相关图像配准

    前言 图像配准是图像处理的基本任务之一,用于将不同时间.不同传感器.不同视角及不同拍摄条件下获取的关于同一目标或场景的两幅或多幅图像进行主要是几何意义上的匹配套和的过程.在对图像配准的研究过程中,大量 ...

  10. 【数字图像处理】实验一 图像的平移,缩放和旋转(vs2017+opencv)

    文章目录 一. 平移 1.思路 2.实现代码 二.缩放 1.思路 2.代码实现 三.旋转变换 1.思路 对文章内容如有异议欢迎在评论区提问 代码包: 数字图像平移.旋转.缩放 一. 平移 1.思路 新 ...

最新文章

  1. 关于研发效能提升的思考,每个P8以及以上都应该懂!
  2. 12 岁开始学编程,17 岁总结了 7 个重要教训!
  3. [黑马程序员五]:常用的T-SQL语句
  4. The “data“ option should be a function that returns a per-instance value in component definitions
  5. 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用
  6. github windows客户端
  7. Mysql索引介绍及常见索引的区别
  8. 功率驱动电路中元件的选择
  9. 3个月内通过7轮面试,程序员拿到谷歌offer后却被女友威胁......
  10. [设计模式-行为型]观察者模式(Observer)
  11. 【题解】(排序) —— POJ 0810:距离排序
  12. 【学习笔记】计算机导论之计算机硬件
  13. 我如何用 21 天在 GitHub 上获取 6300 个 Star?
  14. VS2012下基于Glut OpenGL glEdgeFlag示例程序:
  15. 怎样利用JDBC启动Oracle 自己主动追踪(auto trace)
  16. 浅析Linux下的task_struct结构体
  17. Java视频教程免费分享
  18. html投影电脑,如何将电脑内容显示到投影仪或电视上?详细教程奉上
  19. 网易涉暴力裁员引众怒 5大争议背后是否违法?
  20. linux curl证书错误,curl – SSL证书错误

热门文章

  1. /var/tmp和/tmp目录区别
  2. 明天要连续上班第7天
  3. 2010年最值得期待的10款手机客户端
  4. 赛威商业进销存管理系统
  5. 密大安娜堡计算机硕士,2020年密歇根大学安娜堡分校一年制硕士含金量
  6. 利用aspose-cells解决 excel预览的折叠问题
  7. 试说明在下列情况,用万用电表测量图P3.13的12端得到的电压各为多少
  8. 【JoJo的摄影笔记】重新来聊聊镜头
  9. 深度学习图像数据增广方法总结
  10. 解决chrome浏览器安装PageOffice后未生效