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);
        }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        //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);
        }
Ejemplo n.º 5
0
 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
     });
 }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        // ------------------------------
        // 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);
            }
        }
Ejemplo n.º 8
0
        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));
            }
        }
Ejemplo n.º 9
0
 public QuadrilateralTransformation(EdgePoints edgePoints, bool useInterpolation)
 {
     EdgePoints       = edgePoints;
     _estimatedSize   = edgePoints.EstimatedRectangleSize();
     UseInterpolation = useInterpolation;
 }
Ejemplo n.º 10
0
 public void setEdgePoints(Vector3 inPoint, Vector3 outPoint)
 {
     edgePoints = new EdgePoints(inPoint, outPoint);
 }
Ejemplo n.º 11
0
        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");
            }
        }