3D-DWT或者nD-DWT python下多维离散小波变换代码

参考资料:
https://www.pantechsolutions.net/image-processing-projects/matlab-code-for-3d-dwt-3-dimensonal-discrete-wavelet-transform
https://pywavelets.readthedocs.io/en/latest/

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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章