DFT与EMGU / OpenCV - 我做错了什么

时间:2013-04-23 13:11:03

标签: fft emgucv

我试图在此图像上以4x4块运行DFT(仔细观察,它很小)enter image description here它可能有点太小而无法看到,但它是一个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);
        }
    }
}

0 个答案:

没有答案