Update coding style.
[master-thesis.git] / Parasitemia / ParasitemiaCore / Classifier.fs
index 36e2851..9b247f4 100644 (file)
@@ -45,7 +45,7 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
         let pixelOwnedByE (p : PointF) (e : EllipseFlaggedKd) (neighbors : (EllipseFlaggedKd * PointF * PointF) list) =
             e.Contains p.X p.Y &&
             seq {
-                let c = PointF(e.Cx, e.Cy)
+                let c = PointF (e.Cx, e.Cy)
 
                 for e', d1 in
                     (neighbors
@@ -58,7 +58,7 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
                     )) do
                     if e'.State = e.State then // Peculiar vs peculiar or RBC vs RBC.
                         let d2 = lineFromTwoPoints c p
-                        let c' = PointF(e'.Cx, e'.Cy)
+                        let c' = PointF (e'.Cx, e'.Cy)
                         let v = pointFromTwoLines d1 (lineFromTwoPoints c c')
                         let case1 = sign (v.X - c.X) <> sign (v.X - c'.X) || Utils.squaredDistanceTwoPoints v c > Utils.squaredDistanceTwoPoints v c'
                         if not (Single.IsInfinity d2.A) then
@@ -91,18 +91,19 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
             if e.State <> CellState.Removed then
                 tree.Search (searchRegion e)
                     // We only keep the ellipses touching 'e'.
-                    |> List.choose (fun otherE ->
-                        if e <> otherE then
-                            match EEOver.EEOverlapArea e otherE with
-                            | Some (_, px, _) when px.Length > 2 ->
-                                otherE.State <- CellState.Removed
-                                None
-                            | Some (area, px, py) when area > 0.f && px.Length = 2 ->
-                                Some (otherE, PointF(px.[0], py.[0]), PointF(px.[1], py.[1]))
-                            | _ ->
+                    |> List.choose (
+                        fun otherE ->
+                            if e <> otherE then
+                                match EEOver.EEOverlapArea e otherE with
+                                | Some (_, px, _) when px.Length > 2 ->
+                                    otherE.State <- CellState.Removed
+                                    None
+                                | Some (area, px, py) when area > 0.f && px.Length = 2 ->
+                                    Some (otherE, PointF (px.[0], py.[0]), PointF (px.[1], py.[1]))
+                                | _ ->
+                                    None
+                            else
                                 None
-                        else
-                            None
                     )
             else
                 []
@@ -117,7 +118,7 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
         // 3) Remove ellipses with a high standard deviation (high contrast).
         // Obsolete. It was useful when the ellipses result quality wasn't good.
         (* let imgData = img.Data
-        let globalStdDeviation = MathNet.Numerics.Statistics.Statistics.PopulationStandardDeviation(seq {
+        let globalStdDeviation = MathNet.Numerics.Statistics.Statistics.PopulationStandardDeviation (seq {
             for y in 0 .. h - 1 do
                 for x in 0 .. w - 1 do
                     yield float imgData.[y, x, 0] })
@@ -145,7 +146,7 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
                 let mutable area = 0
                 for y = (if minY < 0 then 0 else minY) to (if maxY >= height then height - 1 else maxY) do
                     for x = (if minX < 0 then 0 else minX) to (if maxX >= width then width - 1 else maxX) do
-                        let p = PointF(float32 x, float32 y)
+                        let p = PointF (float32 x, float32 y)
                         if pixelOwnedByE p e neighbors then
                             area <- area + 1
 
@@ -155,22 +156,24 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
         // 5) Define non-rbc (peculiar) cells.
         let darkStainData = parasites.darkStain.Data
         ellipsesWithNeigbors
-        |> List.choose (fun (e, neighbors) ->
-            if e.State = CellState.Removed then
-                None
-            else
-                let mutable darkStainPixels = 0
-                let mutable nbElement = 0
-                let minX, minY, maxX, maxY = ellipseWindow e
-                for y = minY to maxY do
-                    for x = minX to maxX do
-                        let p = PointF(float32 x, float32 y)
-                        if pixelOwnedByE p e neighbors then
-                            nbElement <- nbElement + 1
-                            if darkStainData.[y, x, 0] > 0uy then
-                                darkStainPixels <- darkStainPixels + 1
+        |> List.choose (
+            fun (e, neighbors) ->
+                if e.State = CellState.Removed then
+                    None
+                else
+                    let mutable darkStainPixels = 0
+                    let mutable nbElement = 0
+                    let minX, minY, maxX, maxY = ellipseWindow e
+                    for y = minY to maxY do
+                        for x = minX to maxX do
+                            let p = PointF (float32 x, float32 y)
+                            if pixelOwnedByE p e neighbors then
+                                nbElement <- nbElement + 1
+                                if darkStainData.[y, x, 0] > 0uy then
+                                    darkStainPixels <- darkStainPixels + 1
 
-                if float darkStainPixels > config.Parameters.maxDarkStainRatio * (float nbElement) then Some e else None)
+                    if float darkStainPixels > config.Parameters.maxDarkStainRatio * (float nbElement) then Some e else None
+        )
 
         // We do not change the state during the process to avoid to have peculiar neighbors which change the behavior of 'pixelOwnedByE'.
         |> List.iter (fun e -> e.State <- CellState.Peculiar)
@@ -191,30 +194,30 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
                 else
                     let minX, minY, maxX, maxY = ellipseWindow e
 
-                    let nucleusPixels = List<Point>()
-                    let parasitePixels = List<Point>()
+                    let nucleusPixels = List<Point> ()
+                    let parasitePixels = List<Point> ()
 
                     let mutable nbElement = 0
 
-                    let elements = new Matrix<byte>(maxY - minY + 1, maxX - minX + 1)
+                    let elements = new Matrix<byte> (maxY - minY + 1, maxX - minX + 1)
                     for y = minY to maxY do
                         for x = minX to maxX do
-                            let p = PointF(float32 x, float32 y)
+                            let p = PointF (float32 x, float32 y)
                             if pixelOwnedByE p e neighbors then
                                 elements.[y - minY, x - minX] <- 1uy
                                 nbElement <- nbElement + 1
 
                                 if nucleusData.[y, x, 0] > 0uy then
-                                    nucleusPixels.Add(Point(x, y))
+                                    nucleusPixels.Add (Point (x, y))
 
                                 if parasiteData.[y, x, 0] > 0uy then
-                                    parasitePixels.Add(Point(x, y))
+                                    parasitePixels.Add (Point (x, y))
 
                     let parasiteArea =
                         if nucleusPixels.Count > 0 then
                             seq {
                                 for parasitePixel in parasitePixels do
-                                    if nucleusPixels.Exists(fun p -> pown (p.X - parasitePixel.X) 2 + pown (p.Y - parasitePixel.Y) 2 <= diameterParasiteSquared) then
+                                    if nucleusPixels.Exists (fun p -> pown (p.X - parasitePixel.X) 2 + pown (p.Y - parasitePixel.Y) 2 <= diameterParasiteSquared) then
                                         yield 1
                             } |> Seq.sum
                         else
@@ -236,7 +239,7 @@ let findCells (ellipses : Ellipse list) (parasites : ParasitesMarker.Result) (wi
                     Some
                         {
                             cellClass = cellClass
-                            center = Point(roundInt e.Cx, roundInt e.Cy)
+                            center = Point (roundInt e.Cx, roundInt e.Cy)
                             nucleusArea = if cellClass = InfectedRBC then nucleusPixels.Count else 0
                             parasiteArea = parasiteArea
                             elements = elements