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(); }
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); }
private void buttonCancel_Click(object sender, EventArgs e) { _result = SideResult.CANCEL; this.Close(); }
public SideSelector() { _result = SideResult.CANCEL; InitializeComponent(); }