public static Complex[,] ComplexConvolve(Complex[,] data, Complex[,] kernel ) { var dataReal = data.Select2D(x=>x.Real); var dataImaginary = data.Select2D(x => x.Imaginary); var kernelReal = kernel.Select2D(x => x.Real); var kernelImaginary = kernel.Select2D(x => x.Imaginary); var resultRealPart1 = Convolve(dataReal, kernelReal); var resultRealPart2 = Convolve(dataImaginary, kernelImaginary); var resultImaginaryPart1 = Convolve(dataReal, kernelImaginary); var resultImaginaryPart2 = Convolve(dataImaginary, kernelReal); return KernelHelper.MakeComplexFromDouble( KernelHelper.Subtract(resultRealPart1, resultRealPart2), KernelHelper.Add(resultImaginaryPart1, resultImaginaryPart2)); }