projects
/
master-thesis.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Micro optimization to improve analysis speed by ~20%
[master-thesis.git]
/
Parasitemia
/
ParasitemiaCore
/
ImgTools
/
Histogram.fs
diff --git
a/Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs
b/Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs
index
92b73f6
..
df1ecb6
100644
(file)
--- a/
Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs
+++ b/
Parasitemia/ParasitemiaCore/ImgTools/Histogram.fs
@@
-6,14
+6,16
@@
open System.Drawing
open Emgu.CV
open Emgu.CV.Structure
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 =
let imgData = img.Data
let min, max =
@@
-24,20
+26,20
@@
let histogramImg (img: Image<Gray, float32>) (nbSamples: int) : Histogram =
img.MinMax(min, max, minLocation, maxLocation)
float32 (!min).[0], float32 (!max).[0]
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
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 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<float32>) (nbSamples
: int) : Histogram =
+let histogramMat (mat
: Matrix<float32>) (nbSamples
: int) : Histogram =
let matData = mat.Data
let min, max =
let matData = mat.Data
let min, max =
@@
-48,20
+50,20
@@
let histogramMat (mat: Matrix<float32>) (nbSamples: int) : Histogram =
mat.MinMax(min, max, minLocation, maxLocation)
float32 !min, float32 !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
let data = Array.zeroCreate nbSamples
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 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
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
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
let p = int ((x - min) / (max - min) * float32 nbSamples)
if p >= nbSamples then nbSamples - 1 else p