我正在尝试在此图像上以 4x4 块运行 DFT(仔细观察,它很小)它可能有点太小而无法看到,但它是一个 4x12 像素的图像。第一个 4x4 正方形是棋盘图案,每个正方形有一个像素,第二个 4x4 正方形是相同的图案,每个正方形有两个像素,最后一个 4x4 正方形是黑色正方形。
我遇到的问题是我得到的频率分量根本不是我所期望的。例如,对于第一个正方形,我希望矩阵中有一个直流分量,但它不存在。我想我一定做错了什么,但我是 EMGU 的新手,所以我不确定是什么。下面是我的代码。
using (Image<Bgr, byte> image = new Image<Bgr, byte>(Openfile.FileName))
using (Image<Gray, float> gray = image.Convert<Gray, float>())
{
int numRectanglesPerRow = image.Width / WIDTH;
int numRectanglesPerColumn = image.Height / HEIGHT;
for (int i = 0; i < numRectanglesPerColumn; i++)
{
for (int j = 0; j < numRectanglesPerRow; j++)
{
Rectangle rectangle = new Rectangle(WIDTH * j, HEIGHT * i, WIDTH, HEIGHT);
Image<Gray, float> subImage = gray.Copy(rectangle);
Matrix<float> dft = new Matrix<float>(subImage.Rows, subImage.Cols, 2);
CvInvoke.cvDFT(subImage, dft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, -1);
//The Real part of the Fourier Transform
Matrix<float> outReal = new Matrix<float>(subImage.Size);
//The imaginary part of the Fourier Transform
Matrix<float> outIm = new Matrix<float>(subImage.Size);
CvInvoke.cvSplit(dft, outReal, outIm, IntPtr.Zero, IntPtr.Zero);
}
}
}