【图像处理】python小波变换

 

## 二维小波变换(一维和n维类似):

# 单层变换 pywt.dwt2

pywt.dwt2(data, wavelet, mode=’symmetric’, axes=(-2, -1))
data: 输入的数据
wavelet:小波基
mode: 默认是对称的
return: (cA, (cH, cV, cD))要注意返回的值,分别为低频分量,水平高频、垂直高频、对角线高频。高频的值包含在一个tuple中。


#单层逆变换 pywt.idwt2

pywt.idwt2(coeffs, wavelet, mode, axes)
coeffs: 经小波变换后得到的各层的系数
wavelet:小波基

# 多尺度变换 wavedec2

pywt.wavedec2(data, wavelet, mode=’symmetric’, level=None, axes=(-2, -1))
data: 输入的数据
wavelet:小波基
level: 尺度(要变换多少层)
return: 返回的值要注意,每一层的高频都是包含在一个tuple中,例如三层的话返回为 [cA3, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)]

如下是一个简单的例子: 

import cv2
import numpy as np
from pywt import dwt2, idwt2

# 读取灰度图
img = cv2.imread('lena.jpg',0)

# 对img进行haar小波变换:
cA,(cH,cV,cD)=dwt2(img,'haar')

# 小波变换之后,低频分量对应的图像:
cv2.imwrite('lena.png',np.uint8(cA/np.max(cA)*255))
# 小波变换之后,水平方向高频分量对应的图像:
cv2.imwrite('lena_h.png',np.uint8(cH/np.max(cH)*255))
# 小波变换之后,垂直平方向高频分量对应的图像:
cv2.imwrite('lena_v.png',np.uint8(cV/np.max(cV)*255))
# 小波变换之后,对角线方向高频分量对应的图像:
cv2.imwrite('lena_d.png',np.uint8(cD/np.max(cD)*255))

# 根据小波系数重构回去的图像
rimg = idwt2((cA,(cH,cV,cD)), 'haar')
cv2.imwrite('rimg.png',np.uint8(rimg))

 

 

【参考】

[1] 小波变换图像分解

[2] 小波变换对图像的分解与重构(含matlab代码)

[3] [Python]小波变化库——Pywalvets 学习笔记

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值