Cleaning, micro-optimizations.
[master-thesis.git] / Parasitemia / Parasitemia / MatchingEllipses.fs
index 6e6218d..2022c26 100644 (file)
@@ -12,8 +12,7 @@ open Utils
 // Do not take in account matching score below this when two ellipses are matched.
 let matchingScoreThreshold1 = 0.6
 
-// All ellipses with a score below this are removed.
-let matchingScoreThreshold2 = 600.
+let scaleOverlapTest = 0.8
 
 type private EllipseScoreFlaggedKd (matchingScore: float, e: Ellipse) =
     let mutable matchingScore = matchingScore
@@ -36,6 +35,9 @@ type private EllipseScoreFlaggedKd (matchingScore: float, e: Ellipse) =
 type MatchingEllipses (radiusMin: float) =
     let ellipses = List<EllipseScoreFlaggedKd>()
 
+    // All ellipses with a score below this are removed.
+    let matchingScoreThreshold2 = 20. * radiusMin
+
     member this.Add (e: Ellipse) =
         ellipses.Add(EllipseScoreFlaggedKd(0.0, e))
 
@@ -76,7 +78,7 @@ type MatchingEllipses (radiusMin: float) =
             // 3) Sort ellipses by their score.
             ellipses.Sort(fun e1 e2 -> e2.MatchingScore.CompareTo(e1.MatchingScore))
 
-            // 4) Remove ellipses wich have a low score.
+            // 4) Remove ellipses with a low score.
             let i = ellipses.BinarySearch(EllipseScoreFlaggedKd(matchingScoreThreshold2, Ellipse(0.0, 0.0, 0.0, 0.0, 0.0)),
                                           { new IComparer<EllipseScoreFlaggedKd> with
                                                 member this.Compare(e1, e2) = e2.MatchingScore.CompareTo(e1.MatchingScore) }) |> abs
@@ -98,7 +100,7 @@ type MatchingEllipses (radiusMin: float) =
                     for other in tree.Search window do
                         if not other.Removed && other.MatchingScore < e.MatchingScore
                         then
-                            if e.Ellipse.Scale(0.8).Contains other.Ellipse.Cx other.Ellipse.Cy
+                            if e.Ellipse.Scale(scaleOverlapTest).Contains other.Ellipse.Cx other.Ellipse.Cy
                             then
                                 other.Removed <- true
             ellipses.RemoveAll(fun e -> e.Removed) |> ignore