Example #1
0
        private void buttonOK_Click(object sender, EventArgs e)
        {
            if (radioLeft.Checked)
            {
                _result = SideResult.LEFT;
            }
            else if (radioRight.Checked)
            {
                _result = SideResult.RIGHT;
            }
            else
            {
                _result = SideResult.CANCEL;
            }

            this.Close();
        }
Example #2
0
        private SideResult GetCoords(bool leftSide)
        {
            var activePoints   = leftSide ? LeftActivePoints : RightActivePoints;
            var FastMotionHist = leftSide ? LeftFastMotionHist : RightFastMotionHist;
            var SlowMotionHist = leftSide ? LeftSlowMotionHist : RightSlowMotionHist;
            var StationaryHist = leftSide ? LeftStationaryHist : RightStationaryHist;
            var prevSoln       = leftSide ? LeftMostRecentSoln : RightMostRecentSoln;

            //Fast tail
            var fastTail = FastMotionHist
                           .FromPointList(FastMotionModel, activePoints)
                           .GetTail(TailPercent, AppSettings.Default.FastThreshold);


            //Slow tail
            var slowTail = SlowMotionHist
                           .FromPointList(SlowMotionModel, activePoints)
                           .GetTail(TailPercent, AppSettings.Default.SlowThreshold);

            //Combine and then Median filter
            slowTail.AddRange(fastTail);

            var tailsDeNoised = slowTail.MedianFilter(radius: 1);

            //Check for extremely slow - stationary
            var statTail = StationaryHist
                           .FromPointList(StationaryModel, activePoints)
                           .GetTail(0.05, AppSettings.Default.StationaryThreshold);

            //Pick the model with most points
            tailsDeNoised = tailsDeNoised.Count > statTail.Count ? tailsDeNoised : statTail;

            //Or if not even stationary's (e.g. very fast), bail with prev soln
            if (tailsDeNoised.Count < 10)
            {
                return(prevSoln);
            }

            //Tips
            //Centroid
            var centroid = GetCentroid(tailsDeNoised);

            //Crawl to tip
            var crawlSurface = leftSide ? LeftCrawlSurface : RightCrawlSurface;

            if (crawlSurface == null)
            {
                crawlSurface = new Frame(Space.StandardWidth, Space.StandardHeight);

                if (leftSide)
                {
                    LeftCrawlSurface = crawlSurface;
                }
                else
                {
                    RightCrawlSurface = crawlSurface;
                }
            }

            var pointList = tailsDeNoised.Select(p => p.Item1).ToList();

            crawlSurface.ColorPixels(activePoints, Color.Yellow);
            crawlSurface.ColorPixels(pointList, Color.White);

            var ctr = new SpacePoint(Space)
                      .FromPriorSpace(new WPoint(leftSide ? -0.5 : 0.5, 0))
                      .StandardPoint;

            //Could do with lookup table
            var tip     = CrawlToTip(crawlSurface, centroid, ctr, 1, AppSettings.Default.TipCrawlerRadius.Rounded(), AppSettings.Default.MaxTipCrawlerHop);
            var baseLoc = CrawlToTip(crawlSurface, centroid, ctr, 1, AppSettings.Default.TipCrawlerRadius.Rounded(), AppSettings.Default.MaxTipCrawlerHop, crawlingAway: false);

            //For Debugging
            //crawlSurface.MarkPoint(baseLoc, inner: Color.Yellow, outer: Color.Black);
            //crawlSurface.MarkPoint(centroid, outer: Color.Black);
            //crawlSurface.MarkPoint(tip, inner: Color.Orange, outer: Color.Black);
            //crawlSurface.MarkPoint(ctr, inner: Color.Purple, outer: Color.Black);

            //Sectors
            var sectors = ComputeSectorWeights(tailsDeNoised, Space.StandardWidth, Space.StandardHeight, Space.HeadAngle);

            var result = new SideResult()
            {
                Tip            = new SpacePoint(Space).FromStandardSpace(tip),
                Base           = new SpacePoint(Space).FromStandardSpace(baseLoc),
                DetectedPoints = pointList.Select(sp => new SpacePoint(Space).FromStandardSpace(sp)).ToList(),
                SectorCounts   = sectors
            };

            if (leftSide)
            {
                LeftMostRecentSoln = result;
            }
            else
            {
                RightMostRecentSoln = result;
            }

            return(result);
        }
Example #3
0
 private void buttonCancel_Click(object sender, EventArgs e)
 {
     _result = SideResult.CANCEL;
     this.Close();
 }
Example #4
0
 public SideSelector()
 {
     _result = SideResult.CANCEL;
     InitializeComponent();
 }