我想用 Python 对图像应用离散余弦变换(以及反变换),我想知道什么是最好的方法以及如何做。我看过 PIL 和 OpenCV,但我仍然不明白如何使用它。
最佳答案
scipy.fftpack
示例:
from scipy.fftpack import dct, idct
# implement 2D DCT
def dct2(a):
return dct(dct(a.T, norm='ortho').T, norm='ortho')
# implement 2D IDCT
def idct2(a):
return idct(idct(a.T, norm='ortho').T, norm='ortho')
from skimage.io import imread
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pylab as plt
# read lena RGB image and convert to grayscale
im = rgb2gray(imread('images/lena.jpg'))
imF = dct2(im)
im1 = idct2(imF)
# check if the reconstructed image is nearly equal to the original image
np.allclose(im, im1)
# True
# plot original and reconstructed images with matplotlib.pylab
plt.gray()
plt.subplot(121), plt.imshow(im), plt.axis('off'), plt.title('original image', size=20)
plt.subplot(122), plt.imshow(im1), plt.axis('off'), plt.title('reconstructed image (DCT+IDCT)', size=20)
plt.show()
此外,如果绘制一小部分 2D DCT
系数数组 imF(在 log
域中),您将得到如下图(带有棋盘格模式):
关于python - 如何在 Python 中将 DCT 应用于图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7110899/