private static void ToHSV() { //int max = 0; //int saturation = 0; //var hsvImg = ImageBefor.Convert<Hsv, byte>(); // using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 180.0f))) // { // histogram.Calculate(new Image<Gray, byte>[] { hsvImg[0] }, false, null); // List<float> hist = new List<float>(histogram.GetBinValues()); // max = hist.IndexOf((int)hist.Max()); // } // var imgMax = ImageBefor.Convert<Hsv,byte>()[0].CopyBlank().Add(new Gray(max)); // hsvImg[0] = imgMax; //using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f))) //{ // histogram.Calculate(new Image<Gray, byte>[] { hsvImg[1] }, false, null); // List<float> hist = new List<float>(histogram.GetBinValues()); // saturation = hist.IndexOf((int)hist.Max()); //} //var satMask = ImageBefor.Convert<Hsv, byte>()[0].CopyBlank().Add(new Gray(saturation)); //hsvImg[1] = imgMax; //using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f))) //{ // histogram.Calculate(new Image<Gray, byte>[] { hsvImg[2] }, false, null); // List<float> hist = new List<float>(histogram.GetBinValues()); //} //ImageAfter = hsvImg[2].Convert<Bgr, byte>(); int max = 0; int saturation = 0; var hsvImg = ImageBefor.Convert <Hsv, byte>(); using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 180.0f))) { histogram.Calculate(new Image <Gray, byte>[] { hsvImg[0] }, false, null); List <float> hist = new List <float>(histogram.GetBinValues()); max = hist.IndexOf((int)hist.Max()); } var imgMax = ImageBefor.Convert <Hsv, byte>()[0].CopyBlank().Add(new Gray(max)); hsvImg[0] = imgMax; using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f))) { histogram.Calculate(new Image <Gray, byte>[] { hsvImg[1] }, false, null); List <float> hist = new List <float>(histogram.GetBinValues()); saturation = hist.IndexOf((int)hist.Max()); } //var saturationMask = //var satMask = ImageBefor.Convert<Hsv, byte>()[0].CopyBlank().Add(new Gray(saturation)); //hsvImg[1] = imgMax; //using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f))) //{ // histogram.Calculate(new Image<Gray, byte>[] { hsvImg[2] }, false, null); // List<float> hist = new List<float>(histogram.GetBinValues()); //} ImageAfter = hsvImg[2].Convert <Bgr, byte>(); }
public static void Test() { if (ImageBefor != null) { //ToHSV(); Mat kernel = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(9, 9), new Point(-1, -1)); ImageAfter = ImageBefor.MorphologyEx(Emgu.CV.CvEnum.MorphOp.Tophat, kernel, new Point(-1, -1), 1, BorderType.Default, new MCvScalar(1.0)); //Image<Hsv, byte> bgraImage = ImageBefor.Convert<Hsv, byte>(); ////for (int i = 0; i < 2; i++) ////{ // ImageAfter = bgraImage[2].Convert<Bgr, byte>(); //Thread.Sleep(3000); ////} //ImageAfter = ImageBefor.Convert<Gray, float>().Laplace(13).Convert<Bgr,byte>(); //Image<Hsv, byte> hsvImage = ImageBefor.Convert<Hsv, byte>(); //hsvImage[1] = hsvImage[1].Add(new Gray(255)); //hsvImage[2] = hsvImage[2].Add(new Gray(255)); //List<double> hue = new List<double>(); //for (int x = 0; x < hsvImage.Height; x++) //{ // for (int y = 0; y < hsvImage.Width; y++) // { // hue.Add(hsvImage[x, y].Hue); // } //} //var max = hue.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key; //hue = hue.GroupBy(x => x).Select(x => x.Key).ToList(); //var median = hue[hue.Count / 2]; //for (int x = 0; x < hsvImage.Height; x++) //{ // for (int y = 0; y < hsvImage.Width; y++) // { // var pix = hsvImage[x, y].Hue; // if (pix > max + 10 || pix < max - 10) // { // hsvImage.Data[x, y, 0] = 90; // } // else // { // hsvImage.Data[x, y, 0] = 180; // } // } //} //ImageAfter = hsvImage.Convert<Bgr, byte>(); //Image<Bgra, byte> bgraImage = ImageBefor.Convert<Bgra, byte>(); //for (int i = 0; i < 4; i++) //{ // ImageAfter = bgraImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000); //} //Image<Hls, byte> hsvImage = ImageBefor.Convert<Hls, byte>(); //for (int i = 0; i < 3; i++) //{ // ImageAfter = hsvImage[i].Convert<Bgr, byte>();Thread.Sleep(3000); //} //Image<Lab, byte> LabImage = ImageBefor.Convert<Lab, byte>(); //for (int i = 0; i < 3; i++) //{ // ImageAfter = LabImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000); //} //Image<Luv, byte> LuvImage = ImageBefor.Convert<Luv, byte>(); //for (int i = 0; i < 3; i++) //{ // ImageAfter = LuvImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000); //} //Image<Ycc, byte> YccImage = ImageBefor.Convert<Ycc, byte>(); //for (int i = 0; i < 3; i++) //{ // ImageAfter = YccImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000); //} //using (DefectsFinder df = new DefectsFinder(ImageBefor)) //{ // df.SearchDefects(); // //CvInvoke.FillPoly(ImageAfter, new VectorOfVectorOfPoint( df.LargeDefectsContoursMatrix[2]), new MCvScalar(255, 0, 255), LineType.FourConnected); // using (ImageCleaner ci = new ImageCleaner(ImageBefor)) // { // //ImageAfter = ci.ClearImageByDefects(); // ImageAfter = ci.SpiralCleanLargeDefects(df.LargeDefectsContoursMatrix); // using (Dust dust = new Dust(ImageAfter, df.SmallDefectsContoursMatrix)) // { // //CvInvoke.FillPoly(ImageAfter, defectsFinder.SmallDefectsContoursMatrix, new MCvScalar(255,0,255), LineType.FourConnected); // ImageAfter = dust.RemoveDustDefects(); // } // } //} //using (DefectsFinder df = new DefectsFinder(ImageBefor)) //{ // df.SearchDefects(); // //CvInvoke.FillPoly(ImageAfter, new VectorOfVectorOfPoint( df.LargeDefectsContoursMatrix[2]), new MCvScalar(255, 0, 255), LineType.FourConnected); // using (ImageCleaner ci = new ImageCleaner(ImageBefor)) // { // ImageAfter = ci.InPaintMethod(df.LargeDefectsContoursMatrix, InpaintType.NS); // } //} } else { throw new ArgumentNullException(nameof(ImageBefor)); } }