X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FClassifier.fs;h=a12e595b372e90ea08ef95c04a6e4eea1dbe235f;hp=4c6cc564cfc621d9a121c1c43f6319c52435b2b3;hb=6d99ab0dadc57e91cd846844b620fc90b52a2f96;hpb=70c9b65e9034c14b5c63345cda3d5d579bbdc57c diff --git a/Parasitemia/Parasitemia/Classifier.fs b/Parasitemia/Parasitemia/Classifier.fs index 4c6cc56..a12e595 100644 --- a/Parasitemia/Parasitemia/Classifier.fs +++ b/Parasitemia/Parasitemia/Classifier.fs @@ -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