как получить изображение png с помощью 2d dct?

Могу ли я использовать dct для извлечения функции изображений .png? Или dct только для jgp? Поскольку мой набор данных использует формат png.

Я прочитал несколько журналов и обнаружил, что 2d dct можно использовать для извлечения функции на основе коэффициента. Мне нужны функции для Neural Neutwork. Я пробовал базовый код для выполнения 2d dct (используя Matlab):

i = imread ('AB1.png');
b = im2double (x);
d = dct2 (b, [64 64]); 

но я все еще не уверен, что этот код действительно дает мне подходящую функцию, которая мне нужна. есть ли у вас какие-либо рекомендации других кодов?

А также почему функция dctmtx дает мне одинаковый коэффициент для разных изображений? *Спасибо перед.


person Ana Ain    schedule 29.01.2016    source источник


Ответы (1)


Во-первых, png не имеет значения, пока вы не выполняете какую-либо обработку альфа-канала и т. д., чтение png точно так же, как чтение jpg, поскольку вы выполняете DCT для матричного представления изображения, а не для файла.

Ваш код:

d = dct2 (b, [64 64]); 

должен дать вам 2d-DCT заполненного нулями изображения 64 на 64.

Чтобы проверить, вы можете попробовать что-то вроде:

d = dct(dct(b.').') %//If you want to pad your image with zero first.

поскольку dct2 реализован с использованием dct в ядре.

что касается dctmtx - он должен дать вам матрицу dct, которую вы можете применить к своей матрице изображения, чтобы получить результат dct вашего изображения (таким образом, результат, сгенерированный dctmtx, должен быть одинаковым для любого изображения одинакового размера). Matlab дает наглядный пример:

A = im2double(imread('rice.png')); %//your image
D = dctmtx(size(A,1));  %//Generate a DCT matrix of the SIZE of your image
dct = D*A*D';  %//Obtain 2D - DCT 
figure, imshow(dct)  %//Result transform

Все три примера должны дать вам одинаковый результат.

И, наконец, с точки зрения алгоритма/преобразования наилучшего извлечения признаков это действительно зависит от того, чего вы пытаетесь достичь — распознавания/улучшения/шифрования, но в целом DCT очень хорош и эффективен для обычных изображений.

person GameOfThrows    schedule 29.01.2016
comment
Большое спасибо за объяснение @GameOfThrows. Я буду использовать извлечение функций для распознавания символов. Итак, d = dct2 (b, [64 64]); достаточно, чтобы получить соответствующий коэффициент DCT как особенности изображения? - person Ana Ain; 04.02.2016
comment
да, потому что, если ваше изображение больше 64 на 64, применение dct2(image, [64 64]) урежет изображение до 64 на 64 пикселя (а также дополнит его нулями). Альтернативой является просто использование размера вашего изображения, что-то вроде dct2(image, size(image)) - person GameOfThrows; 04.02.2016