如何使用2D DCT获取PNG图像的特征?

3

我能用离散余弦变换(DCT)来提取.png图像的特征吗?还是DCT只适用于JPG格式?因为我的数据集使用PNG格式。

我读了几篇论文,发现2D DCT可以用于基于系数的特征提取。我需要这些特征来进行神经网络训练。我已经尝试了一些基本代码来进行2D DCT(使用Matlab):

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

但是,我仍然不确定这个代码是否真的给我所需的功能。你有没有其他代码的推荐?

而且为什么'dctmtx'函数会给我不同图像相同的系数? *先谢谢了。

1个回答

1

首先,只要你不进行一些alpha通道处理等操作,png并不重要,读取png就像读取jpg一样,因为你正在对图像的矩阵表示进行DCT - 而不是文件。

你的代码:

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

应该给出零填充的64x64图像的2D-DCT。

为了检查,您可以尝试类似以下内容的操作:

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对于普通图像非常好且高效。

非常感谢您的解释@GameOfThrows,我将使用特征提取进行角色识别。那么,使用d = dct2(b,[64 64])就足以获得图像的适当DCT系数作为特征吗? - Ana Ain
是的,因为如果您的图像大于64x64,则应用dct2(image,[64 64])将截断图像为64x64像素(并且还会用零填充它)。另一种选择是只使用您的图像大小,例如dct2(image,size(image))。 - GameOfThrows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接