Little adjustments.
[master-thesis.git] / Parasitemia / Parasitemia / Classifier.fs
index c54a3b1..3113d6f 100644 (file)
@@ -75,7 +75,8 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img
                     | _ ->
                         None )
 
-        let ellipsesWithNeigbors = ellipses |> List.map (fun e -> e, neighbors e)
+        // We reverse the list to get the lower score ellipses first.
+        let ellipsesWithNeigbors = ellipses |> List.map (fun e -> e, neighbors e) |> List.rev
 
         // 2) Remove ellipses with a high standard deviation (high contrast).
         let globalStdDiviation = MathNet.Numerics.Statistics.StreamingStatistics.StandardDeviation(seq {
@@ -83,14 +84,13 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img
                 for x in 0 .. w - 1 do
                     yield img.Data.[y, x, 0] |> float })
 
-        for e, neighbors in List.rev ellipsesWithNeigbors do
+        for e in ellipses do
             let minX, minY, maxX, maxY = ellipseWindow e
 
             let stdDiviation = MathNet.Numerics.Statistics.StreamingStatistics.StandardDeviation(seq {
                 for y in (if minY < 0 then 0 else minY) .. (if maxY >= h then h - 1 else maxY) do
                     for x in (if minX < 0 then 0 else minX) .. (if maxX >= w then w - 1 else maxX) do
-                        let p = PointD(float x, float y)
-                        if pixelOwnedByE p e (neighbors |> List.choose (fun (otherE, p1, p2) -> if otherE.Removed then None else Some (Utils.lineFromTwoPoints p1 p2)))
+                        if e.Contains (float x) (float y)
                         then
                             yield img.Data.[y, x, 0] |> float })
 
@@ -157,7 +157,8 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img
                                 darkStainPixels <- darkStainPixels + 1
 
                 let cellClass =
-                    if float darkStainPixels > config.Parameters.maxDarkStainRatio * (float nbElement) (* ||
+                    if float darkStainPixels > config.Parameters.maxDarkStainRatio * (float nbElement) ||
+                       float stainPixels > config.Parameters.maxStainRatio * (float nbElement) (* ||
                         sqrt (((float sumCoords_x) / (float nbElement) - e.Cx) ** 2.0 + ((float sumCoords_y) / (float nbElement) - e.Cy) ** 2.0) > e.A * config.maxOffcenter *)
                     then
                         Peculiar