public override IMatrixImage Invoke(IMatrixImage input) { if (UseOpenCV) { OpenCvSharp.Mat mat = input.GetCVMat(); input.SetCVMat(mat.MedianBlur(Width)); mat.Dispose(); return(input); } else { input.SlidingWindow(new MedianeOperation(Width, Height)); //int offset = (Width * Height) / 2; //if (image is MatrixImage<byte> imgByte) //{ // foreach (var layer in imgByte.SplitWithoutAlpha()) // layer.SlidingWindow(Width, Height, a => a.OrderBy(a => a).ElementAt(offset)); //} //else if (image is MatrixImage<short> imgInt16) //{ // foreach (var layer in imgInt16.SplitWithoutAlpha()) // layer.SlidingWindow(Width, Height, a => a.OrderBy(a => a).ElementAt(offset)); //} //else if (image is MatrixImage<int> imgInt32) //{ // foreach (var layer in imgInt32.SplitWithoutAlpha()) // layer.SlidingWindow(Width, Height, a => a.OrderBy(a => a).ElementAt(offset)); //} //else if (image is MatrixImage<long> imgInt64) //{ // foreach (var layer in imgInt64.SplitWithoutAlpha()) // layer.SlidingWindow(Width, Height, a => a.OrderBy(a => a).ElementAt(offset)); //} //else if (image is MatrixImage<float> imgSingle) //{ // foreach (var layer in imgSingle.SplitWithoutAlpha()) // layer.SlidingWindow(Width, Height, a => a.OrderBy(a => a).ElementAt(offset)); //} //else if (image is MatrixImage<double> imgDouble) //{ // foreach (var layer in imgDouble.SplitWithoutAlpha()) // layer.SlidingWindow(Width, Height, a => a.OrderBy(a => a).ElementAt(offset)); //} //else throw new NotSupportedException(); return(input); } }