Pythonの画像に離散コサイン変換(およびその逆)を適用したいのですが、それを行うための最良の方法とその方法を考えています。PILとOpenCVを見てきましたが、まだ使い方がわかりません。
質問する
30165 次
2 に答える
11
OpenCVから:
DCT(src、dst、flags)→なし 1Dまたは2Dの順方向または逆方向の離散コサイン変換を実行します 浮動小数点配列。 パラメーター: src(CvArr)–ソース配列、実際の1Dまたは2D配列 dst(CvArr)–ソースと同じサイズおよび同じタイプの宛先配列 フラグ(int)– 変換フラグ、次の値の組み合わせ CV_DXT_FORWARDは、1Dまたは2Dの順方向変換を実行します。 CV_DXT_INVERSEは、1Dまたは2Dの逆変換を行います。 CV_DXT_ROWSは、のすべての個々の行の順方向または逆方向の変換を実行します 入力行列。このフラグにより、ユーザーは複数のベクトルを同時に変換できます オーバーヘッドを減らすために使用できます(これは時々数倍大きくなります 処理自体よりも)、3D以上の高次元変換などを行います。
使用例を示します。
DCTはscipy.fftpackでも利用できます。
于 2011-08-18T16:37:48.627 に答える
10
例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
ドメイン内)の小さなスライスをプロットすると、次のような図が得られます(チェッカーボードパターンを使用)。
于 2020-03-21T23:53:14.963 に答える