X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemiaCore%2FImgTools%2FHistogram.fs;h=718a9de62254f3c8c4186aa39ef102fc068b1531;hp=92b73f613b13751cbbae2855d4b63f23145e7752;hb=2d712781def419c9acc98368f7102b19b064f16d;hpb=3f8b0d281b3058faf23dbd0363de440bd04c6574 diff --git a/Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs b/Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs index 92b73f6..718a9de 100644 --- a/Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs +++ b/Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs @@ -6,62 +6,64 @@ open System.Drawing open Emgu.CV open Emgu.CV.Structure -type Histogram = { - data: int[] - total: int // Number of elements. - sum: int // Sum of all intensity. - min: float32 - max: float32 } - -let histogramImg (img: Image) (nbSamples: int) : Histogram = +type Histogram = + { + data : int[] + total : int // Number of elements. + sum : int // Sum of all intensity. + min : float32 + max : float32 + } + +let histogramImg (img : Image) (nbSamples : int) : Histogram = let imgData = img.Data let min, max = 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) float32 (!min).[0], float32 (!max).[0] - let inline bin (x: float32) : int = + let inline bin (x : float32) : int = let p = int ((x - min) / (max - min) * float32 nbSamples) if p >= nbSamples then nbSamples - 1 else p let data = Array.zeroCreate nbSamples - for i in 0 .. img.Height - 1 do - for j in 0 .. img.Width - 1 do + for i = 0 to img.Height - 1 do + for j = 0 to img.Width - 1 do let p = bin imgData.[i, j, 0] data.[p] <- data.[p] + 1 { data = data; total = img.Height * img.Width; sum = Array.sum data; min = min; max = max } -let histogramMat (mat: Matrix) (nbSamples: int) : Histogram = +let histogramMat (mat : Matrix) (nbSamples : int) : Histogram = let matData = mat.Data let min, max = let min = ref 0.0 - let minLocation = ref <| Point() + let minLocation = ref <| Point () let max = ref 0.0 - let maxLocation = ref <| Point() - mat.MinMax(min, max, minLocation, maxLocation) + let maxLocation = ref <| Point () + mat.MinMax (min, max, minLocation, maxLocation) float32 !min, float32 !max - let inline bin (x: float32) : int = + let inline bin (x : float32) : int = let p = int ((x - min) / (max - min) * float32 nbSamples) if p >= nbSamples then nbSamples - 1 else p let data = Array.zeroCreate nbSamples - for i in 0 .. mat.Height - 1 do - for j in 0 .. mat.Width - 1 do + for i = 0 to mat.Height - 1 do + for j = 0 to mat.Width - 1 do let p = bin matData.[i, j] data.[p] <- data.[p] + 1 { data = data; total = mat.Height * mat.Width; sum = Array.sum data; min = min; max = max } -let histogram (values: float32 seq) (nbSamples: int) : Histogram = +let histogram (values : float32 seq) (nbSamples : int) : Histogram = let mutable min = Single.MaxValue let mutable max = Single.MinValue let mutable n = 0 @@ -71,7 +73,7 @@ let histogram (values: float32 seq) (nbSamples: int) : Histogram = if v < min then min <- v if v > max then max <- v - let inline bin (x: float32) : int = + let inline bin (x : float32) : int = let p = int ((x - min) / (max - min) * float32 nbSamples) if p >= nbSamples then nbSamples - 1 else p