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<Gray, float32>) (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<Gray, float32>) (nbSamples : int) : Histogram =
let imgData = img.Data
let min, max =
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
{ data = data; total = img.Height * img.Width; sum = Array.sum data; min = min; max = max }
-let histogramMat (mat: Matrix<float32>) (nbSamples: int) : Histogram =
+let histogramMat (mat : Matrix<float32>) (nbSamples : int) : Histogram =
let matData = mat.Data
let min, max =
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
{ 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
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