projects
/
master-thesis.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add some GUI elements :
[master-thesis.git]
/
Parasitemia
/
ParasitemiaCore
/
MatchingEllipses.fs
diff --git
a/Parasitemia/ParasitemiaCore/MatchingEllipses.fs
b/Parasitemia/ParasitemiaCore/MatchingEllipses.fs
index
c7a0627
..
3ed8ad6
100644
(file)
--- a/
Parasitemia/ParasitemiaCore/MatchingEllipses.fs
+++ b/
Parasitemia/ParasitemiaCore/MatchingEllipses.fs
@@
-9,6
+9,12
@@
open System.Collections.Generic
open Types
open Utils
open Types
open Utils
+// All ellipses with a score below this are removed.
+let matchingScoreThreshold = 0.4f
+let matchingScorePower = 20.f
+let windowSizeRadiusFactor = 1.f / 2.f
+let minimumDistanceFromCenterRadiusFactor = 1.f / 3.f
+
type private EllipseScoreFlaggedKd (matchingScore: float32, e: Ellipse) =
let mutable matchingScore = matchingScore
type private EllipseScoreFlaggedKd (matchingScore: float32, e: Ellipse) =
let mutable matchingScore = matchingScore
@@
-29,9
+35,6
@@
type private EllipseScoreFlaggedKd (matchingScore: float32, e: Ellipse) =
type MatchingEllipses (radius: float32) =
let ellipses = List<EllipseScoreFlaggedKd>()
type MatchingEllipses (radius: float32) =
let ellipses = List<EllipseScoreFlaggedKd>()
- // All ellipses with a score below this are removed.
- let matchingScoreThreshold = 0.4f
-
member this.Add (e: Ellipse) =
ellipses.Add(EllipseScoreFlaggedKd(0.f, e))
member this.Add (e: Ellipse) =
ellipses.Add(EllipseScoreFlaggedKd(0.f, e))
@@
-47,7
+50,7
@@
type MatchingEllipses (radius: float32) =
let tree = KdTree.Tree.BuildTree (List.ofSeq ellipses)
// 2) Compute the matching score of each ellipses.
let tree = KdTree.Tree.BuildTree (List.ofSeq ellipses)
// 2) Compute the matching score of each ellipses.
- let windowSize = radius
/ 3.f
+ let windowSize = radius
* windowSizeRadiusFactor
for e in ellipses do
e.Processed <- true
let areaE = e.Ellipse.Area
for e in ellipses do
e.Processed <- true
let areaE = e.Ellipse.Area
@@
-63,7
+66,7
@@
type MatchingEllipses (radius: float32) =
| Some (overlapArea, _, _)
// Because of approximation error, see https://github.com/chraibi/EEOver/issues/4
when overlapArea - areaE < 1.f && overlapArea - areaOther < 1.f ->
| Some (overlapArea, _, _)
// Because of approximation error, see https://github.com/chraibi/EEOver/issues/4
when overlapArea - areaE < 1.f && overlapArea - areaOther < 1.f ->
- let matchingScore = (2.f * overlapArea / (areaE + areaOther)) **
30.f
+ let matchingScore = (2.f * overlapArea / (areaE + areaOther)) **
matchingScorePower
other.AddMatchingScore(matchingScore)
e.AddMatchingScore(matchingScore)
| _ -> ()
other.AddMatchingScore(matchingScore)
e.AddMatchingScore(matchingScore)
| _ -> ()
@@
-82,7
+85,7
@@
type MatchingEllipses (radius: float32) =
if not other.Removed && e.MatchingScore > other.MatchingScore
then
// Case where ellipses are too close.
if not other.Removed && e.MatchingScore > other.MatchingScore
then
// Case where ellipses are too close.
- if distanceTwoPoints (PointF(e.Ellipse.Cx, e.Ellipse.Cy)) (PointF(other.Ellipse.Cx, other.Ellipse.Cy)) <
0.3f
* e.Ellipse.B
+ if distanceTwoPoints (PointF(e.Ellipse.Cx, e.Ellipse.Cy)) (PointF(other.Ellipse.Cx, other.Ellipse.Cy)) <
minimumDistanceFromCenterRadiusFactor
* e.Ellipse.B
then
other.Removed <- true
else
then
other.Removed <- true
else