Little adjustments.
[master-thesis.git] / Parasitemia / Parasitemia / MatchingEllipses.fs
index da74c65..6e6218d 100644 (file)
@@ -9,8 +9,11 @@ open Types
 open Utils
 
 
+// Do not take in account matching score below this when two ellipses are matched.
 let matchingScoreThreshold1 = 0.6
-let matchingScoreThreshold2 = 1.
+
+// All ellipses with a score below this are removed.
+let matchingScoreThreshold2 = 600.
 
 type private EllipseScoreFlaggedKd (matchingScore: float, e: Ellipse) =
     let mutable matchingScore = matchingScore
@@ -18,6 +21,7 @@ type private EllipseScoreFlaggedKd (matchingScore: float, e: Ellipse) =
     member this.Ellipse = e
 
     member this.MatchingScore = matchingScore
+
     member this.AddMatchingScore(score: float) =
         matchingScore <- matchingScore + score
 
@@ -38,6 +42,7 @@ type MatchingEllipses (radiusMin: float) =
     member this.Ellipses : Ellipse list =
         List.ofSeq ellipses |> List.map (fun e -> e.Ellipse)
 
+    // Process all ellipses and return ellipses ordered from the best score to the worst.
     member this.PrunedEllipses : Ellipse list =
         if ellipses.Count = 0
         then
@@ -64,8 +69,8 @@ type MatchingEllipses (radiusMin: float) =
                             let matchingScore = 2.0 * commonArea / (areaE + areaOther)
                             if matchingScore >= matchingScoreThreshold1
                             then
-                                other.AddMatchingScore(matchingScore)
-                                e.AddMatchingScore(matchingScore)
+                                other.AddMatchingScore(matchingScore * e.Ellipse.Perimeter)
+                                e.AddMatchingScore(matchingScore * other.Ellipse.Perimeter)
                         | _ -> ()
 
             // 3) Sort ellipses by their score.
@@ -93,7 +98,7 @@ type MatchingEllipses (radiusMin: float) =
                     for other in tree.Search window do
                         if not other.Removed && other.MatchingScore < e.MatchingScore
                         then
-                            if e.Ellipse.Contains other.Ellipse.Cx other.Ellipse.Cy
+                            if e.Ellipse.Scale(0.8).Contains other.Ellipse.Cx other.Ellipse.Cy
                             then
                                 other.Removed <- true
             ellipses.RemoveAll(fun e -> e.Removed) |> ignore