我试图在此图像上以4x4块运行DFT(仔细观察,它很小)它可能有点太小而无法看到,但它是一个4x12像素的图像。第一个4x4正方形是棋盘图案,每个正方形有一个像素,第二个4x4正方形是相同的图案,每个正方形有两个像素,最后的4x4正方形是黑色正方形。
我遇到的问题是我得到的频率成分并不是我所期望的。例如,对于第一个方格,我希望在矩阵中有一个DC分量,但它不存在。我想我一定做错了,但我是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);
}
}
}