Micro optimization to improve analysis speed by ~20%
[master-thesis.git] / Parasitemia / ParasitemiaCore / ImgTools / Morpho.fs
index 4cb1f0b..6c8d7a0 100644 (file)
@@ -29,7 +29,7 @@ type ExtremumType =
     | Maxima = 1
     | Minima = 2
 
     | Maxima = 1
     | Minima = 2
 
-let findExtremum (img : Image<Gray, 'TDepth>) (extremumType : ExtremumType) : IEnumerable<Points> =
+let inline findExtremum (img : Image<Gray, 'TDepth>) (extremumType : ExtremumType) : IEnumerable<Points>  when 'TDepth : unmanaged =
     let w = img.Width
     let h = img.Height
     let se = [| -1, 0; 0, -1; 1, 0; 0, 1 |]
     let w = img.Width
     let h = img.Height
     let se = [| -1, 0; 0, -1; 1, 0; 0, 1 |]
@@ -66,7 +66,7 @@ let findExtremum (img : Image<Gray, 'TDepth>) (extremumType : ExtremumType) : IE
                             let level = imgData.[ni, nj, 0]
                             let notSuppressed = not suppress.[ni, nj]
 
                             let level = imgData.[ni, nj, 0]
                             let notSuppressed = not suppress.[ni, nj]
 
-                            if level = currentLevel && notSuppressed then
+                            if notSuppressed && level = currentLevel then
                                 suppress.[ni, nj] <- true
                                 sameLevelToCheck.Push(Point(nj, ni))
                             elif (if extremumType = ExtremumType.Maxima then level > currentLevel else level < currentLevel) then
                                 suppress.[ni, nj] <- true
                                 sameLevelToCheck.Push(Point(nj, ni))
                             elif (if extremumType = ExtremumType.Maxima then level > currentLevel else level < currentLevel) then
@@ -86,10 +86,10 @@ let findExtremum (img : Image<Gray, 'TDepth>) (extremumType : ExtremumType) : IE
 
     result.Select(fun l -> Points(l))
 
 
     result.Select(fun l -> Points(l))
 
-let findMaxima (img : Image<Gray, 'TDepth>) : IEnumerable<Points> =
+let inline findMaxima (img : Image<Gray, 'TDepth>) : IEnumerable<Points> when 'TDepth : unmanaged =
     findExtremum img ExtremumType.Maxima
 
     findExtremum img ExtremumType.Maxima
 
-let findMinima (img : Image<Gray, 'TDepth>) : IEnumerable<Points> =
+let inline findMinima (img : Image<Gray, 'TDepth>) : IEnumerable<Points> when 'TDepth : unmanaged =
     findExtremum img ExtremumType.Minima
 
 type PriorityQueue () =
     findExtremum img ExtremumType.Minima
 
 type PriorityQueue () =