X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemiaCore%2FAnalysis.fs;h=e83977ab6fde91e83aafb695b002871cd394546d;hp=c894fc4440b93a196f320686d3a5f7d9647b648d;hb=85adb74195fe7145535d3d36263aec2f7879cd60;hpb=d3fdf4bce5aa39363998276346bca7445b0a351d diff --git a/Parasitemia/ParasitemiaCore/Analysis.fs b/Parasitemia/ParasitemiaCore/Analysis.fs index c894fc4..e83977a 100644 --- a/Parasitemia/ParasitemiaCore/Analysis.fs +++ b/Parasitemia/ParasitemiaCore/Analysis.fs @@ -46,6 +46,7 @@ let doAnalysis (img: Image) (name: string) (config: Config) (reportPr let logWithName mess = Log.User(buildLogWithName mess) let inline logTimeWithName (text: string) (f: unit -> 'a option) : 'a option = Log.LogWithTime((buildLogWithName text), Severity.USER, f) + // Monadic construction to be able to abort the progress when running. maybe { do! report 0 @@ -53,10 +54,10 @@ let doAnalysis (img: Image) (name: string) (config: Config) (reportPr use img_float = img.Convert() - use img_RBC = img_float.[1] // mergeChannelsWithProjection img_float config.Parameters.averageColor_RBC config.Parameters.averageColor_BG 255. + use img_RBC = img_float.[1] // Green. use img_RBC_filtered = gaussianFilter img_RBC config.LPFStandardDeviationRBC - use img_parasites = img_float.[2] // mergeChannelsWithProjection img_float config.Parameters.averageColor_Parasite config.Parameters.averageColor_RBC 255. + use img_parasites = img_float.[2] // Red. use img_parasites_filtered = gaussianFilter img_parasites config.LPFStandardDeviationParasite logWithName (sprintf "Nominal erythrocyte diameter: %A" config.RBCRadiusByResolution) @@ -137,10 +138,10 @@ let doAnalysis (img: Image) (name: string) (config: Config) (reportPr Drawing.drawCells imgCells' true cells IO.saveImg imgCells' (buildFileName " - cells - full.png") - let filteredGreenMaxima = gaussianFilter img_RBC config.LPFStandardDeviationRBC - for m in findMaxima filteredGreenMaxima do - Drawing.drawPoints filteredGreenMaxima m 255.f - IO.saveImg filteredGreenMaxima (buildFileName " - filtered - maxima.png") + let filteredRBCMaxima = gaussianFilter img_RBC config.LPFStandardDeviationRBC + for m in findMaxima filteredRBCMaxima do + Drawing.drawPoints filteredRBCMaxima m 255.f + IO.saveImg filteredRBCMaxima (buildFileName " - filtered - maxima.png") IO.saveImg imgWhitoutParasite (buildFileName " - filtered closed stain.png") IO.saveImg imgWithoutNucleus (buildFileName " - filtered closed infection.png") @@ -182,9 +183,14 @@ let doMultipleAnalysis (imgs: (string * Config * Image) list) (report imgs |> PSeq.choose ( fun (id, config, img) -> - match doAnalysis img id config (Some (fun p -> reportProgressImg id p)) with - | Some result -> Some (id, result) - | None -> None) + try + match doAnalysis img id config (Some (fun p -> reportProgressImg id p)) with + | Some result -> Some (id, result) + | None -> None + with + | ex -> + Log.Error("Analysis {0} failed: {1}", id, ex) + None) |> PSeq.withDegreeOfParallelism n |> PSeq.toList