Интуиция и интерпретация DCT - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь реализовать DCT изображений MNIST в керасах.У меня есть пара вопросов относительно того же:

  1. Когда я пытаюсь визуализировать коэффициенты DCT набора данных MNIST, я вижу изображение с черным фоном и рисунок белого цвета, представляющийИнформация о частоте входного изображения.Почему цвет инвертируется в смысле черного фона и белых чисел в отличие от исходных изображений, имеющих белый фон и черные цифры?
  2. Если я возьму DCT из коэффициентов DCT входного изображения, это даст мне более сильный образец(проверьте прилагаемые изображения), представляющие исходное изображение, по сравнению с принятием DCT только один раз.Почему это так?

Вот мой код:

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]))

Ниже приведены выходные изображения из вышеуказанной программы:

Исходное изображение:

This is the original image from dataset

После 1-го цикла:

This is the output of 1st dct shown as an image

После 2-го цикла:

Output after the 2nd dct

1 Ответ

0 голосов
/ 25 мая 2018

Как правило, значения изображения составляют 8 бит, выход DCT из 8 бит составляет 16 бит.Снятие изображения и выполнение DCT с последующим его отображением может привести к тому, что значения пикселей будут вне диапазона.

...