X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FImageAnalysis.fs;fp=Parasitemia%2FParasitemia%2FImageAnalysis.fs;h=21616af998206b0db498bbbfb18d7cc40444c34f;hp=0b96757a4349fe6fd6bebe19334d3b1cd86ad168;hb=06bd63d8c01100c28873dfafd59b5efccbfb67e4;hpb=dec96d50e56e1932bbfa09e6bedf90d6b707ccbd diff --git a/Parasitemia/Parasitemia/ImageAnalysis.fs b/Parasitemia/Parasitemia/ImageAnalysis.fs index 0b96757..21616af 100644 --- a/Parasitemia/Parasitemia/ImageAnalysis.fs +++ b/Parasitemia/Parasitemia/ImageAnalysis.fs @@ -11,13 +11,13 @@ open ImgTools open Config open Types -type Result = { +(*type Result = { RBCPositions : Point list infectedRBCPositions : Point list img: Image -} +}*) -let doAnalysis (img: Image) (config: Config) : Result = +let doAnalysis (img: Image) (config: Config) : Classifier.Cell list = let imgFloat = img.Convert() use scaledImg = if config.scale = 1.0 then imgFloat else imgFloat.Resize(config.scale, CvEnum.Inter.Area) @@ -75,16 +75,8 @@ let doAnalysis (img: Image) (config: Config) : Result = use magnitudesByte = ((magnitudes / !max) * 255.0).Convert() // Otsu from OpenCV only support 'byte'. use edges = new Matrix(xEdges.Size) - let threshold = CvInvoke.Threshold(magnitudesByte, edges, 0.0, 1.0, CvEnum.ThresholdType.Otsu ||| CvEnum.ThresholdType.Binary) - -// let filteredGreenMat = new Matrix(filteredGreen.Size) -// filteredGreen.CopyTo(filteredGreenMat) - let parasites = ParasitesMarker.find green filteredGreen config - - saveImg parasites.darkStain "parasites_dark_stain.png" - saveImg parasites.stain "parasites_stain.png" - saveImg parasites.infection "parasites_infection.png" - + CvInvoke.Threshold(magnitudesByte, edges, 0.0, 1.0, CvEnum.ThresholdType.Otsu ||| CvEnum.ThresholdType.Binary) |> ignore + logTime "Finding edges" (fun() -> thin edges) @@ -93,6 +85,15 @@ let doAnalysis (img: Image) (config: Config) : Result = saveMat (edges * 255.0) "edges.png" + + let kmediansResults = KMedians.kmedians filteredGreen 1.0 + + let parasites = ParasitesMarker.find green filteredGreen kmediansResults config + + saveImg parasites.darkStain "parasites_dark_stain.png" + saveImg parasites.stain "parasites_stain.png" + saveImg parasites.infection "parasites_infection.png" + let radiusRange = config.scale * 20.0, config.scale * 40.0 let windowSize = roundInt (1.6 * (snd radiusRange)) let factorNbPick = 1.5 @@ -102,7 +103,7 @@ let doAnalysis (img: Image) (config: Config) : Result = drawEllipses img ellipses (Bgr(0.0, 255.0, 255.0)) //saveImg img "ellipses.png" - { RBCPositions = []; infectedRBCPositions = []; img = img } + Classifier.findCells ellipses parasites kmediansResults.fg //