X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FImageAnalysis.fs;h=0b96757a4349fe6fd6bebe19334d3b1cd86ad168;hp=1215965e961deb67086d2b339cf74f88be0199e3;hb=dec96d50e56e1932bbfa09e6bedf90d6b707ccbd;hpb=ba64921fb9a0c36cd8cf802cbf1b2c0f79bc25f6 diff --git a/Parasitemia/Parasitemia/ImageAnalysis.fs b/Parasitemia/Parasitemia/ImageAnalysis.fs index 1215965..0b96757 100644 --- a/Parasitemia/Parasitemia/ImageAnalysis.fs +++ b/Parasitemia/Parasitemia/ImageAnalysis.fs @@ -41,7 +41,7 @@ let doAnalysis (img: Image) (config: Config) : Result = //let test = greenMatrix.[10, 10] use filteredGreen = (gaussianFilter green config.doGSigma1) - config.doGLowFreqPercentageReduction * (gaussianFilter green config.doGSigma2) - + use sobelKernel = new ConvolutionKernelF(array2D [[ 1.0f; 0.0f; -1.0f ] [ 2.0f; 0.0f; -2.0f ] @@ -75,19 +75,32 @@ 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) - thin edges - removeArea edges 12 + 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" + + logTime "Finding edges" (fun() -> + thin edges) + + logTime "Removing small connected components" (fun () -> + removeArea edges 12) saveMat (edges * 255.0) "edges.png" let radiusRange = config.scale * 20.0, config.scale * 40.0 let windowSize = roundInt (1.6 * (snd radiusRange)) - let factorNbPick = 1.0; - let ellipses = Ellipse.find edges xEdges yEdges radiusRange windowSize factorNbPick - - drawEllipse img (List.head ellipses) (Bgr(0.0, 255.0, 255.0)) - saveImg img "ellipses.png" + let factorNbPick = 1.5 + let ellipses = logTime "Finding ellipses" (fun () -> + Ellipse.find edges xEdges yEdges radiusRange windowSize factorNbPick) + + drawEllipses img ellipses (Bgr(0.0, 255.0, 255.0)) + //saveImg img "ellipses.png" { RBCPositions = []; infectedRBCPositions = []; img = img }