From 074d6b0377f51e868deb1c427891c722d0270deb Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Wed, 20 Jan 2016 22:19:04 +0100 Subject: [PATCH] * Add logos CHUV and HES-SO. * Code documentation. --- Parasitemia/ParasitemiaCore/Classifier.fs | 3 --- Parasitemia/ParasitemiaCore/MainAnalysis.fs | 23 ++++++++++++++---- Parasitemia/ParasitemiaUI/AssemblyInfo.fs | 4 +-- Parasitemia/ParasitemiaUI/GUI.fs | 16 +++++++++--- .../ParasitemiaUI/ParasitemiaUI.fsproj | 2 ++ .../ParasitemiaUI/Resources/chuv_logo.png | Bin 0 -> 5056 bytes .../ParasitemiaUI/Resources/hes-so_logo.png | Bin 0 -> 22234 bytes .../ParasitemiaUI/XAML/MainWindow.xaml | 20 ++++++++++++--- 8 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 Parasitemia/ParasitemiaUI/Resources/chuv_logo.png create mode 100644 Parasitemia/ParasitemiaUI/Resources/hes-so_logo.png diff --git a/Parasitemia/ParasitemiaCore/Classifier.fs b/Parasitemia/ParasitemiaCore/Classifier.fs index c523790..9f4fdd0 100644 --- a/Parasitemia/ParasitemiaCore/Classifier.fs +++ b/Parasitemia/ParasitemiaCore/Classifier.fs @@ -10,7 +10,6 @@ open Emgu.CV.Structure open Types open Utils - type private EllipseFlaggedKd (e: Ellipse) = inherit Ellipse (e.Cx, e.Cy, e.A, e.B, e.Alpha) @@ -20,7 +19,6 @@ type private EllipseFlaggedKd (e: Ellipse) = member this.X = this.Cx member this.Y = this.Cy - let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (img: Image) (config: Config.Config) : Cell list = if ellipses.IsEmpty then @@ -130,7 +128,6 @@ let findCells (ellipses: Ellipse list) (parasites: ParasitesMarker.Result) (img: if stdDeviation > globalStdDeviation * config.Parameters.standardDeviationMaxRatio then e.Removed <- true - // 4) Remove ellipses with little area. let minArea = config.RBCRadius.MinArea for e, neighbors in ellipsesWithNeigbors do diff --git a/Parasitemia/ParasitemiaCore/MainAnalysis.fs b/Parasitemia/ParasitemiaCore/MainAnalysis.fs index be72a2b..7b8b066 100644 --- a/Parasitemia/ParasitemiaCore/MainAnalysis.fs +++ b/Parasitemia/ParasitemiaCore/MainAnalysis.fs @@ -16,8 +16,20 @@ open ImgTools open Config open Types +/// +/// Analyze the given image and detect reb blood cell (RBC) in it. +/// +/// The image +/// The name, used during logging +/// The configuration, must not be shared with another analysis +/// An optional function to report progress and/or cancel the process. +/// The first call returning 'false' will cancel the analysis. +/// The 'int' parameter correspond to the progression from 0 to 100 +/// A list of detected cells or nothing if the process has been cancelled let doAnalysis (img: Image) (name: string) (config: Config) (reportProgress: (int -> bool) option) : Cell list option = + // To report the progress of this function from 0 to 100. + // Return 'None' if the process must be aborted. let reportWithVal (percent: int) (value: 'a) : 'a option = match reportProgress with | Some f -> @@ -29,7 +41,7 @@ let doAnalysis (img: Image) (name: string) (config: Config) (reportPr let report (percent: int) : unit option = reportWithVal percent () - let inline buildLogWithName (text: string) = sprintf "(%s) %s" name text + let inline buildLogWithName (text: string) = sprintf "(%s) %s" name text 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) @@ -47,8 +59,6 @@ let doAnalysis (img: Image) (name: string) (config: Config) (reportPr let initialAreaOpening = int <| config.RBCRadiusByResolution.Area * config.Parameters.ratioAreaPaleCenter * 1.2f // We do an area opening a little larger to avoid to do a second one in the case the radius found is near the initial one. do! logTimeWithName "First area opening" (fun () -> ImgTools.areaOpenF filteredGreen initialAreaOpening; report 10) - //do! report 10 - let range = let delta = config.Parameters.granulometryRange * config.RBCRadiusByResolution.Pixel int <| config.RBCRadiusByResolution.Pixel - delta, int <| config.RBCRadiusByResolution.Pixel + delta @@ -138,8 +148,11 @@ let doAnalysis (img: Image) (name: string) (config: Config) (reportPr /// /// Do multiple analyses on the same time. The number of concurrent process depends if the number of the core. /// -/// -/// An optional function to report progress. The process is aborted if the returned value is false +/// The images: (name * configuration * image) +/// An optional function to report progress and/or cancel the process. +/// The first call returning 'false' will cancel the analysis. +/// The 'int' parameter correspond to the progression from 0 to 100 +/// 'None' if the process has been cancelled or the list of result as (name * cells), 'name' corresponds to the given name let doMultipleAnalysis (imgs: (string * Config * Image) list) (reportProgress: (int -> bool) option) : (string * Cell list) list option = let report (percent: int) : bool = match reportProgress with diff --git a/Parasitemia/ParasitemiaUI/AssemblyInfo.fs b/Parasitemia/ParasitemiaUI/AssemblyInfo.fs index 22647c3..16cfbfc 100644 --- a/Parasitemia/ParasitemiaUI/AssemblyInfo.fs +++ b/Parasitemia/ParasitemiaUI/AssemblyInfo.fs @@ -34,8 +34,8 @@ open System.Runtime.InteropServices // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [] -[] -[] +[] +[] do () \ No newline at end of file diff --git a/Parasitemia/ParasitemiaUI/GUI.fs b/Parasitemia/ParasitemiaUI/GUI.fs index 921654a..a71aa96 100644 --- a/Parasitemia/ParasitemiaUI/GUI.fs +++ b/Parasitemia/ParasitemiaUI/GUI.fs @@ -60,7 +60,10 @@ let run (defaultConfig: Config) (fileToOpen: string option) = let scrollRBC: ScrollViewer = ctrl "scrollRBC" let stackRBC: StackPanel = ctrl "stackRBC" + let imgLogos: Border = ctrl "imgLogos" + // Initializations. + let canvasCurrentImageColor = canvasCurrentImage.Background menuHightlightRBC.IsChecked <- displayHealthy // Utils. @@ -126,10 +129,12 @@ let run (defaultConfig: Config) (fileToOpen: string option) = sprintf "%.1f %% (%d / %d)" percent nb nbTotal let updateCurrentImageInformation () = + txtImageInformation1.Inlines.Clear() + txtImageInformation2.Inlines.Clear() + match state.CurrentImage with | Some srcImg -> let parasitemiaStr = percentText (state.ImageParasitemia srcImg) - txtImageInformation1.Inlines.Clear() txtImageInformation1.Inlines.Add(Documents.Run("Parasitemia: ", FontWeight = FontWeights.Bold)) txtImageInformation1.Inlines.Add(parasitemiaStr) txtImageInformation1.Inlines.Add(Documents.LineBreak()) @@ -137,7 +142,6 @@ let run (defaultConfig: Config) (fileToOpen: string option) = txtImageInformation1.Inlines.Add(Documents.Run("Last analysis: ", FontWeight = FontWeights.Bold)) txtImageInformation1.Inlines.Add(Documents.Run(if srcImg.dateLastAnalysis.Ticks = 0L then "" else srcImg.dateLastAnalysis.ToLocalTime().ToString())) - txtImageInformation2.Inlines.Clear() let alteredStr = percentText (state.ImageNbAltered srcImg) txtImageInformation2.Inlines.Add(Documents.Run("Number of erytrocytes manually altered: ", FontWeight = FontWeights.Bold)) txtImageInformation2.Inlines.Add(Documents.Run(alteredStr)) @@ -310,6 +314,8 @@ let run (defaultConfig: Config) (fileToOpen: string option) = let updateCurrentImage () = match state.CurrentImage with | Some srcImg -> + imgLogos.Visibility <- Visibility.Collapsed + // Highlight the preview. stackPreviews.Children |> Seq.cast @@ -321,11 +327,13 @@ let run (defaultConfig: Config) (fileToOpen: string option) = updateRBCFramesCurrent () updateRBCFramesPreview () - updateCurrentImageInformation () | None -> + imgLogos.Visibility <- Visibility.Visible stackRBC.Children.Clear() canvasCurrentImage.Children.Clear() - canvasCurrentImage.Background <- Brushes.Black + canvasCurrentImage.Background <- canvasCurrentImageColor + + updateCurrentImageInformation () let setCurrentImage (srcImg: SourceImage) = if state.CurrentImage.IsNone || state.CurrentImage.Value <> srcImg diff --git a/Parasitemia/ParasitemiaUI/ParasitemiaUI.fsproj b/Parasitemia/ParasitemiaUI/ParasitemiaUI.fsproj index be0b1d6..483888f 100644 --- a/Parasitemia/ParasitemiaUI/ParasitemiaUI.fsproj +++ b/Parasitemia/ParasitemiaUI/ParasitemiaUI.fsproj @@ -65,6 +65,8 @@ + + diff --git a/Parasitemia/ParasitemiaUI/Resources/chuv_logo.png b/Parasitemia/ParasitemiaUI/Resources/chuv_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e062ad8a2850af287b3ef7fc0eefde54b6060620 GIT binary patch literal 5056 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 + x:Name="MainWindow" Height="700" Width="1000" MinHeight="300" MinWidth="400" Title="Parasitemia" Icon="pack://application:,,,/Resources/icon.ico" ResizeMode="CanResizeWithGrip"> @@ -41,7 +41,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -70,11 +70,23 @@ - + + + + + + + + + + + + + -- 2.43.0