| _ ->
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 {
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 })
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