open Utils
// All ellipses with a score below this are removed.
-let matchingScoreThreshold = 0.4f
+let matchingScoreThresholdPerRadiusUnit = 0.07f // For a radius of 1. // 0.25
let matchingScorePower = 20.f
-let windowSizeRadiusFactor = 1.f / 2.f
+let windowSizeRadiusFactor = 1.f / 2.f // Used when searching for neighbor ellipses.
let minimumDistanceFromCenterRadiusFactor = 1.f / 3.f
+let minimumAreaFactor = 1.1f;
type private EllipseScoreFlaggedKd (matchingScore: float32, e: Ellipse) =
let mutable matchingScore = matchingScore
| _ -> ()
// 3) Remove ellipses whose center is near the center of another ellipse with a better score.
+ let matchingScoreThreshold = matchingScoreThresholdPerRadiusUnit * radius
for e in ellipses do
if e.MatchingScore < matchingScoreThreshold
then
else
// Case where ellipses are overlapped.
match EEOver.EEOverlapArea e.Ellipse other.Ellipse with
- | Some (overlapArea, _, _) when e.Ellipse.Area < 1.1f * overlapArea || other.Ellipse.Area < 1.1f * overlapArea ->
+ | Some (overlapArea, _, _) when e.Ellipse.Area < minimumAreaFactor * overlapArea || other.Ellipse.Area < minimumAreaFactor * overlapArea ->
other.Removed <- true
| _ ->
()