X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FMatchingEllipses.fs;h=6e6218d7edb65235faea85ae6867c58bfeca4274;hb=ca3f764fc93defb480bb9b1c34e9c41447cc07e0;hp=da74c65655c396bba8a4bd241ccee4ddf2283ddb;hpb=10afa9a402eb88c8e073fe8b0d607faa25230eef;p=master-thesis.git diff --git a/Parasitemia/Parasitemia/MatchingEllipses.fs b/Parasitemia/Parasitemia/MatchingEllipses.fs index da74c65..6e6218d 100644 --- a/Parasitemia/Parasitemia/MatchingEllipses.fs +++ b/Parasitemia/Parasitemia/MatchingEllipses.fs @@ -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