Cleaning, micro-optimizations.
[master-thesis.git] / Parasitemia / Parasitemia / ImgTools.fs
index cee21c7..b9a31f8 100644 (file)
@@ -45,6 +45,7 @@ let suppressMConnections (img: Matrix<byte>) =
             then
                 img.[i, j] <- 0uy
 
+
 let findEdges (img: Image<Gray, float32>) : Matrix<byte> * Image<Gray, float> * Image<Gray, float> =
     let w = img.Width
     let h = img.Height
@@ -76,10 +77,11 @@ let findEdges (img: Image<Gray, float32>) : Matrix<byte> * Image<Gray, float> *
     CvInvoke.CartToPolar(xGradient, yGradient, magnitudes, angles) // Compute the magnitudes (without angles).
 
     let thresholdHigh, thresholdLow =
-        let sensibility = 0.1
+        let sensibilityHigh = 0.1
+        let sensibilityLow = 0.1
         use magnitudesByte = magnitudes.Convert<byte>()
         let threshold = CvInvoke.Threshold(magnitudesByte, magnitudesByte, 0.0, 1.0, CvEnum.ThresholdType.Otsu ||| CvEnum.ThresholdType.Binary)
-        threshold + (sensibility * threshold), threshold - (sensibility * threshold)
+        threshold + (sensibilityHigh * threshold), threshold - (sensibilityLow * threshold)
 
     // Non-maximum suppression.
     use nms = new Matrix<byte>(xGradient.Size)
@@ -106,28 +108,20 @@ let findEdges (img: Image<Gray, float32>) : Matrix<byte> * Image<Gray, float> *
 
                 let mNeigbors (sign: int) : float =
                     if angle < Math.PI / 4.
-                    then
-                        ratio1 * magnitudes.Data.[i, j + sign] + ratio2 * magnitudes.Data.[i + sign, j + sign]
+                    then ratio1 * magnitudes.Data.[i, j + sign] + ratio2 * magnitudes.Data.[i + sign, j + sign]
                     elif angle < Math.PI / 2.
-                    then
-                        ratio2 * magnitudes.Data.[i + sign, j + sign] + ratio1 * magnitudes.Data.[i + sign, j]
+                    then ratio2 * magnitudes.Data.[i + sign, j + sign] + ratio1 * magnitudes.Data.[i + sign, j]
                     elif angle < 3.0 * Math.PI / 4.
-                    then
-                        ratio1 * magnitudes.Data.[i + sign, j] + ratio2 * magnitudes.Data.[i + sign, j - sign]
+                    then ratio1 * magnitudes.Data.[i + sign, j] + ratio2 * magnitudes.Data.[i + sign, j - sign]
                     elif angle < Math.PI
-                    then
-                        ratio2 * magnitudes.Data.[i + sign, j - sign] + ratio1 * magnitudes.Data.[i, j - sign]
+                    then ratio2 * magnitudes.Data.[i + sign, j - sign] + ratio1 * magnitudes.Data.[i, j - sign]
                     elif angle < 5. * Math.PI / 4.
-                    then
-                        ratio1 * magnitudes.Data.[i, j - sign] + ratio2 * magnitudes.Data.[i - sign, j - sign]
+                    then ratio1 * magnitudes.Data.[i, j - sign] + ratio2 * magnitudes.Data.[i - sign, j - sign]
                     elif angle < 3. * Math.PI / 2.
-                    then
-                        ratio2 * magnitudes.Data.[i - sign, j - sign] + ratio1 * magnitudes.Data.[i - sign, j]
+                    then ratio2 * magnitudes.Data.[i - sign, j - sign] + ratio1 * magnitudes.Data.[i - sign, j]
                     elif angle < 7. * Math.PI / 4.
-                    then
-                        ratio1 * magnitudes.Data.[i - sign, j] + ratio2 * magnitudes.Data.[i - sign, j + sign]
-                    else
-                        ratio2 * magnitudes.Data.[i - sign, j + sign] + ratio1 * magnitudes.Data.[i, j + sign]
+                    then ratio1 * magnitudes.Data.[i - sign, j] + ratio2 * magnitudes.Data.[i - sign, j + sign]
+                    else ratio2 * magnitudes.Data.[i - sign, j + sign] + ratio1 * magnitudes.Data.[i, j + sign]
 
                 let m = magnitudes.Data.[i, j]
                 if m >= thresholdLow && m > mNeigbors 1 && m > mNeigbors -1