protected void fastHarrisRansacBlendStraight(List <Bitmap> imgs) { List <IntPoint[]> harrisPoints = new List <IntPoint[]>(); MatrixH homography; //Calculate all the Harris Points HarrisCornersDetector harris = new HarrisCornersDetector(0.03f, 10000f); for (int i = 0; i < imgs.Count; i++) { harrisPoints.Add(harris.ProcessImage(imgs[i]).ToArray()); } Bitmap final = imgs[0]; for (int i = 1; i < imgs.Count; i++) { //Convert my frames to grayscale so I can find and adjust the normal vectors AForge.Imaging.Filters.GrayscaleBT709 grayscale = new AForge.Imaging.Filters.GrayscaleBT709(); AForge.Imaging.DocumentSkewChecker skew = new AForge.Imaging.DocumentSkewChecker(); double finalAngle = skew.GetSkewAngle(grayscale.Apply(final)); double imgAngle = skew.GetSkewAngle(grayscale.Apply(imgs[i])); //Less than 5% to account for human error with rotations and wobbles if (Math.Abs(finalAngle - imgAngle) < 5) { AForge.Imaging.Filters.RotateBilinear rotate = new AForge.Imaging.Filters.RotateBilinear(finalAngle - imgAngle); rotate.FillColor = Color.FromArgb(0, 255, 255, 255); imgs[i] = rotate.Apply(imgs[i]); //Update harris harrisPoints[i] = harris.ProcessImage(imgs[i]).ToArray(); } IntPoint[] harrisFinal = harris.ProcessImage(final).ToArray(); //Correlate the Harris pts between imgs CorrelationMatching matcher = new CorrelationMatching(5, final, imgs[i]); IntPoint[][] matches = matcher.Match(harrisFinal, harrisPoints[i]); //Create the homography matrix using ransac RansacHomographyEstimator ransac = new RansacHomographyEstimator(0.025, 0.99); homography = ransac.Estimate(matches[0], matches[1]); Blend blend = new Blend(homography, final); blend.Gradient = true; final = blend.Apply(imgs[i]); } showImage(final); }
protected void surfRansacBlendStraight(List <Bitmap> imgs) { MatrixH homography; List <SpeededUpRobustFeaturePoint[]> surfPoints = new List <SpeededUpRobustFeaturePoint[]>(); //Calculate all the Surf Points SpeededUpRobustFeaturesDetector surf = new SpeededUpRobustFeaturesDetector(); double lastAngle = 0; for (int i = 0; i < imgs.Count; i++) { //Grayscale to find the edges and adjust the normal to point up AForge.Imaging.Filters.GrayscaleBT709 grayscale = new AForge.Imaging.Filters.GrayscaleBT709(); AForge.Imaging.DocumentSkewChecker skew = new AForge.Imaging.DocumentSkewChecker(); double angle = skew.GetSkewAngle(grayscale.Apply(imgs[i])); //Less than 5 deg change in angle to account for wobble, ignore big shifts if (Math.Abs(angle - lastAngle) < 5) { AForge.Imaging.Filters.RotateBilinear rotate = new AForge.Imaging.Filters.RotateBilinear(angle); rotate.FillColor = Color.FromArgb(0, 255, 255, 255); imgs[i] = rotate.Apply(imgs[i]); lastAngle = angle; } showImage(imgs[i]); surfPoints.Add(surf.ProcessImage(imgs[i]).ToArray()); } Bitmap final = imgs[0]; for (int i = 1; i < imgs.Count; i++) { SpeededUpRobustFeaturePoint[] surfFinal = surf.ProcessImage(final).ToArray(); //Correlate the Harris pts between imgs KNearestNeighborMatching matcher = new KNearestNeighborMatching(5); matcher.Threshold = 0.05; IntPoint[][] matches = matcher.Match(surfFinal, surfPoints[i]); //Create the homography matrix using RANSAC RansacHomographyEstimator ransac = new RansacHomographyEstimator(0.015, 1); homography = ransac.Estimate(matches[0], matches[1]); Blend blend = new Blend(homography, final); blend.Gradient = true; final = blend.Apply(imgs[i]); } //Smooth/Sharpen if I wanted to AForge.Imaging.Filters.Sharpen filter = new AForge.Imaging.Filters.Sharpen(); //AForge.Imaging.Filters.Gaussian filter = new AForge.Imaging.Filters.Guassian(5); //filter.ApplyInPlace(final); showImage(final); }
//1. bright pixel / dark pixel //2.lowest gray level //3.highest gray level //4.number of peaks in the x direction. //5.number of peaks in the y direction. public static double[] ExtractFeatures(Bitmap bmp,int i) { //Apply GrayScale GrayscaleBT709 greyScaleFilter = new GrayscaleBT709(); Bitmap newBmp = greyScaleFilter.Apply((Bitmap)bmp.Clone()); //Count Blobs BlobCounter blobCounter = new BlobCounter(); blobCounter.BackgroundThreshold = Color.FromArgb(255, 150, 150, 150); blobCounter.ProcessImage(newBmp); int blobs = (blobCounter.ObjectsCount - 1) * 30; //Count Corner SusanCornersDetector scd = new SusanCornersDetector(); scd.DifferenceThreshold = 70; scd.GeometricalThreshold = 8; int corners = scd.ProcessImage((Bitmap)newBmp.Clone()).Count(); //Apply Edge Filter CannyEdgeDetector filter = new CannyEdgeDetector(); //newBmp = filter.Apply(newBmp); Histogram his = new HorizontalIntensityStatistics(newBmp).Gray; Histogram vis = new VerticalIntensityStatistics(newBmp).Gray; HoughLineTransformation lineTransform = new HoughLineTransformation(); // apply Hough line transofrm lineTransform.ProcessImage(filter.Apply(newBmp)); Bitmap houghLineImage = lineTransform.ToBitmap(); // get lines using relative intensity HoughLine[] lines = lineTransform.GetLinesByRelativeIntensity(1); int linesCount = lines.Count() * 30; double[] features = new double[13] { blobs, corners, his.Max, his.Min, his.Mean, his.Median, his.StdDev, vis.Max, vis.Min, vis.Mean, vis.Median, vis.StdDev,linesCount}; //double[] features = new double[3] { blobs, corners,lines}; newBmp.Save(String.Format("test{0}.bmp",i)); return features; }
private void Effect() { IFilter imgeFilter = new BurkesDithering(); Bitmap bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnCommon.Image = bitimg; imgeFilter = new GrayscaleBT709(); btnGray.Image = new Bitmap(imgeFilter.Apply(img), 90, 111); imgeFilter = new Sepia(); bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnSeperia.Image = bitimg; imgeFilter = new Invert(); bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnInvert.Image = bitimg; imgeFilter = new Blur(); bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnBlur.Image = bitimg; imgeFilter = new Texturer(new AForge.Imaging.Textures.MarbleTexture(10, 11), 0.7f, 0.3f); bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnJitter.Image = bitimg; imgeFilter = new ChannelFiltering(new IntRange(0, 0), new IntRange(0, 255), new IntRange(0, 255)); bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnCyan.Image = bitimg; imgeFilter = new YCbCrExtractChannel(AForge.Imaging.YCbCr.CrIndex); bitimg = new Bitmap(imgeFilter.Apply(img), 90, 111); btnBlackWhite.Image = bitimg; }
/// <summary> /// Get rectangles objects in the image /// </summary> /// <param name="image">Image to get the rectangles</param> /// <param name="minWidth">Minimum width to consider as a valid rectangle</param> /// <param name="minHeight">Minimum height to consider as a valid ractangle</param> /// <returns>Return an array with the selected rectangle</returns> public Rectangle[] GetObjectsCoordinates(System.Drawing.Image image, int minWidth, int minHeight) { // create grayscale filter GrayscaleBT709 grayscaleFilter = new GrayscaleBT709(); // apply it to color filtered image Bitmap grayImage = grayscaleFilter.Apply(new Bitmap(image)); // create blob counter AForge.Imaging.BlobCounter blobCounter = new AForge.Imaging.BlobCounter(); // configure it to filter out small objects blobCounter.MinWidth = minWidth; blobCounter.MinHeight = minHeight; blobCounter.FilterBlobs = true; // set ordering - bigger objects go first blobCounter.ObjectsOrder = AForge.Imaging.ObjectsOrder.YX; // locate blobs blobCounter.ProcessImage(grayImage); Rectangle[] rects = blobCounter.GetObjectsRectangles(); return rects; }
public Bitmap Render() { if (this.IsReady == false) return null; Bitmap r = null; lock (this) { IFilter grayscaleFilter = new GrayscaleBT709(); Bitmap b = grayscaleFilter.Apply(this.mBmp); r = new Bitmap(b.Width, b.Height); Graphics g = Graphics.FromImage(r); g.DrawImage(b, 0, 0, r.Width, r.Height); b.Dispose(); if (this.ShowGrid) { this.DrawGrid(g); } this.HighlightRegion(g, this.mBmp); this.DrawOutline(g); g.Dispose(); } return r; }
private void traitementimage(ref Bitmap image) { ColorFiltering filter = new ColorFiltering(); filter.Red = new IntRange(254, 255); filter.Green = new IntRange(0, 240); filter.Blue = new IntRange(0, 240); Bitmap tmp = filter.Apply(image); IFilter grayscale = new GrayscaleBT709(); tmp = grayscale.Apply(tmp); BitmapData bitmapData = tmp.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed); BlobCounter blobCounter = new BlobCounter(); blobCounter.ProcessImage(bitmapData); blobCounter.ObjectsOrder = ObjectsOrder.Size; Rectangle[] rects = blobCounter.GetObjectsRectangles(); tmp.UnlockBits(bitmapData); tmp.Dispose(); if (rects.Length != 0) { backpoint = Centre(rects[0]); lignes(ref image, backpoint); } }