1

我正在尝试在此图像上以 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);
        }
    }
}
4

0 回答 0