X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FClassifier.fs;h=52e7dc6ad880e6dd53f97d914fd9eee8d748b1dd;hp=37507c5e927c1b685c5bd3a541afd4ec57821608;hb=5b68d946369f998865d2dd330fd3b374b2b9a0ad;hpb=e76da913cd58078ad2479357b2430ed62a6e0777 diff --git a/Parasitemia/Parasitemia/Classifier.fs b/Parasitemia/Parasitemia/Classifier.fs index 37507c5..52e7dc6 100644 --- a/Parasitemia/Parasitemia/Classifier.fs +++ b/Parasitemia/Parasitemia/Classifier.fs @@ -41,8 +41,9 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (fg: cx - a, cy - a, cx + a, cy + a // 1) Remove ellipses touching the edges. - let ellipsesInside = ellipses |> List.map (fun e -> - EllipseFlaggedKd (e, Removed = e.isOutside (float fg.Width) (float fg.Height))) + let w = float fg.Width + let h = float fg.Height + let ellipsesInside = ellipses |> List.map (fun e -> EllipseFlaggedKd (e, Removed = e.isOutside w h)) // 2) Associate touching ellipses with each ellipses. let tree = KdTree.Tree.BuildTree ellipsesInside @@ -59,7 +60,6 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (fg: let ellipsesWithNeigbors = ellipsesInside |> List.choose (fun e -> if e.Removed then None else Some (e, neighbors e)) // 3) Remove ellipse with a lower percentage of foreground. - let fgData = fg.Data for e, neighbors in ellipsesWithNeigbors do let minX, minY, maxX, maxY = ellipseWindow e @@ -72,7 +72,7 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (fg: if e.Contains xf yf && neighbors |> List.forall (fun (otherE, _, _) -> not <| otherE.Contains xf yf) then totalElement <- totalElement + 1 - if fgData.[y, x, 0] > 0uy + if fg.Data.[y, x, 0] > 0uy then fgElement <- fgElement + 1 @@ -94,7 +94,6 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (fg: yield sign (c.X - p.X) <> sign (c.X - p'.X) || Utils.squaredDistanceTwoPoints c p' > Utils.squaredDistanceTwoPoints c p // 'false' -> the point is owned by another ellipse. } |> Seq.forall id - ellipsesWithNeigbors |> List.choose (fun (e, neighbors) -> if e.Removed