2016-01-29 39 views
3

我可以使用dct來提取.png圖像的功能嗎? 或者dct只適用於jgp?因爲我的數據集使用PNG格式。如何使用2d dct獲取png圖像的功能?

我讀過幾本期刊,發現2d dct可以用來提取基於係數的特徵。我需要神經Neutwork的功能。 我試過基本代碼做2D DCT(使用MATLAB):

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

但是,我仍然不知道,這個代碼真的給我相應的功能,我需要。你有任何其他代碼的建議嗎?

而且爲什麼'dctmtx'函數爲不同的圖像提供相同的係數? *以前感謝。

回答

1

首先,PNG並不重要,只要你不做一些alpha通道處理等,閱讀PNG就像閱讀JPG,因爲你正在做你的DCT在圖像的矩陣表示 - 而不是文件。

您的代碼:

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

應該給你零的2D-DCT由64圖像填充64。

要檢查你可以嘗試這樣的:因爲DCT2使用DCT在覈心實現

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

至於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對於普通圖像來說是非常好的和高效的。

+0

是的,如果你的圖像是64像素64像素 – GameOfThrows

+0

非常感謝你的解釋@GameOfThrows我將使用特徵提取用於字符識別目的。那麼,它是d = dct2(b,[64 64]);足以獲得適當的DCT係數作爲圖像的特徵? –

+0

那麼,輸入圖像必須已經是64x64像素了? –