Каков минимальный код для поиска преобразования Фурье изображения в EmguCV.3.1.0.1? - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу найти FT изображения и показать его величину и фазовый спектр в EmguCV.3.1.0.1.

Я пытался что-то вроде следующего:

public partial class Form1 : Form
{
    const string path = @"lenagr.png";
    Image<Bgr, float> image;

    public Form1()
    {
        InitializeComponent();

        image = new Image<Bgr, float>(path);

        pictureBox1.Image = image.Bitmap;
    }

    private void button1_Click(object sender, EventArgs e)
    {            
        Mat dft = new Mat(image.Size, DepthType.Default, 2);
        CvInvoke.Dft(image, dft, DxtType.Forward, image.Rows);

        Mat[] images = dft.Split();

        //Show The Data   
        //Image<Bgr, float> im2 = dft.ToImage<Bgr, float>();
        pictureBox2.Image = images[0].Bitmap;
    }
}

Этот исходный код останавливает приложение.

Итак, каков абсолютно минимальный код для поиска преобразования Фурье изображения в EmguCV.3.1.0.1?

Примечание: Следующий исходный код даже не компилируется в EmguCV.3.1.0.1. И это выглядит много работы.

Image<Gray, float> image = new Image<Gray, float>(open.FileName);
IntPtr complexImage = CvInvoke.cvCreateImage(image.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 2);

CvInvoke.cvSetZero(complexImage);  // Initialize all elements to Zero
CvInvoke.cvSetImageCOI(complexImage, 1);
CvInvoke.cvCopy(image, complexImage, IntPtr.Zero);
CvInvoke.cvSetImageCOI(complexImage, 0);

Matrix<float> dft = new Matrix<float>(image.Rows, image.Cols, 2);
CvInvoke.cvDFT(complexImage, dft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, 0);

//The Real part of the Fourier Transform
Matrix<float> outReal = new Matrix<float>(image.Size);
//The imaginary part of the Fourier Transform
Matrix<float> outIm = new Matrix<float>(image.Size);
CvInvoke.cvSplit(dft, outReal, outIm, IntPtr.Zero, IntPtr.Zero);

//Show The Data       
CvInvoke.cvShowImage("Real", outReal);
CvInvoke.cvShowImage("Imaginary ", outIm);

Непонятно, что делает заявление, что делает. Кроме того, он смешивает IntPtr, Image<T1, T2>, Matrix<T> и не использует Mat.

...