Cleaning.
[master-thesis.git] / Parasitemia / Parasitemia / Classifier.fs
index 4c6cc56..a12e595 100644 (file)
@@ -29,10 +29,10 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img
         let infection = parasites.infection.Copy() // To avoid to modify the parameter.
 
         // This is the minimum window size to check if other ellipses touch 'e'.
-        let searchRegion (e: Ellipse) = { KdTree.minX = e.Cx - (e.A + config.RBCMax) * config.Parameters.scale
-                                          KdTree.maxX = e.Cx + (e.A + config.RBCMax) * config.Parameters.scale
-                                          KdTree.minY = e.Cy - (e.A + config.RBCMax) * config.Parameters.scale
-                                          KdTree.maxY = e.Cy + (e.A + config.RBCMax) * config.Parameters.scale }
+        let searchRegion (e: Ellipse) = { KdTree.minX = e.Cx - (e.A + config.RBCMaxRadius) * config.Parameters.scale
+                                          KdTree.maxX = e.Cx + (e.A + config.RBCMaxRadius) * config.Parameters.scale
+                                          KdTree.minY = e.Cy - (e.A + config.RBCMaxRadius) * config.Parameters.scale
+                                          KdTree.maxY = e.Cy + (e.A + config.RBCMaxRadius) * config.Parameters.scale }
 
         // The minimum window to contain a given ellipse.
         let ellipseWindow (e: Ellipse) =
@@ -114,8 +114,12 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img
                 let c = PointD(e.Cx, e.Cy)
                 for d1 in lines do
                     let d2 = Utils.lineFromTwoPoints c p
-                    let p' = Utils.pointFromTwoLines d1 d2
-                    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.
+                    if d2.Valid
+                    then
+                        let p' = Utils.pointFromTwoLines d1 d2
+                        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.
+                    else
+                        yield true
             } |> Seq.forall id
 
         ellipsesWithNeigbors
@@ -171,7 +175,7 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img
                         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
-                    elif infectedPixels.Count > config.Parameters.infectionPixelsRequired
+                    elif infectedPixels.Count > config.Parameters.parasitePixelsRequired
                     then
                         let infectionToRemove = ImgTools.connectedComponents parasites.stain infectedPixels
                         for p in infectionToRemove do