X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FKMedians.fs;fp=Parasitemia%2FParasitemia%2FKMedians.fs;h=0000000000000000000000000000000000000000;hp=d0056510551fdd63b0367f33958f8118d21035b6;hb=4bfa3cbdc6145e6944f02e24829ab2ef3a851ac1;hpb=48ecdfc43001c444eff6ad442986049384674af2 diff --git a/Parasitemia/Parasitemia/KMedians.fs b/Parasitemia/Parasitemia/KMedians.fs deleted file mode 100644 index d005651..0000000 --- a/Parasitemia/Parasitemia/KMedians.fs +++ /dev/null @@ -1,54 +0,0 @@ -module KMedians - -open System.Collections.Generic -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 = - let nbIteration = 4 - let w = img.Width - let h = img.Height - - let min = ref [| 0.0 |] - let minLocation = ref <| [| Point() |] - let max = ref [| 0.0 |] - 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) - - for i in 1 .. 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) - - 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]) - - 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 } - - - -