图像处理的两种变换:2D-DWT和Gabor变换

news2024/11/23 22:44:59

 pywt官方API文档: 2D Forward and Inverse Discrete Wavelet Transform 

目录

1. 二维离散小波变换2D-DWT

1.1 二维离散小波变换的相关公式

1.2 使用pywt实现2D-DWT

2.  窗口傅里叶变换Gabor


1. 二维离散小波变换2D-DWT

DWT(Discrete Wavelet Transformation)代表离散小波变换。

作用:对于图像来说,它能够将图像变换为一系列的小波系数并将这些系数进行高效的压缩和储存,并且小波的粗略边缘消除了DCT压缩普遍具有的方块效应从而可以更好地还原和表现图像。

 

1.1 二维离散小波变换的相关公式

(1)尺度函数(Father Scaling Function)和小波函数(Mother Wavelet Function)

一种常见的尺度函数,哈尔尺度函数:

一种常见的小波函数,哈尔小波函数:

 

(2) 二维尺度函数和二维小波函数

其中, \varphi(x)是给定的一维尺度函数,\psi (x)是给定的一维小波函数,\varphi(x,y)是一个二维尺度函数,\psi^H\psi^Y\psi^D分别是沿水平边缘、垂直边缘、对角线方向变化的二维小波函数。

(3) 尺度和平移基函数

 

(4) 二维离散小波变换

 

其中, W_\varphi (0,m,n)是图像f(x,y)的低频子带, W_\varphi ^i(0,m,n)i=\{H,V,D\}代表三种不同方向的高频子带,M,H是图像f(x,y)的长和宽,f(x,y)是原图像的离散形式,\varphi (x,y)\psi (x,y)是尺度和平移基函数。

(5) 反二维离散小波变换

四种子带图像相加。

1.2 使用pywt实现2D-DWT

(1)pywt.dwt2

作用:进行2D-DWT变换,将原图像分解为四种子带图像。

pywt.dwt2(data, wavelet, mode='symmetric', axes=(-2, -1))

data: 输入的数据
wavelet:小波函数
mode: 默认是对称的


return: (cA, (cH, cV, cD))要注意返回的值,分别为低频分量,水平高频、垂直高频、对角线高频。高频的值包含在一个tuple中。

import numpy as np
from matplotlib import pyplot as plt
import pywt
import PIL

img = PIL.Image.open("1.png")
img = np.array(img)
LLY,(LHY,HLY,HHY) = pywt.dwt2(img, 'haar')
plt.subplot(2, 2, 1)
plt.imshow(LLY, cmap="Greys")
plt.subplot(2, 2, 2)
plt.imshow(LHY, cmap="Greys")
plt.subplot(2, 2, 3)
plt.imshow(HLY, cmap="Greys")
plt.subplot(2, 2, 4)
plt.imshow(HHY, cmap="Greys")
plt.show()

 (2) pywt.idwt2

作用:根据分解的四种子带图像,重构原图像。

pywt.idwt2(coeffs, wavelet, mode='symmetric', axes=(-2, -1))


coeffs: 经小波变换后得到的各层的系数
wavelet:小波函数

mode: 默认是对称的

axes:计算DWT的轴

import numpy as np
from matplotlib import pyplot as plt
import pywt
import PIL

img = PIL.Image.open("1.png")
img = np.array(img)
LLY,(LHY,HLY,HHY) = pywt.dwt2(img, 'haar')

# 根据小波系数重构回去的图像
rimg = idwt2((LLY,(LHY,HLY,HHY)), 'haar')

plt.imshow(rimg, cmap="Greys")
plt.show()

重构图像:

 

 

2.  窗口傅里叶变换Gabor

作用:Gabor滤波器可以在频域上不同尺度、不同方向上提取相关的特征。另外,Gabor函数与人眼的作用相仿,所以经常用作纹理识别上,并取得了较好的效果。

(1) skimage.filters.gabor

作用:使用 Gabor 滤波器内核的实部虚部过滤图像。

skimage.filters.gabor(image, frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0, mode='reflect', cval=0) 

参数

    image:二维阵列,输入图像。
    frequency:浮点数,调和函数的空间频率。以像素为单位指定。
    theta:浮点数,可选,以弧度表示的方向。如果为 0,则谐波在 x 方向。
    bandwidth:浮点数,可选,滤波器捕获的带宽。

    sigma_x, sigma_y:浮点数,可选,x- 和 y-directions 的标准偏差。
    n_stds:标量,可选,内核的线性大小是 n_stds(默认为 3)标准差。
    offset:浮点数,可选,以弧度为单位的谐波函数的相位偏移。
    mode:{‘constant’, ‘nearest’, ‘reflect’, ‘mirror’, ‘wrap’},可选,用于将图像与内核卷积的模式
    cval:标量,可选,填充过去输入边的值

返回

    real, imag:数组

(2)取模

skimage.filters.gabor()函数返回的是图像变换后的实部和虚部,在图像识别领域一般使用其模作为图像特征。

import matplotlib.pyplot as plt
from skimage import filters,io,color
import numpy as np

filename='1.png'
img = io.imread(filename)#读取图像

#调用gabor函数
real, imag = filters.gabor(img, frequency=1.5,theta=45,n_stds=5)
#取模图像
img_mod=np.sqrt(real.astype(float)**2+imag.astype(float)**2)
#图像显示
plt.figure()
plt.subplot(2,2,1)
plt.imshow(img,cmap='gray')
plt.subplot(2,2,2)
plt.imshow(img_mod,cmap='gray')
plt.subplot(2,2,3)
plt.imshow(real,cmap='gray')
plt.subplot(2,2,4)
plt.imshow(imag,cmap='gray')
plt.show()
​

滤波效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c语言通讯录——静态版本(带详细文字解释)

1.定义用于存储一个人信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体(struct)类型,用于存储有关一个人的信…

MIAOYUN“一云多芯”全栈信创解决方案获认可!

信创,即信息技术产业创新,是数据安全、网络安全的基础,也是新基建的重要组成部分。信创产业发展已经成为经济数字化转型、提升产业链发展的关键,促进信创产业在本地落地生根,带动传统IT信息产业转型,构建区…

使用POI将excel文件导入到数据库

概要 随着时代变化,有的需求也会越来越多,例如:有的文件上千条数据需要导入数据库不可能手动一条条导入吧?太浪费时间了!所以需要编写程序让程序来导入 整体架构流程 我这里使用的是springbootmybatisMVC的项目架构…

接口测试流程、测试点和测试工具

目录 前言: 一、什么情况下开展接口测试? 二、如何进行接口测试 三、接口测试用例设计 四、接口测试工具 前言: 接口测试是一种重要的测试类型,用于验证应用程序接口的功能、性能和可靠性。 一、什么情况下开展接口测试&am…

AtomicInteger源码

介绍 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,…

大坝渗流监测的目的和意义

​  大坝渗流监测是对坝体内渗流场进行的监测,是确保大坝安全运行的重要手段。通过监测,可以掌握渗流场的变化规律,并根据渗流场的变化趋势预测坝体、坝基可能出现的问题。通常根据渗漏量与渗流量两个指标来进行监测,即渗漏量小…

【ndarry的基本操作】——numpy03

目录索引 基本索引和切片:普通索引:省略索引:多省略索引:间隔索引: 形态变换操作:reshape():resize():transpose():*通过参数进行转置:* flatten()&#xff1…

usb转8路串口模块

开源USB转8路串口PCB设计 文章目录 开源USB转8路串口PCB设计1. 简介2. 说明3. 一种跨电脑跨USB口的端口号自动识别方法4.开源地址 今天给大家介绍一款USB转8路串口的PCB设计,并提供一种跨电脑跨USB口的端口号自动识别方法。 1. 简介 芯片采用沁恒的CH348Q&#xff…

Kotlin Jetpack Compose - 实现Tab布局

Tab布局是一种常见的UI设计,它允许用户在不同的视图或数据集之间切换。我们将使用Jetpack Compose的 TabRow 和 ScrollableTabRow 组件来实现这个布局。 一、基本的Tab布局——TabRow 二、滚动的Tab布局——ScrollableTabRow 组件 三、自定义Tab组件 一、基本的T…

音视频数据处理-H265/HEVC视频码流分析

一、H265概述 H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行…

chatgpt赋能python:Python自动化定位元素的方法详解

Python自动化定位元素的方法详解 作为一名Python编程经验丰富的工程师,我经常需要用到自动化定位元素的方法。今天,我想与大家分享一下在Python中如何自动化定位元素,以帮助那些想要进行Web自动化测试的开发者们。 什么是自动化定位元素 在…

chatgpt赋能python:Python聊天界面:开发高效且易于使用的消息应用

Python聊天界面:开发高效且易于使用的消息应用 Python是一种十分流行的编程语言,最近几年来,这种语言在GUI应用程序开发方面也越来越受欢迎。在本篇文章中,我们将介绍如何使用Python开发一个高效且易于使用的消息应用程序——聊天…

chatgpt赋能python:Python自动化定位——解放SEO员工的双手

Python自动化定位——解放SEO员工的双手 SEO(Search Engine Optimization)是现代数字营销中必不可少的一环。面对庞大的网络世界,SEO员工们日复一日地进行着关键词排名、页面跳转、链接检测等重复且繁琐的工作。而Python作为一种功能强大、易…

chatgpt赋能python:Python自动执行:提高效率,增强灵活性

Python自动执行: 提高效率,增强灵活性 随着时代进步,人们日常生活中越来越依赖计算机和网络技术,而在编程领域,Python语言作为一种高效、可读性好、易学易用的语言,得到了广泛应用。其中,Pytho…

【算法之栈与队列I】leetcode239. 滑动窗口最大值

232.用栈实现队列 力扣题目链接 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并…

使用netwox 的实例进行ARP地址解析协议分析【网络工程】(保姆级图文)

目录 1. netwox 构造 ARP 报文使用 netwox 工具构造 ARP 包。1) 查看 netwox 所在主机默认的 ARP 包的相关信息,执行命令如下:2) 构造 ARP 请求包,请求目标主机 192.168.43.95,执行命令如下:3) 为了验证构造的 ARP 请求…

IDEA(2021.3.3) 登录Github copilot最新版本报错解决

"Request sign ln Initiate failed with message:read ECONNRESET, request id: 6, error code:-32603 " .在获得github认证后的登录设备验证阶段弹出。此处应该为login 弹出异常,方法一:先使用Github 520进行动态替换,打开自己hos…

霍夫变换椭圆检测(matlab仿真与图像处理系列第2期)

概述 椭圆检测是图像处理中的一个重要问题,其目的是从图像中检测出可能存在的椭圆。在实际的应用中,椭圆常常被用来描述物体的形状或者得到物体的尺寸信息。 传统的椭圆检测方法通常采用二维Hough变换,在求解过程中需要处理大量的数据,并且计算复杂度高,导致速度较慢,…

linux系统grep文本三剑客之一

文章目录 一、grep常用选项二、正则表达式三、sort命令四、tr命令五、cut命令六、split命令七、paste命令八、正则表达式总结 一、grep常用选项 grep:文本三剑客之一,对文本内容进行过滤,支持正则表达式,针对行来进行处理。 -m&a…

【C++】 Qt-信号与槽

文章目录 基本概念添加信号与槽方法一方法二 自定义信号与槽CheckBox自定义QMessageBox自定义信号 信号与槽多对多一个信号连接多个槽多个信号连接一个槽一个信号连接一个信号连接一个槽 断开连接方法一方法二判断是否连接成功 基本概念 信号(signal)和…