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));
        }