X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FClassifier.fs;h=3113d6fa31b588eaab0caf2ff48bbfb83833f3a7;hp=c54a3b1d27a3dd73548090dbbc51470f573fc0bb;hb=ca3f764fc93defb480bb9b1c34e9c41447cc07e0;hpb=21ce317bce2e1b58803bbb1be439161251478568 diff --git a/Parasitemia/Parasitemia/Classifier.fs b/Parasitemia/Parasitemia/Classifier.fs index c54a3b1..3113d6f 100644 --- a/Parasitemia/Parasitemia/Classifier.fs +++ b/Parasitemia/Parasitemia/Classifier.fs @@ -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