首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DCT的直觉与解释

DCT的直觉与解释
EN

Stack Overflow用户
提问于 2018-05-17 05:26:34
回答 1查看 191关注 0票数 0

我试图在角星中实现MNIST图像的DCT。对于同样的问题,我有几个问题:

  1. 当我试图可视化MNIST数据集的DCT系数时,我会看到一幅背景为黑色的图像和一个白色图案,表示输入图像的频率信息。为什么颜色倒置在意义上的黑色背景和白色数字,而不是原来的图像有白色背景和黑色数字?
  2. 如果我采取DCT系数的输入图像,它给我一个更强的模式(检查所附的图像)代表原始图像,而不是采取DCT只一次。为什么会这样呢?

这是我的密码:

代码语言:javascript
复制
import keras
from keras import backend as K
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, Add
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.layers.core import Lambda
from keras.datasets import mnist
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

model = Sequential()
model.add(Lambda(lambda x: K.tf.spectral.dct(K.transpose(K.tf.spectral.dct(K.transpose(x), type=2, norm='ortho')), type=2, norm='ortho') ,input_shape=(28, 28,1), output_shape=(28,28,1)))
model.add(Lambda(lambda x: K.tf.spectral.dct(K.transpose(K.tf.spectral.dct(K.transpose(x), type=2, norm='ortho')), type=2, norm='ortho'),input_shape=(28, 28,1), output_shape=(28,28,1)))

X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)

viz_dct = model.predict(X_train[:len(X_train)//2])

def get_reconstructed_image(coeff):
    coeff = coeff*255
    img = Image.fromarray(coeff)
    return img

print(viz_dct.shape)
viz_dct = viz_dct.reshape(viz_dct.shape[0],viz_dct.shape[1],viz_dct.shape[2])
plt.imshow(get_reconstructed_image(viz_dct[5]))

以下是上述程序的输出图像:

原始图像:

在第一次dct之后:

在第二次dct之后:

EN

回答 1

Stack Overflow用户

发布于 2018-05-24 21:44:31

通常情况下,图像值是8位DCT输出的8位是16位。拍摄一幅图像,并在上面做一个DCT,然后显示它,很可能会导致你有超出范围的像素值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50383888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档