public static Image <Bgr, byte> Detection(Image <Bgr, byte> originalImage, DetectionType DT, out ErrorCode Err)
        {
            Err = ErrorCode.Normal;
            Image <Bgr, byte> b = null;

            switch (DT)
            {
            case DetectionType.Feature:
                switch (_featureType)
                {
                case featureDetectionType.cannyEdge:
                    b = ContourDetection.cannyEdges(originalImage, false).Convert <Bgr, Byte>(); break;

                case featureDetectionType.contour:
                    b = ContourDetection.contourDetection(originalImage); break;

                case featureDetectionType.line:
                    b = LineDetection.lineDetection(originalImage); break;
                }
                break;

            case DetectionType.Object:
                if (GV.imgOriginal != null && GV.object_img != null)
                {
                    Image <Bgr, byte> outPutImg = GV.imgOriginal;
                    switch (_objectType)
                    {
                    case objectDetectionType.SURF:
                        if (!SURF.SearchObject_SURF(GV.imgOriginal.Convert <Gray, byte>(), GV.object_img.Convert <Gray, byte>(), out outPutImg))
                        {
                            Err = ErrorCode.SearchSURF_Fail;
                        }
                        else
                        {
                            BindManager.BindMngr.GMessage.value = "Found using SURF";
                        }
                        b = outPutImg; break;

                    case objectDetectionType.FFT:
                        if (!FFT.searchObject_FFT(GV.imgOriginal, GV.object_img, out outPutImg))
                        {
                            Err = ErrorCode.SearchFFT_Fail;
                        }
                        else
                        {
                            BindManager.BindMngr.GMessage.value = "Found using FFT";
                        }
                        b = outPutImg; break;

                    case objectDetectionType.color:
                        if (!ColorDetection2.Color_detection(GV.imgOriginal, GV.object_img, out outPutImg, Parameters._colorTolerance))
                        {
                            Err = ErrorCode.SearchColor_Fail;
                        }
                        else
                        {
                            //outPutImg = ContourDetection.contourDetection(outPutImg);
                            PointF[] pts = FindWhitePoints(outPutImg.Convert <Gray, byte>());

                            MCvBox2D box = SquareFittingWithAngle(pts);
                            outPutImg.Draw(box, new Bgr(Color.Green), 2);
                            BindManager.BindMngr.GMessage.value = $"Displaying matching colors. Angle [{box.angle}deg]";
                        }
                        b = outPutImg; break;
                    }
                }
                else if (GV.object_img == null)
                {
                    Err = ErrorCode.No_object_image;
                }

                break;
            }
            return(b);
        }