Example #1
0
 public ColourSegment(Image<Bgr, byte> rgbCrop, Image<Gray, byte> binaryCrop, Point[] contour, SignColour colour)
 {
     this.rgbCrop = rgbCrop;
     this.binaryCrop = binaryCrop;
     this.contour = contour;
     this.colour = colour;
 }
Example #2
0
        public SignType recognizeSign(BGRImage BGRimage, GrayImage grayImage, SignShape shape, SignColour color, List<DebugImage> aDebugImage = null)
        {
            if (shape == SignShape.Garbage && aDebugImage == null)
                return SignType.Garbage;

            debugImages = aDebugImage;
            GrayImage preprosessedImage = preprocess(BGRimage, grayImage);
            Matrix<float> parameter = calculateParameters(preprosessedImage);

            SignType classifiedSign = classifySign(parameter, shape);

            bool boolColor;
            if (color == SignColour.RED)
                boolColor = false;
            else boolColor = true;

             if (isTrained && shape != SignShape.Garbage)
            {
                if (boolColor != SignTypeColor[(int)classifiedSign])
                    //Console.WriteLine("Color Mishaps");
                    return SignType.Garbage;
                return classifiedSign;
            }
            else
                return SignType.Garbage;
        }
Example #3
0
        //-> function returning the binary image with white the segment and black not
        private Image<Gray, Byte> GetPixelMask(String ColourSpace, SignColour Colour, Image<Bgr, byte> image)
        {
            int StartRangeH = 0;
            int EndRangeH = 0;
            int StartRangeV = 0;
            int StartRangeS = 0;
            if (Colour == SignColour.BLUE)
            {
                StartRangeH = 100;
                EndRangeH = 135;
                StartRangeS = 110;
                StartRangeV = 30;
            }

            if (Colour == SignColour.RED)
            {
                StartRangeH = 12;
                EndRangeH = 170;
                StartRangeS = 50;
                StartRangeV = 30;
            }
            using (Image<Hsv, Byte> hsv = image.Convert<Hsv, Byte>())
            {
                Image<Gray, Byte>[] channels = hsv.Split();
                try
                {
                    CvInvoke.cvInRangeS(channels[0], new MCvScalar(StartRangeH), new MCvScalar(EndRangeH), channels[0]);
                    if (Colour == SignColour.RED)
                    {
                        channels[0]._Not();
                    }
                    channels[1]._ThresholdBinary(new Gray(StartRangeS), new Gray(255.0));
                    channels[2]._ThresholdBinary(new Gray(StartRangeV), new Gray(255.0));
                    CvInvoke.cvAnd(channels[0], channels[1], channels[0], IntPtr.Zero);
                    CvInvoke.cvAnd(channels[0], channels[2], channels[0], IntPtr.Zero);
                }
                finally
                {
                    channels[1].Dispose();
                    channels[2].Dispose();
                }
                return channels[0];
            }
        }
Example #4
0
 public SignShape classify(GrayImage binaryImage, SignColour colour, List<DebugImage> debugImages = null)
 {
     int[] featureVector = extractDtbFeatures(binaryImage, debugImages);
     if (isTrained)
     {
         Matrix<float> data = new Matrix<float>(Array.ConvertAll<int, float>(featureVector, Convert.ToSingle));
         return (SignShape)svms[(int)colour].model.Predict(data);
     }
     else
     {
         return SignShape.Garbage;
     }
 }