3D-DWT或者nD-DWT python下多維離散小波變換程式碼
阿新 • • 發佈:2019-01-31
3D-小波分解
這個示例是將一個三通道的RGB圖片看做一個時長為3的視訊序列來做3維的小波分解,通常2D-DWT的一級分解是將一張灰度圖分解為四個分量,而3D-DWT的以及分解是將一段視訊序列分解為8個分量。
import numpy as np
import cv2
import matplotlib.pyplot as plt
import pywt
import pywt.data
from skimage import io,data,color
from PIL import Image
original=cv2.imread('/home/jinbeibei/Pictures/1781985300.jpg' )
print(original.shape)
#original=color.rgb2grey(original)
#print(original.shape)
# Wavelet transform of image, and plot approximation and details
titles = ['A', ' B',
'C', 'D','E','F','G','H']
coeffs2 = pywt.dwtn(original,wavelet='haar',mode='symmetric',axes=None)
print(len(coeffs2))#the len of dict is 4 for a gray image
i=0
fig = plt.figure(figsize=(12, 3))
for value in coeffs2.values():
print(type(value))#ndarray
print(value.shape)#(493,302,2)
ax = fig.add_subplot(1, 16, i+1)
ax.imshow(value[:,:,0], interpolation="nearest", cmap=plt.cm.gray)
ax.set_title(titles[i-1], fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
i=i+1
print(i)
print(titles[i-1])
ax.imshow(value[:, :, 1], interpolation="nearest", cmap=plt.cm.gray)
ax.set_title(titles[i-1], fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
fig.tight_layout()
plt.show()