gpt4 book ai didi

scipy - 使用 SciPy DCT 函数创建 2D DCT-II

转载 作者:行者123 更新时间:2023-12-04 01:17:55 25 4
gpt4 key购买 nike

我正在labview中创建一个2D DCT-II,但希望能够检查我的输出是否正确。 SciPy 有一个很好的 DCT 函数,它默认为 DCT-II 但为 1D。

我想让它适用于二维数组。为此,必须将 DCT 应用于列,然后必须再次将 DCT 应用于此结果的行。

我不确定我想用什么功能来做到这一点。我试过 np.rot90 将 numpy 数组逆时针旋转 90 度,如下所示:

import numpy as np
from scipy.fftpack import dct

a = np.array([[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0]])

b = dct(np.rot90(dct(a),3))

但是,这会输出以下内容:
array([[ 1152.        ,     0.        ,     0.        ,     0.        ,
0. , 0. , 0. , 0. ],
[ -412.30867345, 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ -43.10110726, 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ -12.85778584, 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[ -3.24494866, 0. , 0. , 0. ,
0. , 0. , 0. , 0. ]])

我认为 rot90 不是做我想做的事情的正确功能,也许有更好的功能?

最佳答案

我不认为旋转是您想要的,因为它将行转换为列,但它也会混淆数据的顺序。使用 np.transpose反而。

要首先按列应用 dct,然后按行应用,您可以执行以下操作:

dct(dct(a.T).T)

尾随 .T相当于 np.transpose .请注意在对列进行操作后如何撤消转置,以使返回再次按行对齐。

我不认为你应用 dct 的顺序,即列然后行 vs. 行然后列,有什么不同,但你可以得到行然后列:
dct(dct(a).T).T

关于scipy - 使用 SciPy DCT 函数创建 2D DCT-II,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com