private async void StartScan(object sender, EventArgs e) { var scale = 0.4; var stream = await TakePhoto(); Loader.IsRunning = true; Loader.IsVisible = true; LoaderGrid.IsVisible = true; await Task.Delay(10); var source = GetPixelMap(stream); var imaging = new ImagingManager(source); //source is PixelMap, you can find samples how to convert image to PixelMap imaging.AddFilter(new BicubicFilter(scale)); //Downscaling imaging.AddFilter(new CannyEdgeDetector()); //This filter contains Grayscale and Gaussian filter in it imaging.Render(); //Renders the image to use it further use var blobCounter = new BlobCounter() { ObjectsOrder = ObjectsOrder.Size }; imaging.AddFilter(blobCounter); imaging.Render(); //Following code finds largest quadratical blob List <Imaging.Library.Entities.Point> corners = null; var blobs = blobCounter.GetObjectsInformation(); foreach (var blob in blobs) { var points = blobCounter.GetBlobsEdgePoints(blob); var shapeChecker = new SimpleShapeChecker(); if (shapeChecker.IsQuadrilateral(points, out corners)) { break; } } imaging.UndoAll(); //Undo every filters applied var edgePoints = new EdgePoints(); edgePoints.SetPoints(corners.ToArray()); edgePoints = edgePoints.ZoomIn(scale); //Corrects points that found on downscaled image to original imaging.AddFilter(new QuadrilateralTransformation(edgePoints, true)); imaging.Render(); CovertedImage.Source = LoadImageFromPixelMap(imaging.Output); //imaging.Output gives that extracted rectangle shape from photo. Check out WPF sample how to save it. Loader.IsRunning = false; Loader.IsVisible = false; LoaderGrid.IsVisible = false; await Task.Delay(10); }
public EdgePoints GeneratePoints() { var pts = new EdgePoints(0); Bounds bounds = new Bounds(transform.position, size); CalculateRaySpacing(bounds, 0.75f, 1f); // left // right float y = transform.position.y - (size.y / 2f); float halfx = (size.x / 2f) - skinWidth; for (int i = 0; i < horizontalRayCount; i++) { pts.Left.Add(new Vector2(transform.position.x - halfx, y).RotateAround(transform.eulerAngles.z, transform.position)); pts.Right.Add(new Vector2(transform.position.x + halfx, y).RotateAround(transform.eulerAngles.z, transform.position)); y += horizontalRaySpacing; } // top // bottom float x = transform.position.x - (size.x / 2f); float halfy = (size.y / 2f) - skinWidth; for (int i = 0; i < verticalRayCount; i++) { pts.Bottom.Add(new Vector2(x, transform.position.y - halfy).RotateAround(transform.eulerAngles.z, transform.position)); pts.Top.Add(new Vector2(x, transform.position.y + halfy).RotateAround(transform.eulerAngles.z, transform.position)); x += verticalRaySpacing; } return(pts); }
public void convert() { var imaging = new ImagingManager(Source); var scale = 0.4; imaging.AddFilter(new Imaging.Library.Filters.BasicFilters.BicubicFilter(scale)); //Downscaling imaging.Render(); imaging.AddFilter(new CannyEdgeDetector()); imaging.Render(); var blobCounter = new BlobCounter { ObjectsOrder = ObjectsOrder.Size }; imaging.AddFilter(blobCounter); imaging.Render(); List <Point> corners = null; var blobs = blobCounter.GetObjectsInformation(); foreach (var blob in blobs) { var points = blobCounter.GetBlobsEdgePoints(blob); var shapeChecker = new SimpleShapeChecker(); if (shapeChecker.IsQuadrilateral(points, out corners)) { break; } } var edgePoints = new EdgePoints(); edgePoints.SetPoints(corners.ToArray()); imaging.Render(); imaging.UndoAll(); edgePoints = edgePoints.ZoomIn(scale); imaging.AddFilter(new QuadrilateralTransformation(edgePoints, true)); imaging.Render(); var strm = StreamLoadFromPixel(imaging.Output); var memoryStream = new MemoryStream(); strm.CopyTo(memoryStream); DependencyService.Get <ISaveViewFile>().SaveAndViewAsync("out.jpg", memoryStream); myimg.Source = LoadFromPixel(imaging.Output); box.IsVisible = false; loading.IsVisible = false; loading.IsRunning = false; stackloading.IsVisible = false; }
//calculate edgepoints from state position and radius public static EdgePoints GetEdgePoints(Point A, Point B, int Radius, int Radius2, double winkel) { var PointA = new Vector3D(A.X, A.Y, 0); var PointB = new Vector3D(B.X, B.Y, 0); Vector3D TempA; Vector3D TempB; Vector3D TempC; var tempVector = new Vector3D(VMath.PolarVVVV(PointA - PointB)); //get Polar Values if (tempVector.y > 0) // depending which quadrant of rotation { TempA = VMath.CartesianVVVV(tempVector.x + winkel, tempVector.y, 0 - Radius) + PointA; //minus Radius from Length > into Cartesian TempB = VMath.CartesianVVVV(tempVector.x - winkel, tempVector.y, Radius2) + PointB; //Radius is Length > into Cartesian } else { TempA = VMath.CartesianVVVV(tempVector.x - winkel, tempVector.y, 0 - Radius) + PointA; //minus Radius from Length > into Cartesian TempB = VMath.CartesianVVVV(tempVector.x + winkel, tempVector.y, Radius2) + PointB; //Radius is Length > into Cartesian } TempC = VMath.CartesianVVVV(VMath.PolarVVVV(TempA - TempB).x, VMath.PolarVVVV(TempA - TempB).y, 0 - VMath.PolarVVVV(TempA - TempB).z / 2.75) + TempA; // calculate center var myEdgeCoords = new EdgePoints { A = new Point(Convert.ToInt16(TempA.x), Convert.ToInt16(TempA.y)), // create Point from Vector B = new Point(Convert.ToInt16(TempB.x), Convert.ToInt16(TempB.y)), // create Point from Vector Center = new Point(Convert.ToInt16(TempC.x), Convert.ToInt16(TempC.y)) }; // edgepoint definition return(myEdgeCoords); }
public void ComputeArrow() { EdgePoints.Add(new Point() { X = 0.0, Y = 0.0 }); EdgePoints.Add(new Point() { X = LeftTipX, Y = LeftTipY }); EdgePoints.Add(new Point() { X = LeftTipX, Y = 0.0 }); EdgePoints.Add(new Point() { X = LeftTipX + (-1 * TailLength), Y = 0 }); EdgePoints.Add(new Point() { X = LeftTipX, Y = 0.0 }); EdgePoints.Add(new Point() { X = LeftTipX, Y = -1 * LeftTipY }); EdgePoints.Add(new Point() { X = 0.0, Y = 0.0 }); }
private void ScanDocumentBtn_Click(object sender, EventArgs e) { var imaging = new ImagingManager(Source); var scale = 0.4; imaging.AddFilter(new BicubicFilter(scale)); //Downscaling imaging.Render(); imaging.AddFilter(new CannyEdgeDetector()); imaging.Render(); var blobCounter = new BlobCounter { ObjectsOrder = ObjectsOrder.Size }; imaging.AddFilter(blobCounter); imaging.Render(); List <Point> corners = null; var blobs = blobCounter.GetObjectsInformation(); foreach (var blob in blobs) { var points = blobCounter.GetBlobsEdgePoints(blob); var shapeChecker = new SimpleShapeChecker(); if (shapeChecker.IsQuadrilateral(points, out corners)) { break; } } var edgePoints = new EdgePoints(); edgePoints.SetPoints(corners.ToArray()); imaging.Render(); imaging.UndoAll(); edgePoints = edgePoints.ZoomIn(scale); imaging.AddFilter(new QuadrilateralTransformation(edgePoints, true)); imaging.Render(); var image = LoadFromPixelMap(imaging.Output); var imageView = FindViewById <ImageView>(Resource.Id.myImageView); imageView.SetImageBitmap(image); }
// ------------------------------ // protected // ------------------------------ protected override void PaintSelf(Graphics g) { // todo: GraphicsPathのリソースキャッシュ using (_ResourceCache.UseResource()) using (var path = new GraphicsPath()) { path.AddLines(EdgePoints.ToArray()); g.DrawPath(_PenResource, path); } if (_sourceDecoration != null) { _sourceDecoration.Target = new Line(First, FirstRef.Next.EdgePoint); _sourceDecoration.Paint(g); } if (_targetDecoration != null) { _targetDecoration.Target = new Line(Last, LastRef.Prev.EdgePoint); _targetDecoration.Paint(g); } }
public ActionResult SpendEdgePoint(Guid id) { Character c = db.Characters.Find(id); if (c != null) { //TODO: Ensure user is allowed to make this change EdgePoints ep = c.XPAssets.Where(x => x.Name == "Edge Points").First() as EdgePoints; if (ep != null) { if (ep.AllocatedXP.Value >= 20) { XPTransaction newTransaction = new XPTransaction(); newTransaction.Id = Guid.NewGuid(); newTransaction.Description = "Edge Point Spent"; newTransaction.Timestamp = DateTime.Now; XPChange chgDeductFromPool = new XPChange(); chgDeductFromPool.Id = Guid.NewGuid(); chgDeductFromPool.Transaction = newTransaction; chgDeductFromPool.XPAsset = ep; chgDeductFromPool.Amount = -20; newTransaction.Changes.Add(chgDeductFromPool); db.XPTransactions.Add(newTransaction); db.XPChanges.Add(chgDeductFromPool); db.SaveChanges(); XPAsset.RefreshAllXPAssets(); } } } if (Request != null) { return(new RedirectResult(Request.UrlReferrer.AbsoluteUri)); } else { return(RedirectToAction("Details", id)); } }
public QuadrilateralTransformation(EdgePoints edgePoints, bool useInterpolation) { EdgePoints = edgePoints; _estimatedSize = edgePoints.EstimatedRectangleSize(); UseInterpolation = useInterpolation; }
public void setEdgePoints(Vector3 inPoint, Vector3 outPoint) { edgePoints = new EdgePoints(inPoint, outPoint); }
private void EdgeDetection() { var dialog = new OpenFileDialog { InitialDirectory = @"D:\OneDrive", Filter = "Bitmap|*.bmp;*.jpg;*.jpeg;*.png;" }; if (dialog.ShowDialog() == true) { var scale = 0.4; var path = dialog.FileName; var sources = new PixelMap[2]; GetPixelMap(path, sources); var source = sources[0]; var imaging = new ImagingManager(source); imaging.AddFilter(new BicubicFilter(scale)); //Downscaling imaging.Render(); imaging.AddFilter(new CannyEdgeDetector()); imaging.Render(); var blobCounter = new BlobCounter { ObjectsOrder = ObjectsOrder.Size }; imaging.AddFilter(blobCounter); imaging.Render(); List <Point> corners = null; var blobs = blobCounter.GetObjectsInformation(); foreach (var blob in blobs) { var points = blobCounter.GetBlobsEdgePoints(blob); var shapeChecker = new SimpleShapeChecker(); if (shapeChecker.IsQuadrilateral(points, out corners)) { break; } } var edgePoints = new EdgePoints(); edgePoints.SetPoints(corners.ToArray()); var line1 = new Line { X1 = edgePoints.TopLeft.X, Y1 = edgePoints.TopLeft.Y, X2 = edgePoints.BottomLeft.X, Y2 = edgePoints.BottomLeft.Y }; var line2 = new Line { X1 = edgePoints.BottomLeft.X, Y1 = edgePoints.BottomLeft.Y, X2 = edgePoints.BottomRight.X, Y2 = edgePoints.BottomRight.Y }; var line3 = new Line { X1 = edgePoints.BottomRight.X, Y1 = edgePoints.BottomRight.Y, X2 = edgePoints.TopRight.X, Y2 = edgePoints.TopRight.Y }; var line4 = new Line { X1 = edgePoints.TopRight.X, Y1 = edgePoints.TopRight.Y, X2 = edgePoints.TopLeft.X, Y2 = edgePoints.TopLeft.Y }; var pixel = new Pixel(255, 255, 0, 0); imaging.AddFilter(new LineDrawFilter(line1, pixel)); imaging.AddFilter(new LineDrawFilter(line2, pixel)); imaging.AddFilter(new LineDrawFilter(line3, pixel)); imaging.AddFilter(new LineDrawFilter(line4, pixel)); imaging.Render(); image.Source = LoadFromPixelMap(imaging.Output); imaging.UndoAll(); edgePoints = edgePoints.ZoomIn(scale); imaging.AddFilter(new QuadrilateralTransformation(edgePoints, true)); imaging.Render(); image2.Source = LoadFromPixelMap(imaging.Output); SaveImageToFile(LoadFromPixelMap(imaging.Output), @"D:\Desktop\2.jpg"); } }