X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FImgTools.fs;h=b9a31f8a5da2e9e1dd66adaaa30e59c9c741258c;hp=cee21c77d5c60fa26c8e25f4c2afa34c15056543;hb=53440e757b4a4ab2a81b0f6a5dd1a2002c0133ba;hpb=962440dfe579569ba7e3ebba6f878cb575d1fc02 diff --git a/Parasitemia/Parasitemia/ImgTools.fs b/Parasitemia/Parasitemia/ImgTools.fs index cee21c7..b9a31f8 100644 --- a/Parasitemia/Parasitemia/ImgTools.fs +++ b/Parasitemia/Parasitemia/ImgTools.fs @@ -45,6 +45,7 @@ let suppressMConnections (img: Matrix) = then img.[i, j] <- 0uy + let findEdges (img: Image) : Matrix * Image * Image = let w = img.Width let h = img.Height @@ -76,10 +77,11 @@ let findEdges (img: Image) : Matrix * Image * 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() 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(xGradient.Size) @@ -106,28 +108,20 @@ let findEdges (img: Image) : Matrix * Image * 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