Выполните первые три шага здесь :
Mat padded = new Mat(); //expand input image to optimal size
int optimalSizeRows = Cv2.GetOptimalDFTSize(i.Rows);
int optimalSizeCols = Cv2.GetOptimalDFTSize(i.Cols); // on the border add zero pixels
Cv2.CopyMakeBorder(i, padded, 0, optimalSizeRows - i.Rows, 0,
optimalSizeCols - i.Cols, BorderTypes.Constant, Scalar.All(0));
Mat paddedFloat = new Mat();
padded.ConvertTo(paddedFloat, MatType.CV_32FC1);
Mat[] planes = { paddedFloat, Mat.Zeros(padded.Size(), MatType.CV_32F) };
Mat complexI= new Mat();
Cv2.Merge(planes, complexI); // Add to the expanded another plane with zeros
Mat dftImage = new Mat();
// Apply fourier transformation
Cv2.Dft(complexI, dftImage, DftFlags.ComplexOutput);
Затем выполните вызов MulSpectrums (по существу, автокорреляция коэффициентов) для результирующего изображения dft и выполните обратное БПФ и Iполучить результаты, которые мне нужны.
Mat mulSpecMat = new Mat();
Mat inverse = new Mat();
Mat norm = new Mat();
Cv2.MulSpectrums(dftImage, dftImage, mulSpecMat, DftFlags.ComplexOutput, true);
Cv2.Dft(mulSpecMat, inverse, DftFlags.Inverse | DftFlags.RealOutput);
Cv2.Normalize(inverse, norm, 0, 255, NormTypes.MinMax);