X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FClassifier.fs;h=99b6edc0ad4d55518eee7096a8778d8b9b375937;hb=f9ee9f2c0c1194a6a8f7475ee2ca0b7076b32261;hp=c54a3b1d27a3dd73548090dbbc51470f573fc0bb;hpb=21ce317bce2e1b58803bbb1be439161251478568;p=master-thesis.git diff --git a/Parasitemia/Parasitemia/Classifier.fs b/Parasitemia/Parasitemia/Classifier.fs index c54a3b1..99b6edc 100644 --- a/Parasitemia/Parasitemia/Classifier.fs +++ b/Parasitemia/Parasitemia/Classifier.fs @@ -21,7 +21,7 @@ type private EllipseFlaggedKd (e: Ellipse) = member this.Y = this.Cy -let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker2.Result) (img: Image) (config: Config.Config) : Cell list = +let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (img: Image) (config: Config.Config) : Cell list = if ellipses.IsEmpty then [] @@ -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,11 +157,12 @@ 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 - elif infectedPixels.Count > config.Parameters.parasitePixelsRequired + elif infectedPixels.Count >= 1 then let infectionToRemove = ImgTools.connectedComponents parasites.stain infectedPixels for p in infectionToRemove do