Esempio n. 1
0
        public void DFT()
        {
            Mat padded = new Mat();

            //扩展行宽进行快速,其他位置用0扩充
            CvInvoke.CopyMakeBorder(sourceMat, padded, 0, fftRows - sourceMat.Rows, 0, fftCols - sourceMat.Cols,
                                    BorderType.Constant,
                                    new MCvScalar(0));

            //构造虚部
            Mat tmp = new Mat(padded.Size, DepthType.Cv32F, 1);

            tmp.SetTo(new MCvScalar(0));

            VectorOfMat planes = new VectorOfMat(padded, tmp);

            Mat complexI = new Mat();

            //多通道混合
            CvInvoke.Merge(planes, complexI);

            //进行DFT变换
            CvInvoke.Dft(complexI, complexI, DxtType.Forward, padded.Rows);

            //将混合的单通道分离实数域虚数域
            CvInvoke.Split(complexI, planes);

            //计算幅度谱,相位谱
            CudaInvoke.Magnitude(planes[0], planes[1], magnitudeMat);
            CudaInvoke.Phase(planes[0], planes[1], phaseMat);


            magnitudeMat.CopyTo(magPMat);
        }
Esempio n. 2
0
        public static double Test(string fileName)
        {
            Mat imageSource = CvInvoke.Imread(fileName, Emgu.CV.CvEnum.LoadImageType.Color);

            Mat imageX = new Mat();

            Mat imageY = new Mat();

            CvInvoke.Sobel(imageSource, imageX, Emgu.CV.CvEnum.DepthType.Cv32F, 1, 0);
            CvInvoke.Sobel(imageSource, imageY, Emgu.CV.CvEnum.DepthType.Cv32F, 0, 1);

            CudaInvoke.Magnitude(imageX, imageY, imageX);
            return(CvInvoke.Sum(imageX).ToArray()[0]);
        }