如何在 opencv 中使用离散余弦变换(DCT)
how use Discrete cosine transform(DCT) in opencv
dct在opencv中没有正确转换。
imf = np.float32(block)
dct = cv2.dct(imf)
[[154,123,123,123,123,123,123,136],
[192,180,136,154,154,154,136,110],
[254,198,154,154,180,154,123,123],
[239,180,136,180,180,166,123,123],
[180,154,136,167,166,149,136,136],
[128,136,123,136,154,180,198,154],
[123,105,110,149,136,136,180,166],
[110,136,123,123,123,136,154,136]]
这块图像,当使用上面显示的代码转换时
[162.3 ,40.6, 20.0...
[30.5 ,108.4...
这应该是结果,
[1186.3 , 40.6, 20.0...
[30.5, 108.4 ....
但我找到了这个结果。对于示例块,https://www.math.cuhk.edu.hk/~lmlui/dct.pdf
DCT 工作正常。你得到的和你期望的之间的区别是因为给出的特定示例实际上是在 M 而不是原始图像 I 上进行 DFT .在这种情况下,如论文所示,M = I - 128。你的例子中唯一的区别是你没有减去那部分,所以这些值都更大。在余弦或傅立叶变换中,第一个系数(有时称为 "DC offset")具有更高的值,因为您的图像值更大。但这就是为什么所有其他系数都相同的原因。如果你拍一张图像,你只是简单地从整个图像中添加或减去一些,变换的系数将是相同的,除了第一个。
来自DCT的标准定义:
你可以在这里看到,对于 k = 0 的第一个系数,在余弦函数内部,你只得到 0,cos(0) = 1。因此, X_0 如图所示,它只是所有 x_n 值的总和。通常这个值可以通过与 N 相关的东西进行缩放,因此它类似于 平均值 。这样做时,它与 X_0 项相关,这是一个 "DC offset",您会看到它被描述为 "mean value of the signal," 或换句话说,信号离 0 有多远。这对于 cosine/Fourier 变换系数之一非常有用,因为它可以完整地描述信号;所有 other 系数都描述了频率内容,因此它们没有说明值与 0 的距离,但第一个系数,DC 偏移,确实告诉你班次!
dct在opencv中没有正确转换。
imf = np.float32(block)
dct = cv2.dct(imf)
[[154,123,123,123,123,123,123,136],
[192,180,136,154,154,154,136,110],
[254,198,154,154,180,154,123,123],
[239,180,136,180,180,166,123,123],
[180,154,136,167,166,149,136,136],
[128,136,123,136,154,180,198,154],
[123,105,110,149,136,136,180,166],
[110,136,123,123,123,136,154,136]]
这块图像,当使用上面显示的代码转换时
[162.3 ,40.6, 20.0...
[30.5 ,108.4...
这应该是结果,
[1186.3 , 40.6, 20.0...
[30.5, 108.4 ....
但我找到了这个结果。对于示例块,https://www.math.cuhk.edu.hk/~lmlui/dct.pdf
DCT 工作正常。你得到的和你期望的之间的区别是因为给出的特定示例实际上是在 M 而不是原始图像 I 上进行 DFT .在这种情况下,如论文所示,M = I - 128。你的例子中唯一的区别是你没有减去那部分,所以这些值都更大。在余弦或傅立叶变换中,第一个系数(有时称为 "DC offset")具有更高的值,因为您的图像值更大。但这就是为什么所有其他系数都相同的原因。如果你拍一张图像,你只是简单地从整个图像中添加或减去一些,变换的系数将是相同的,除了第一个。
来自DCT的标准定义:
你可以在这里看到,对于 k = 0 的第一个系数,在余弦函数内部,你只得到 0,cos(0) = 1。因此, X_0 如图所示,它只是所有 x_n 值的总和。通常这个值可以通过与 N 相关的东西进行缩放,因此它类似于 平均值 。这样做时,它与 X_0 项相关,这是一个 "DC offset",您会看到它被描述为 "mean value of the signal," 或换句话说,信号离 0 有多远。这对于 cosine/Fourier 变换系数之一非常有用,因为它可以完整地描述信号;所有 other 系数都描述了频率内容,因此它们没有说明值与 0 的距离,但第一个系数,DC 偏移,确实告诉你班次!