19

Pythonの画像に離散コサイン変換(およびその逆)を適用したいのですが、それを行うための最良の方法とその方法を考えています。PILとOpenCVを見てきましたが、まだ使い方がわかりません。

4

2 に答える 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 に答える