python opencv 使用小波变换pywt.dwt2将图像分解成cA, (cH, cV, cD) 如何将高频部分合成一个图像 并对其使用中值滤波
时间: 2024-01-29 16:02:46 浏览: 146
opencv小波变换代码
5星 · 资源好评率100%
要将高频部分合成一个图像,需要先将 cH, cV, cD 三个高频部分数组合并成一个新的数组,可以使用 `numpy.concatenate` 函数实现。具体代码如下:
```python
import cv2
import numpy as np
import pywt
# 读取图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# 小波变换,分解成 cA, (cH, cV, cD)
cA, (cH, cV, cD) = pywt.dwt2(img, 'haar')
# 将高频部分 cH, cV, cD 合并成一个数组
high_freq = np.concatenate((cH[..., None], cV[..., None], cD[..., None]), axis=2)
# 对高频部分进行中值滤波
high_freq_filtered = cv2.medianBlur(high_freq.astype(np.uint8), 3)
# 将低频部分 cA 和经过中值滤波的高频部分合并
img_reconstructed = pywt.idwt2((cA, high_freq_filtered), 'haar')
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Reconstructed', img_reconstructed.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`np.concatenate((cH[..., None], cV[..., None], cD[..., None]), axis=2)` 将 cH, cV, cD 三个数组按照第三个维度合并成一个新的数组,`cv2.medianBlur(high_freq.astype(np.uint8), 3)` 对高频部分进行中值滤波,`pywt.idwt2((cA, high_freq_filtered), 'haar')` 将低频部分 cA 和经过中值滤波的高频部分合并,得到重构后的图像。
阅读全文