1

この画像に対して 4x4 ブロックで DFT を実行しようとしています (よく見ると、小さいです)ここに画像の説明を入力小さすぎて見えないかもしれませんが、4x12 ピクセルの画像です。最初の 4x4 の正方形は、各正方形が 1 つのピクセルを持つチェッカーボード パターンで、2 番目の 4x4 の正方形は、各正方形が 2 つのピクセルを持つ同じパターンで、最後の 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);
        }
    }
}
4

0 に答える 0