open Config
open Types
-type Result = {
+(*type Result = {
RBCPositions : Point list
infectedRBCPositions : Point list
img: Image<Bgr, byte>
-}
+}*)
-let doAnalysis (img: Image<Bgr, byte>) (config: Config) : Result =
+let doAnalysis (img: Image<Bgr, byte>) (config: Config) : Classifier.Cell list =
let imgFloat = img.Convert<Bgr, float32>()
use scaledImg = if config.scale = 1.0 then imgFloat else imgFloat.Resize(config.scale, CvEnum.Inter.Area)
use magnitudesByte = ((magnitudes / !max) * 255.0).Convert<byte>() // Otsu from OpenCV only support 'byte'.
use edges = new Matrix<byte>(xEdges.Size)
- let threshold = CvInvoke.Threshold(magnitudesByte, edges, 0.0, 1.0, CvEnum.ThresholdType.Otsu ||| CvEnum.ThresholdType.Binary)
-
-// let filteredGreenMat = new Matrix<float32>(filteredGreen.Size)
-// filteredGreen.CopyTo(filteredGreenMat)
- let parasites = ParasitesMarker.find green filteredGreen config
-
- saveImg parasites.darkStain "parasites_dark_stain.png"
- saveImg parasites.stain "parasites_stain.png"
- saveImg parasites.infection "parasites_infection.png"
-
+ CvInvoke.Threshold(magnitudesByte, edges, 0.0, 1.0, CvEnum.ThresholdType.Otsu ||| CvEnum.ThresholdType.Binary) |> ignore
+
logTime "Finding edges" (fun() ->
thin edges)
saveMat (edges * 255.0) "edges.png"
+
+ let kmediansResults = KMedians.kmedians filteredGreen 1.0
+
+ let parasites = ParasitesMarker.find green filteredGreen kmediansResults config
+
+ saveImg parasites.darkStain "parasites_dark_stain.png"
+ saveImg parasites.stain "parasites_stain.png"
+ saveImg parasites.infection "parasites_infection.png"
+
let radiusRange = config.scale * 20.0, config.scale * 40.0
let windowSize = roundInt (1.6 * (snd radiusRange))
let factorNbPick = 1.5
let ellipses = logTime "Finding ellipses" (fun () ->
- Ellipse.find edges xEdges yEdges radiusRange windowSize factorNbPick)
+ Ellipse.find edges xEdges yEdges radiusRange windowSize factorNbPick) |> List.filter (fun e -> not (e.CutAVericalLine 0.0) &&
+ not (e.CutAVericalLine (float img.Width)) &&
+ not (e.CutAnHorizontalLine 0.0) &&
+ not (e.CutAnHorizontalLine (float img.Height)))
drawEllipses img ellipses (Bgr(0.0, 255.0, 255.0))
//saveImg img "ellipses.png"
- { RBCPositions = []; infectedRBCPositions = []; img = img }
+ Classifier.findCells ellipses parasites kmediansResults.fg
//