X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemiaCore%2FKMedians.fs;h=b2ac7382a16b98ecdb44f0efcf5218a56b33a27a;hp=5819a669ebea52ef18e897fb5cae6f2e57d653e5;hb=2d712781def419c9acc98368f7102b19b064f16d;hpb=4bfa3cbdc6145e6944f02e24829ab2ef3a851ac1 diff --git a/Parasitemia/ParasitemiaCore/KMedians.fs b/Parasitemia/ParasitemiaCore/KMedians.fs index 5819a66..b2ac738 100644 --- a/Parasitemia/ParasitemiaCore/KMedians.fs +++ b/Parasitemia/ParasitemiaCore/KMedians.fs @@ -6,46 +6,49 @@ open System.Drawing open Emgu.CV open Emgu.CV.Structure -type Result = { - fg: Image - median_bg: float - median_fg: float - d_fg: Image } // Euclidean distances of the foreground to median_fg. - -let kmedians (img: Image) : Result = +type Result = + { + fg : Image + median_bg : float + median_fg : float + d_fg : Image // Euclidean distances of the foreground to median_fg. + } + +let kmedians (img : Image) : Result = let nbIteration = 4 let w = img.Width let h = img.Height let min = ref [| 0.0 |] - let minLocation = ref <| [| Point() |] + let minLocation = ref <| [| Point () |] let max = ref [| 0.0 |] - let maxLocation = ref <| [| Point() |] - img.MinMax(min, max, minLocation, maxLocation) + let maxLocation = ref <| [| Point () |] + img.MinMax (min, max, minLocation, maxLocation) let mutable median_bg = (!max).[0] - ((!max).[0] - (!min).[0]) / 4.0 let mutable median_fg = (!min).[0] + ((!max).[0] - (!min).[0]) / 4.0 - use mutable d_bg = new Image(img.Size) - let mutable d_fg = new Image(img.Size) - let mutable fg = new Image(img.Size) + use mutable d_bg = new Image (img.Size) + let mutable d_fg = new Image (img.Size) + let mutable fg = new Image (img.Size) - for i in 1 .. nbIteration do - d_bg <- img.AbsDiff(Gray(median_bg)) - d_fg <- img.AbsDiff(Gray(median_fg)) + for i = 1 to nbIteration do + d_bg <- img.AbsDiff (Gray median_bg) + d_fg <- img.AbsDiff (Gray median_fg) - CvInvoke.Compare(d_fg, d_bg, fg, CvEnum.CmpType.LessThan) + CvInvoke.Compare (d_fg, d_bg, fg, CvEnum.CmpType.LessThan) - let bg_values = List() - let fg_values = List() + let bg_values = List () + let fg_values = List () - for i in 0 .. h - 1 do - for j in 0 .. w - 1 do - if fg.Data.[i, j, 0] > 0uy - then fg_values.Add(float img.Data.[i, j, 0]) - else bg_values.Add(float img.Data.[i, j, 0]) + for i = 0 to h - 1 do + for j = 0 to w - 1 do + if fg.Data.[i, j, 0] > 0uy then + fg_values.Add (float img.Data.[i, j, 0]) + else + bg_values.Add (float img.Data.[i, j, 0]) - median_bg <- MathNet.Numerics.Statistics.Statistics.Median(bg_values) - median_fg <- MathNet.Numerics.Statistics.Statistics.Median(fg_values) + median_bg <- MathNet.Numerics.Statistics.Statistics.Median bg_values + median_fg <- MathNet.Numerics.Statistics.Statistics.Median fg_values { fg = fg; median_bg = median_bg; median_fg = median_fg; d_fg = d_fg }