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; }
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; }
//-> 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]; } }
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; } }