diff --git a/.fsdocs/cache b/.fsdocs/cache index dfaac4c..6275f2e 100644 --- a/.fsdocs/cache +++ b/.fsdocs/cache @@ -1,5 +1,6 @@ -@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item12https://PolinaSavelyeva.github.io/ImageProcessing/@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1jC:\Users\lissa\Документы\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0\ImageProcessing.dll@m_Item2^headm-o:C:\Users\lissa\Документы\ImageProcessing\src\ImageProcessing\obj\Debug\net7.0\ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head--define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head*--doc:obj\Debug\net7.0\ImageProcessing.xml^tail^head--optimize-^tail^head--tailcalls-^tail^headH-r:C:\Users\lissa\.nuget\packages\argu\6.1.1\lib\netstandard2.0\Argu.dll^tail^headh-r:C:\Users\lissa\.nuget\packages\brahma.fsharp.opencl.ast\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.AST.dll^tail^head^-r:C:\Users\lissa\.nuget\packages\brahma.fsharp\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Core.dll^tail^headp-r:C:\Users\lissa\.nuget\packages\brahma.fsharp.opencl.printer\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Printer.dll^tail^headn-r:C:\Users\lissa\.nuget\packages\brahma.fsharp.opencl.shared\2.0.3\lib\net7.0\Brahma.FSharp.OpenCL.Shared.dll^tail^headv-r:C:\Users\lissa\.nuget\packages\brahma.fsharp.opencl.translator\2.0.1\lib\net5.0\Brahma.FSharp.OpenCL.Translator.dll^tail^headN-r:C:\Users\lissa\.nuget\packages\expecto\9.0.4\lib\netstandard2.0\Expecto.dll^tail^head^-r:C:\Users\lissa\.nuget\packages\expecto.fscheck\9.0.4\lib\netstandard2.0\Expecto.FsCheck.dll^tail^headf-r:C:\Users\lissa\.nuget\packages\extraconstraints.fody\1.14.0\lib\netstandard1.4\ExtraConstraints.dll^tail^headO-r:C:\Users\lissa\.nuget\packages\fscheck\2.14.3\lib\netstandard2.0\FsCheck.dll^tail^headV-r:C:\Users\lissa\.nuget\packages\fsharp.core\6.0.0\lib\netstandard2.1\FSharp.Core.dll^tail^headv-r:C:\Users\lissa\.nuget\packages\fsharp.quotations.evaluator\2.1.0\lib\netstandard2.0\FSharp.Quotations.Evaluator.dll^tail^headf-r:C:\Users\lissa\.nuget\packages\fsharpx.collections\3.1.0\lib\netstandard2.0\FSharpx.Collections.dll^tail^headz-r:C:\Users\lissa\.nuget\packages\fsharpx.text.structuredformat\3.1.0\lib\netstandard2.0\FSharpx.Text.StructuredFormat.dll^tail^headt-r:C:\Users\lissa\.nuget\packages\microsoft.build.framework\16.10.0\lib\netstandard2.0\Microsoft.Build.Framework.dll^tail^head`-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\Microsoft.CSharp.dll^tail^headj-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\Microsoft.VisualBasic.Core.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\Microsoft.VisualBasic.dll^tail^headj-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\Microsoft.Win32.Primitives.dll^tail^headh-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\Microsoft.Win32.Registry.dll^tail^headp-r:C:\Users\lissa\.nuget\packages\microsoft.win32.systemevents\7.0.0\lib\net7.0\Microsoft.Win32.SystemEvents.dll^tail^headU-r:C:\Users\lissa\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.dll^tail^headY-r:C:\Users\lissa\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Mdb.dll^tail^headY-r:C:\Users\lissa\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Pdb.dll^tail^head[-r:C:\Users\lissa\.nuget\packages\mono.cecil\0.11.3\lib\netstandard2.0\Mono.Cecil.Rocks.dll^tail^headX-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\mscorlib.dll^tail^head[-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\netstandard.dll^tail^headg-r:C:\Users\lissa\.nuget\packages\sixlabors.imagesharp\2.1.3\lib\netcoreapp3.1\SixLabors.ImageSharp.dll^tail^heada-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.AppContext.dll^tail^head^-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Buffers.dll^tail^headT-r:C:\Users\lissa\.nuget\packages\system.codedom\7.0.0\lib\net7.0\System.CodeDom.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Collections.Concurrent.dll^tail^headb-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Collections.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Collections.Immutable.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Collections.NonGeneric.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Collections.Specialized.dll^tail^headq-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ComponentModel.Annotations.dll^tail^headu-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ComponentModel.DataAnnotations.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ComponentModel.dll^tail^headu-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ComponentModel.EventBasedAsync.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ComponentModel.Primitives.dll^tail^heads-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ComponentModel.TypeConverter.dll^tail^head-r:C:\Users\lissa\.nuget\packages\system.configuration.configurationmanager\7.0.0\lib\net7.0\System.Configuration.ConfigurationManager.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Configuration.dll^tail^head^-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Console.dll^tail^head[-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Core.dll^tail^headb-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Data.Common.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Data.DataSetExtensions.dll^tail^head[-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Data.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.Contracts.dll^tail^headh-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.Debug.dll^tail^heads-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.DiagnosticSource.dll^tail^headn-r:C:\Users\lissa\.nuget\packages\system.diagnostics.eventlog\7.0.0\lib\net7.0\System.Diagnostics.EventLog.dll^tail^headr-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.FileVersionInfo.dll^tail^headj-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.Process.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.StackTrace.dll^tail^headz-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.Tools.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.TraceSource.dll^tail^headj-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Diagnostics.Tracing.dll^tail^headV-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.dll^tail^headb-r:C:\Users\lissa\.nuget\packages\system.drawing.common\7.0.0\lib\net7.0\System.Drawing.Common.dll^tail^head^-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Drawing.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Drawing.Primitives.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Dynamic.Runtime.dll^tail^headc-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Formats.Asn1.dll^tail^headb-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Formats.Tar.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Globalization.Calendars.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Globalization.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Globalization.Extensions.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.Compression.Brotli.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.Compression.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.Compression.FileSystem.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.Compression.ZipFile.dll^tail^headY-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.dll^tail^headr-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.FileSystem.AccessControl.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.FileSystem.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.FileSystem.DriveInfo.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.FileSystem.Primitives.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.FileSystem.Watcher.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.IsolatedStorage.dll^tail^headk-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.MemoryMappedFiles.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.Pipes.AccessControl.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.Pipes.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.IO.UnmanagedMemoryStream.dll^tail^head[-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Linq.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Linq.Expressions.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Linq.Parallel.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Linq.Queryable.dll^tail^head]-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Memory.dll^tail^headZ-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Http.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Http.Json.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.HttpListener.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Mail.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.NameResolution.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.NetworkInformation.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Ping.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Primitives.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Quic.dll^tail^headc-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Requests.dll^tail^headc-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Security.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.ServicePoint.dll^tail^headb-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.Sockets.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.WebClient.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.WebHeaderCollection.dll^tail^headc-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.WebProxy.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.WebSockets.Client.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Net.WebSockets.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Numerics.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Numerics.Vectors.dll^tail^headb-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ObjectModel.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.DispatchProxy.dll^tail^heada-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.Emit.dll^tail^heads-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.Emit.ILGeneration.dll^tail^headr-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.Emit.Lightweight.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.Extensions.dll^tail^headj-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.Metadata.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.Primitives.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Reflection.TypeExtensions.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Resources.Reader.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Resources.ResourceManager.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Resources.Writer.dll^tail^headv-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Extensions.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Handles.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.InteropServices.dll^tail^heady-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.InteropServices.JavaScript.dll^tail^head-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Intrinsics.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Loader.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Numerics.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Serialization.dll^tail^headw-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Serialization.Formatters.dll^tail^headq-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Serialization.Json.dll^tail^headw-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Serialization.Primitives.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.Serialization.Xml.dll^tail^headm-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.AccessControl.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Claims.dll^tail^headw-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.Algorithms.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.Cng.dll^tail^headp-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.Csp.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.dll^tail^headu-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.Encoding.dll^tail^headt-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.OpenSsl.dll^tail^headw-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.Primitives.dll^tail^head-r:C:\Users\lissa\.nuget\packages\system.security.cryptography.protecteddata\7.0.0\lib\net7.0\System.Security.Cryptography.ProtectedData.dll^tail^head}-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Cryptography.X509Certificates.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.dll^tail^headn-r:C:\Users\lissa\.nuget\packages\system.security.permissions\7.0.0\lib\net7.0\System.Security.Permissions.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Principal.dll^tail^headq-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.Principal.Windows.dll^tail^headl-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Security.SecureString.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ServiceModel.Web.dll^tail^heade-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ServiceProcess.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Text.Encoding.CodePages.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Text.Encoding.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Text.Encoding.Extensions.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Text.Encodings.Web.dll^tail^head`-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Text.Json.dll^tail^headn-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Text.RegularExpressions.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Channels.dll^tail^head`-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.dll^tail^headk-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Overlapped.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Tasks.Dataflow.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Tasks.dll^tail^headq-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Tasks.Extensions.dll^tail^heado-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Tasks.Parallel.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Thread.dll^tail^headk-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.ThreadPool.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Threading.Timer.dll^tail^headc-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Transactions.dll^tail^headi-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Transactions.Local.dll^tail^heada-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.ValueTuple.dll^tail^headZ-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Web.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Web.HttpUtility.dll^tail^head^-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Windows.dll^tail^headj-r:C:\Users\lissa\.nuget\packages\system.windows.extensions\7.0.0\lib\net7.0\System.Windows.Extensions.dll^tail^headZ-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.dll^tail^head_-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.Linq.dll^tail^headg-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.ReaderWriter.dll^tail^headh-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.Serialization.dll^tail^headd-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.XDocument.dll^tail^headf-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.XmlDocument.dll^tail^headh-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.XmlSerializer.dll^tail^head`-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.XPath.dll^tail^headj-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Xml.XPath.XDocument.dll^tail^head[-r:C:\PROGRAM FILES\DOTNET\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\WindowsBase.dll^tail^headR-r:C:\Users\lissa\.nuget\packages\yc.opencl.net\2.0.3\lib\net7.0\YC.OpenCL.NET.dll^tail^head--target:library^tail^head+--nowarn:IL2121,NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head--fullpaths^tail^head--flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value2https://github.com/PolinaSavelyeva/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2PolinaSavelyeva^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2]https://raw.githubusercontent.com/PolinaSavelyeva/ImageProcessing/dev/resources/logo_dark.svg^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +@TupleOfTupleOfstringstringFSharpListOfTupleOfstringFSharpListOfstringFSharpOptionOfstringFSharpOptionOfstringFSharpOptionOfstringbooleanbooleanTupleOfFSharpOptionOfstringFSharpOptionOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgBwVB7epaIz_P_S5UQ85F2dSckgFSharpListOfstringFSharpListOfTupleOfParamKeystringIrqufEGn5F2dSckgnFmJ5oRfTupleOfFSharpOptionOfstringArrayOfstringFSharpListOfstringdateTimeArrayOfdateTime0CngyMQD_ShTDFhl_P.http://schemas.datacontract.org/2004/07/System i)http://www.w3.org/2001/XMLSchema-instance@m_Item1@m_Item12https://PolinaSavelyeva.github.io/ImageProcessing/@m_Item2ImageProcessing@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1`/Users/svmena/Documents/ImageProcessing/src/ImageProcessing/bin/Debug/net7.0/ImageProcessing.dll@m_Item2^headc-o:/Users/svmena/Documents/ImageProcessing/src/ImageProcessing/obj/Debug/net7.0/ImageProcessing.dll^tail^head-g^tail^head--debug:portable^tail^head --noframework^tail^head--define:TRACE^tail^head--define:DEBUG^tail^head--define:NET^tail^head--define:NET7_0^tail^head--define:NETCOREAPP^tail^head--define:NET5_0_OR_GREATER^tail^head--define:NET6_0_OR_GREATER^tail^head--define:NET7_0_OR_GREATER^tail^head!--define:NETCOREAPP1_0_OR_GREATER^tail^head!--define:NETCOREAPP1_1_OR_GREATER^tail^head!--define:NETCOREAPP2_0_OR_GREATER^tail^head!--define:NETCOREAPP2_1_OR_GREATER^tail^head!--define:NETCOREAPP2_2_OR_GREATER^tail^head!--define:NETCOREAPP3_0_OR_GREATER^tail^head!--define:NETCOREAPP3_1_OR_GREATER^tail^head*--doc:obj/Debug/net7.0/ImageProcessing.xml^tail^head--optimize-^tail^head--tailcalls-^tail^headG-r:/Users/svmena/.nuget/packages/argu/6.1.1/lib/netstandard2.0/Argu.dll^tail^headg-r:/Users/svmena/.nuget/packages/brahma.fsharp.opencl.ast/2.0.1/lib/net5.0/Brahma.FSharp.OpenCL.AST.dll^tail^head]-r:/Users/svmena/.nuget/packages/brahma.fsharp/2.0.1/lib/net5.0/Brahma.FSharp.OpenCL.Core.dll^tail^heado-r:/Users/svmena/.nuget/packages/brahma.fsharp.opencl.printer/2.0.1/lib/net5.0/Brahma.FSharp.OpenCL.Printer.dll^tail^headm-r:/Users/svmena/.nuget/packages/brahma.fsharp.opencl.shared/2.0.3/lib/net7.0/Brahma.FSharp.OpenCL.Shared.dll^tail^headu-r:/Users/svmena/.nuget/packages/brahma.fsharp.opencl.translator/2.0.1/lib/net5.0/Brahma.FSharp.OpenCL.Translator.dll^tail^headM-r:/Users/svmena/.nuget/packages/expecto/9.0.4/lib/netstandard2.0/Expecto.dll^tail^head]-r:/Users/svmena/.nuget/packages/expecto.fscheck/9.0.4/lib/netstandard2.0/Expecto.FsCheck.dll^tail^heade-r:/Users/svmena/.nuget/packages/extraconstraints.fody/1.14.0/lib/netstandard1.4/ExtraConstraints.dll^tail^headN-r:/Users/svmena/.nuget/packages/fscheck/2.14.3/lib/netstandard2.0/FsCheck.dll^tail^headU-r:/Users/svmena/.nuget/packages/fsharp.core/6.0.0/lib/netstandard2.1/FSharp.Core.dll^tail^headu-r:/Users/svmena/.nuget/packages/fsharp.quotations.evaluator/2.1.0/lib/netstandard2.0/FSharp.Quotations.Evaluator.dll^tail^heade-r:/Users/svmena/.nuget/packages/fsharpx.collections/3.1.0/lib/netstandard2.0/FSharpx.Collections.dll^tail^heady-r:/Users/svmena/.nuget/packages/fsharpx.text.structuredformat/3.1.0/lib/netstandard2.0/FSharpx.Text.StructuredFormat.dll^tail^heads-r:/Users/svmena/.nuget/packages/microsoft.build.framework/16.10.0/lib/netstandard2.0/Microsoft.Build.Framework.dll^tail^head`-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/Microsoft.CSharp.dll^tail^headj-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/Microsoft.VisualBasic.Core.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/Microsoft.VisualBasic.dll^tail^headj-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/Microsoft.Win32.Primitives.dll^tail^headh-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/Microsoft.Win32.Registry.dll^tail^heado-r:/Users/svmena/.nuget/packages/microsoft.win32.systemevents/7.0.0/lib/net7.0/Microsoft.Win32.SystemEvents.dll^tail^headT-r:/Users/svmena/.nuget/packages/mono.cecil/0.11.3/lib/netstandard2.0/Mono.Cecil.dll^tail^headX-r:/Users/svmena/.nuget/packages/mono.cecil/0.11.3/lib/netstandard2.0/Mono.Cecil.Mdb.dll^tail^headX-r:/Users/svmena/.nuget/packages/mono.cecil/0.11.3/lib/netstandard2.0/Mono.Cecil.Pdb.dll^tail^headZ-r:/Users/svmena/.nuget/packages/mono.cecil/0.11.3/lib/netstandard2.0/Mono.Cecil.Rocks.dll^tail^headX-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/mscorlib.dll^tail^head[-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/netstandard.dll^tail^headf-r:/Users/svmena/.nuget/packages/sixlabors.imagesharp/2.1.3/lib/netcoreapp3.1/SixLabors.ImageSharp.dll^tail^heada-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.AppContext.dll^tail^head^-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Buffers.dll^tail^headS-r:/Users/svmena/.nuget/packages/system.codedom/7.0.0/lib/net7.0/System.CodeDom.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Collections.Concurrent.dll^tail^headb-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Collections.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Collections.Immutable.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Collections.NonGeneric.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Collections.Specialized.dll^tail^headq-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ComponentModel.Annotations.dll^tail^headu-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ComponentModel.DataAnnotations.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ComponentModel.dll^tail^headu-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ComponentModel.EventBasedAsync.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ComponentModel.Primitives.dll^tail^heads-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ComponentModel.TypeConverter.dll^tail^head-r:/Users/svmena/.nuget/packages/system.configuration.configurationmanager/7.0.0/lib/net7.0/System.Configuration.ConfigurationManager.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Configuration.dll^tail^head^-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Console.dll^tail^head[-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Core.dll^tail^headb-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Data.Common.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Data.DataSetExtensions.dll^tail^head[-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Data.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.Contracts.dll^tail^headh-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.Debug.dll^tail^heads-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.DiagnosticSource.dll^tail^headm-r:/Users/svmena/.nuget/packages/system.diagnostics.eventlog/7.0.0/lib/net7.0/System.Diagnostics.EventLog.dll^tail^headr-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.FileVersionInfo.dll^tail^headj-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.Process.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.StackTrace.dll^tail^headz-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.TextWriterTraceListener.dll^tail^headh-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.Tools.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.TraceSource.dll^tail^headj-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Diagnostics.Tracing.dll^tail^headV-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.dll^tail^heada-r:/Users/svmena/.nuget/packages/system.drawing.common/7.0.0/lib/net7.0/System.Drawing.Common.dll^tail^head^-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Drawing.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Drawing.Primitives.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Dynamic.Runtime.dll^tail^headc-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Formats.Asn1.dll^tail^headb-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Formats.Tar.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Globalization.Calendars.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Globalization.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Globalization.Extensions.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.Compression.Brotli.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.Compression.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.Compression.FileSystem.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.Compression.ZipFile.dll^tail^headY-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.dll^tail^headr-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.FileSystem.AccessControl.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.FileSystem.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.FileSystem.DriveInfo.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.FileSystem.Primitives.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.FileSystem.Watcher.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.IsolatedStorage.dll^tail^headk-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.MemoryMappedFiles.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.Pipes.AccessControl.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.Pipes.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.IO.UnmanagedMemoryStream.dll^tail^head[-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Linq.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Linq.Expressions.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Linq.Parallel.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Linq.Queryable.dll^tail^head]-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Memory.dll^tail^headZ-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Http.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Http.Json.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.HttpListener.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Mail.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.NameResolution.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.NetworkInformation.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Ping.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Primitives.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Quic.dll^tail^headc-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Requests.dll^tail^headc-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Security.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.ServicePoint.dll^tail^headb-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.Sockets.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.WebClient.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.WebHeaderCollection.dll^tail^headc-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.WebProxy.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.WebSockets.Client.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Net.WebSockets.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Numerics.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Numerics.Vectors.dll^tail^headb-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ObjectModel.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.DispatchProxy.dll^tail^heada-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.Emit.dll^tail^heads-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.Emit.ILGeneration.dll^tail^headr-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.Emit.Lightweight.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.Extensions.dll^tail^headj-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.Metadata.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.Primitives.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Reflection.TypeExtensions.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Resources.Reader.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Resources.ResourceManager.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Resources.Writer.dll^tail^headv-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.CompilerServices.Unsafe.dll^tail^headw-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.CompilerServices.VisualC.dll^tail^head^-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Extensions.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Handles.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.InteropServices.dll^tail^heady-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.InteropServices.JavaScript.dll^tail^head-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.InteropServices.RuntimeInformation.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Intrinsics.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Loader.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Numerics.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Serialization.dll^tail^headw-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Serialization.Formatters.dll^tail^headq-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Serialization.Json.dll^tail^headw-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Serialization.Primitives.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Runtime.Serialization.Xml.dll^tail^headm-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.AccessControl.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Claims.dll^tail^headw-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.Algorithms.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.Cng.dll^tail^headp-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.Csp.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.dll^tail^headu-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.Encoding.dll^tail^headt-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.OpenSsl.dll^tail^headw-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.Primitives.dll^tail^head-r:/Users/svmena/.nuget/packages/system.security.cryptography.protecteddata/7.0.0/lib/net7.0/System.Security.Cryptography.ProtectedData.dll^tail^head}-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Cryptography.X509Certificates.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.dll^tail^headm-r:/Users/svmena/.nuget/packages/system.security.permissions/7.0.0/lib/net7.0/System.Security.Permissions.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Principal.dll^tail^headq-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.Principal.Windows.dll^tail^headl-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Security.SecureString.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ServiceModel.Web.dll^tail^heade-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ServiceProcess.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Text.Encoding.CodePages.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Text.Encoding.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Text.Encoding.Extensions.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Text.Encodings.Web.dll^tail^head`-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Text.Json.dll^tail^headn-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Text.RegularExpressions.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Channels.dll^tail^head`-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.dll^tail^headk-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Overlapped.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Tasks.Dataflow.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Tasks.dll^tail^headq-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Tasks.Extensions.dll^tail^heado-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Tasks.Parallel.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Thread.dll^tail^headk-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.ThreadPool.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Threading.Timer.dll^tail^headc-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Transactions.dll^tail^headi-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Transactions.Local.dll^tail^heada-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.ValueTuple.dll^tail^headZ-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Web.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Web.HttpUtility.dll^tail^head^-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Windows.dll^tail^headi-r:/Users/svmena/.nuget/packages/system.windows.extensions/7.0.0/lib/net7.0/System.Windows.Extensions.dll^tail^headZ-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.dll^tail^head_-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.Linq.dll^tail^headg-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.ReaderWriter.dll^tail^headh-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.Serialization.dll^tail^headd-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.XDocument.dll^tail^headf-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.XmlDocument.dll^tail^headh-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.XmlSerializer.dll^tail^head`-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.XPath.dll^tail^headj-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/System.Xml.XPath.XDocument.dll^tail^head[-r:/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.9/ref/net7.0/WindowsBase.dll^tail^headQ-r:/Users/svmena/.nuget/packages/yc.opencl.net/2.0.3/lib/net7.0/YC.OpenCL.NET.dll^tail^head--target:library^tail^head$--nowarn:NU1603,NU1604,NU1605,NU1608^tail^head--warn:3^tail^head--warnaserror:3239^tail^head--fullpaths^tail^head--flaterrors^tail^head--highentropyva+^tail^head--targetprofile:netcore^tail^head--nocopyfsharpcore^tail^head--deterministic+^tail^head--simpleresolution^tail^head.nil^tail.nil@m_Item3 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_value2https://github.com/PolinaSavelyeva/ImageProcessing@m_Item4.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item5 b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core_valuegit@m_Item6@m_Item7@m_Rest@m_Item1.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item2.nil b=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core@m_Item3^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2PolinaSavelyeva^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2]https://raw.githubusercontent.com/PolinaSavelyeva/ImageProcessing/dev/resources/logo_dark.svg^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ihttps://github.com/PolinaSavelyeva/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ohttps://github.com/PolinaSavelyeva/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 -f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Fhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ihttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/CHANGELOG.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headVC:\Users\lissa\Документы\ImageProcessing\src\ImageProcessing\bin\Debug\net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2PolinaSavelyeva^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2]https://raw.githubusercontent.com/PolinaSavelyeva/ImageProcessing/dev/resources/logo_dark.svg^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Fhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ihttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/CHANGELOG.md^tail^head.nil^tail.nil^tail^head.nil^tail.nil@m_Item4 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headL/Users/svmena/Documents/ImageProcessing/src/ImageProcessing/bin/Debug/net7.0^tail^head.nil^tail.nil@m_Item5 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-authors@m_Item2PolinaSavelyeva^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-src@m_Item2]https://raw.githubusercontent.com/PolinaSavelyeva/ImageProcessing/dev/resources/logo_dark.svg^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-navbar-position@m_Item2 fixed-left^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-theme@m_Item2default^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-logo-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-license-link@m_Item2Ihttps://github.com/PolinaSavelyeva/ImageProcessing/blob/master/LICENSE.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ohttps://github.com/PolinaSavelyeva/ImageProcessing/blob/master/RELEASE_NOTES.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-project-url@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-tags@m_Item2 -f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Fhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ihttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/CHANGELOG.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^value2https://PolinaSavelyeva.github.io/ImageProcessing/@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string2https://PolinaSavelyeva.github.io/ImageProcessing/^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^stringFhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/README.md^stringfsdocs-release-notes-link^stringIhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/CHANGELOG.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^head\C:\Users\lissa\Документы\ImageProcessing\src\ImageProcessing\ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4 ēb;H@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTimeAH \ No newline at end of file +f#, fsharp^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item21.0.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-link@m_Item23https://github.com/PolinaSavelyeva/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemroot@m_Item22https://PolinaSavelyeva.github.io/ImageProcessing/^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-collection-name@m_Item2ImageProcessing^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-repository-branch@m_Item2main^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-package-version@m_Item20.1.0^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-readme-link@m_Item2Fhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/README.md^tail^head@m_Item1 bDhttp://schemas.datacontract.org/2004/07/FSharp.Formatting.Templating_itemfsdocs-release-notes-link@m_Item2Ihttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/CHANGELOG.md^tail^head.nil^tail.nil@m_Item2@m_Item1 a=http://schemas.datacontract.org/2004/07/Microsoft.FSharp.Core^value2https://PolinaSavelyeva.github.io/ImageProcessing/@m_Item2 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^stringroot^string2https://PolinaSavelyeva.github.io/ImageProcessing/^stringfsdocs-collection-name^stringImageProcessing^stringfsdocs-repository-branch^stringmain^stringfsdocs-package-version^string0.1.0^stringfsdocs-readme-link^stringFhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/README.md^stringfsdocs-release-notes-link^stringIhttps://github.com/PolinaSavelyeva/ImageProcessing/blob/main/CHANGELOG.md@m_Item3 aDhttp://schemas.datacontract.org/2004/07/Microsoft.FSharp.Collections^headR/Users/svmena/Documents/ImageProcessing/src/ImageProcessing/ImageProcessing.fsproj^tail^head.nil^tail.nil@m_Item4 ēb;H@m_Item5 a9http://schemas.microsoft.com/2003/10/Serialization/Arrays^dateTime +VH \ No newline at end of file diff --git a/docs/How_Tos/Doing_A_Thing.html b/docs/How_Tos/Doing_A_Thing.html index 1b5b7ad..3f59ab4 100644 --- a/docs/How_Tos/Doing_A_Thing.html +++ b/docs/How_Tos/Doing_A_Thing.html @@ -190,75 +190,179 @@
For detailed descriptions of all features visit Api Reference.
-Filter kernels are used to call applyFilter
function.
+You can create 2D byte array as new kernel or use implemented kernels such as:
You can use either single-threaded CPU-based image processing or multi-threaded image processing. +Multithreading is performed using logger and agent functions, which specified in this section.
+Four of them are implemented:
+Open library and load image to process:
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.CPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
Create new function which sequentially applies blur filter and clockwise rotation to images and saves it on CPU:
let applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) =
- let blurredImage = image |> CPU.applyFilter gaussianBlurKernel
- let rotatedImage = blurredImage |> CPU.rotate true
+ let blurredImage = image |> applyFilter gaussianBlurKernel
+ let rotatedImage = blurredImage |> rotate true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
The result:
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.CPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
let applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) =
- let blurredImage = image |> CPU.applyFilter gaussianBlurKernel
- let rotatedImage = blurredImage |> CPU.rotate true
+ let blurredImage = image |> applyFilter gaussianBlurKernel
+ let rotatedImage = blurredImage |> rotate true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
let pathToSave = "Path/To/Directory/image_name.jpg"
applyCustomFilterOnCPU myImage pathToSave
-Simple GPU Example
+Processing on GPU
+GPU filter kernels
+Filter kernels are used to call applyFilter
function.
+You can create 2D byte array as new kernel or use implemented kernels such as:
+
+- Gaussian Blur
+- Edges
+- Sharpen
+- Lighten
+- Darken
+
+GPU processing kernels
+GPU kernels are used to call GPU-processing functions.
+They have specific defining style, so for more information about how they work I recommended to visit Brahma.Fsharp tutorial.
+But if you have no need in creating new GPU kernels just use implemented ones, such as:
+
+- applyFilterGPUKernel
+- rotateGPUKernel
+- flipGPUKernel
+
+All of them take clContext
(which is device's environment abstraction) and localWorkSize
(which shows the size of local work group) as input parameters.
+Multi-threaded processing on GPU
+You can use either single-threaded GPU-based image processing or multi-threaded image processing.
+Multithreading is performed using logger and agent functions, which specified in this section.
+Four of them are implemented:
+
+- Logger, which is used to inform user about status of operations, i.e work of another agents
+- Saver agent, which save images stored in queue and send messages to logger
+- Processing agent, which process images stored in queue using specified transformation and and send messages to logger
+- Full processing agent, which do both saving and processing
+
+Note that using logger via GPU-processing functions can cause unpredictable behavior, i.e the order in which the events occur will be broken due to the specifics of GPU operations.
+Simple GPU Example
Open library and load image to process:
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.GPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
-Create new function which sequentially applies blur filter and clockwise rotation to images and saves it on GPU. But before it we need to do some steps for diagnosing graphical device.
-Define the device
value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable). And make OpenCL context of it:
+Create new function which sequentially applies blur filter and clockwise rotation to images and saves it on GPU.
+But before it we need to do some steps for diagnosing graphical device.
+Define the device
value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable).
+And make OpenCL context of it:
let device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()
let clContext = Brahma.FSharp.ClContext(device)
-Next, define new values for filter and rotation functions. This action is necessary because of compiling kernel function once:
-let applyFilterGPU = GPU.applyFilter clContext 64
-let rotateGPU = GPU.rotate clContext 64
+Next, define new values for filter and rotation functions.
+This action is necessary because of compiling kernel function once:
+let applyFilterGPU = applyFilter clContext 64
+let rotateGPU = rotate clContext 64
And the final function:
let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
let blurredImage = image |> applyFilterGPU gaussianBlurKernel
let rotatedImage = blurredImage |> rotateGPU true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
The result:
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.GPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
let device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()
let clContext = Brahma.FSharp.ClContext(device)
-let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
- let blurredImage = image |> applyFilterGPU gaussianBlurKernel
- let rotatedImage = blurredImage |> rotateGPU true
+let applyFilterGPU = applyFilter clContext 64
+let rotateGPU = rotate clContext 64
+
+let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
+ let blurredImage = image |> applyFilterGPU gaussianBlurKernel
+ let rotatedImage = blurredImage |> rotateGPU true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
-let pathToSave = "Path/To/Directory/image_name.jpg"
+let pathToSave = "Path/To/Directory/image_name.jpg"
+
+applyCustomFilterOnGPU myImage pathToSave
+
+Processing of Multiple Images via Directories
+
+Process parameters
+The processImage
function is designed to process directories with various configuration options.
+It allows you to choose the type of agent support for processing:
+
+- Full, which uses a single agent to open, process and save
+- Partial, which uses different agents for each transformation and saving
+- PartialUsingComposition, which uses one agent for transformation and one for save
+- No, which uses naive image processing function
+
+And define a list of transformations to apply to the image, and specify the processing unit (CPU or GPU) for the operation.
+Simple Directory Processing Example
+Open library and define directories:
+open ImageProcessing.Process
+open ImageProcessing.AgentSupport
+
+let inputDirectory = "Full/Path/To/Input/Images/Folder/"
+let outputDirectory = "Full/Path/To/Output/Images/Folder/"
+
+Define list of transformations and filters that will be used. Transformations type is used to define it:
+let imageEditorsList = [Darken; Edges; RotationL]
+
+Note that transformations and filters will be applied sequentially, one-by-one on each image in the specific directory. Choose and define processing unit and multithreading mode.
+let processingUnit = GPU Brahma.FSharp.Platform.Nvidia
+let agentsSupport = AgentSupport.Full
+
+The result:
+open ImageProcessing.Process
+open ImageProcessing.AgentSupport
+
+let inputDirectory = "Full/Path/To/Input/Images/Folder/"
+let outputDirectory = "Full/Path/To/Output/Images/Folder/"
+
+let imageEditorsList = [Darken; Edges; RotationL]
+
+let processingUnit = GPU Brahma.FSharp.Platform.Nvidia
+let agentsSupport = AgentSupport.Full
-applyCustomFilterOnGPU myImage pathToSave
+processImages inputDirectory outputDirectory processingUnit imageEditorsList agentsSupport
val myImage: obj
@@ -274,6 +378,11 @@ Simpl
val rotateGPU: (bool -> obj -> obj)
val applyCustomFilterOnGPU: image: obj -> pathToSave: string -> 'a
val image: obj
+val inputDirectory: string
+val outputDirectory: string
+val imageEditorsList: obj list
+val processingUnit: obj
+val agentsSupport: obj
diff --git a/docs/Tutorials/Getting_Started.html b/docs/Tutorials/Getting_Started.html
index a7210d3..21b39e0 100644
--- a/docs/Tutorials/Getting_Started.html
+++ b/docs/Tutorials/Getting_Started.html
@@ -259,6 +259,9 @@ Usi
let device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()
let clContext = Brahma.FSharp.ClContext(device)
+let applyFilterGPU = GPU.applyFilter clContext 64
+let rotateGPU = GPU.rotate clContext 64
+
let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
let blurredImage = image |> applyFilterGPU gaussianBlurKernel
let rotatedImage = blurredImage |> rotateGPU true
diff --git a/docs/index.json b/docs/index.json
index f1bb365..7d791b1 100644
--- a/docs/index.json
+++ b/docs/index.json
@@ -1 +1 @@
-[{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global.html","title":"global","content":"Agents \nArguCommands \nCLI \nCPU \nGPU \nHelper \nKernels \nMyImage \nProcess"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html","title":"Agents","content":"Agents \n \nAgents.imageMessage \nimageMessage \nAgents.pathMessage \npathMessage \nAgents.logger \nlogger \nAgents.imageSaver \nimageSaver \nAgents.imageProcessor \nimageProcessor \nAgents.imageFullProcessor \nimageFullProcessor"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#logger","title":"Agents.logger","content":"Agents.logger \nlogger \n\n Represents a logger, which receives messages and prints them\n to the console\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#imageSaver","title":"Agents.imageSaver","content":"Agents.imageSaver \nimageSaver \n\n Defines an image saver agent that listens to image-messages and\n saves them to a specified output directory\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#imageProcessor","title":"Agents.imageProcessor","content":"Agents.imageProcessor \nimageProcessor \n\n Defines an image processing agent that listens to image-messages and\n applies the given function\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#imageFullProcessor","title":"Agents.imageFullProcessor","content":"Agents.imageFullProcessor \nimageFullProcessor \n\n Creates an image processing and saving MailboxProcessor that continuously receives path messages from\n an input mailbox. It loads, edits, and saves images to the specified output directory\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-imagemessage.html","title":"imageMessage","content":"imageMessage \n\n Represents a message type that can either contain an image or\n an end-of-stream signal, which is used with an asynchronous reply\n channel\n \nimageMessage.Image \nImage \nimageMessage.EOS \nEOS"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-imagemessage.html#Image","title":"imageMessage.Image","content":"imageMessage.Image \nImage \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-imagemessage.html#EOS","title":"imageMessage.EOS","content":"imageMessage.EOS \nEOS \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-pathmessage.html","title":"pathMessage","content":"pathMessage \n\n Represents a message type encapsulated either a string path\n or an end-of-stream message, which is used with an asynchronous\n reply channel\n \npathMessage.Path \nPath \npathMessage.EOS \nEOS"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-pathmessage.html#Path","title":"pathMessage.Path","content":"pathMessage.Path \nPath \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-pathmessage.html#EOS","title":"pathMessage.EOS","content":"pathMessage.EOS \nEOS \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-argucommands.html","title":"ArguCommands","content":"ArguCommands \n \nArguCommands.ArguProcessingUnits \nArguProcessingUnits \nArguCommands.CLIArguments \nCLIArguments \nArguCommands.arguProcessingUnitsParser \narguProcessingUnitsParser"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-argucommands.html#arguProcessingUnitsParser","title":"ArguCommands.arguProcessingUnitsParser","content":"ArguCommands.arguProcessingUnitsParser \narguProcessingUnitsParser \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html","title":"ArguProcessingUnits","content":"ArguProcessingUnits \n\n Represents the available CPU/GPU platforms for image processing\n \nArguProcessingUnits.CPU \nCPU \nArguProcessingUnits.NvidiaGPU \nNvidiaGPU \nArguProcessingUnits.IntelGPU \nIntelGPU \nArguProcessingUnits.AmdGPU \nAmdGPU \nArguProcessingUnits.AnyGPU \nAnyGPU"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#CPU","title":"ArguProcessingUnits.CPU","content":"ArguProcessingUnits.CPU \nCPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#NvidiaGPU","title":"ArguProcessingUnits.NvidiaGPU","content":"ArguProcessingUnits.NvidiaGPU \nNvidiaGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#IntelGPU","title":"ArguProcessingUnits.IntelGPU","content":"ArguProcessingUnits.IntelGPU \nIntelGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#AmdGPU","title":"ArguProcessingUnits.AmdGPU","content":"ArguProcessingUnits.AmdGPU \nAmdGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#AnyGPU","title":"ArguProcessingUnits.AnyGPU","content":"ArguProcessingUnits.AnyGPU \nAnyGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html","title":"CLIArguments","content":"CLIArguments \n \nCLIArguments.InputPath \nInputPath \nCLIArguments.OutputPath \nOutputPath \nCLIArguments.AgentsSupport \nAgentsSupport \nCLIArguments.ProcessingUnit \nProcessingUnit \nCLIArguments.Transformations \nTransformations"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#InputPath","title":"CLIArguments.InputPath","content":"CLIArguments.InputPath \nInputPath \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#OutputPath","title":"CLIArguments.OutputPath","content":"CLIArguments.OutputPath \nOutputPath \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#AgentsSupport","title":"CLIArguments.AgentsSupport","content":"CLIArguments.AgentsSupport \nAgentsSupport \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#ProcessingUnit","title":"CLIArguments.ProcessingUnit","content":"CLIArguments.ProcessingUnit \nProcessingUnit \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#Transformations","title":"CLIArguments.Transformations","content":"CLIArguments.Transformations \nTransformations \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cli.html","title":"CLI","content":"CLI \n \nCLI.main \nmain"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cli.html#main","title":"CLI.main","content":"CLI.main \nmain \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html","title":"CPU","content":"CPU \n \nCPU.applyFilter \napplyFilter \nCPU.rotate \nrotate \nCPU.flip \nflip"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html#applyFilter","title":"CPU.applyFilter","content":"CPU.applyFilter \napplyFilter \n\n Applies a filter to an input image\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html#rotate","title":"CPU.rotate","content":"CPU.rotate \nrotate \n\n Rotates an input image either clockwise or counterclockwise\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html#flip","title":"CPU.flip","content":"CPU.flip \nflip \n\n Flips an input image either vertically or horizontally\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html","title":"GPU","content":"GPU \n \nGPU.applyFilterGPUKernel \napplyFilterGPUKernel \nGPU.rotateGPUKernel \nrotateGPUKernel \nGPU.flipGPUKernel \nflipGPUKernel \nGPU.applyFilter \napplyFilter \nGPU.rotate \nrotate \nGPU.flip \nflip"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#applyFilterGPUKernel","title":"GPU.applyFilterGPUKernel","content":"GPU.applyFilterGPUKernel \napplyFilterGPUKernel \n\n Creates compiled GPU filter kernel\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#rotateGPUKernel","title":"GPU.rotateGPUKernel","content":"GPU.rotateGPUKernel \nrotateGPUKernel \n\n Creates compiled GPU rotation kernel\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#flipGPUKernel","title":"GPU.flipGPUKernel","content":"GPU.flipGPUKernel \nflipGPUKernel \n\n Creates compiled GPU flip kernel\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#applyFilter","title":"GPU.applyFilter","content":"GPU.applyFilter \napplyFilter \n\n Applies a filter to the specified image using GPU\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#rotate","title":"GPU.rotate","content":"GPU.rotate \nrotate \n\n Rotates the image clockwise or counterclockwise using GPU\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#flip","title":"GPU.flip","content":"GPU.flip \nflip \n\n Flips the image vertically or horizontally using GPU\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-helper.html","title":"Helper","content":"Helper \n \nHelper.toFlatArray \ntoFlatArray \nHelper.generatePath \ngeneratePath"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-helper.html#toFlatArray","title":"Helper.toFlatArray","content":"Helper.toFlatArray \ntoFlatArray \n\n Converts a 2D array to a flat 1D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-helper.html#generatePath","title":"Helper.generatePath","content":"Helper.generatePath \ngeneratePath \n\n Generates a file path by combining an output directory and an image name\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html","title":"Kernels","content":"Kernels \n \nKernels.gaussianBlurKernel \ngaussianBlurKernel \nKernels.edgesKernel \nedgesKernel \nKernels.darkenKernel \ndarkenKernel \nKernels.lightenKernel \nlightenKernel \nKernels.sharpenKernel \nsharpenKernel"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#gaussianBlurKernel","title":"Kernels.gaussianBlurKernel","content":"Kernels.gaussianBlurKernel \ngaussianBlurKernel \n\n Represents a Gaussian blur kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#edgesKernel","title":"Kernels.edgesKernel","content":"Kernels.edgesKernel \nedgesKernel \n\n Represents a edges kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#darkenKernel","title":"Kernels.darkenKernel","content":"Kernels.darkenKernel \ndarkenKernel \n\n Represents a darken kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#lightenKernel","title":"Kernels.lightenKernel","content":"Kernels.lightenKernel \nlightenKernel \n\n Represents a lighten kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#sharpenKernel","title":"Kernels.sharpenKernel","content":"Kernels.sharpenKernel \nsharpenKernel \n\n Represents a sharpen kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-myimage.html","title":"MyImage","content":"MyImage \n \nMyImage.MyImage \nMyImage \nMyImage.load \nload \nMyImage.save \nsave"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-myimage.html#load","title":"MyImage.load","content":"MyImage.load \nload \n\n Loads the image located at the specified file path\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-myimage.html#save","title":"MyImage.save","content":"MyImage.save \nsave \n\n Saves the image to the specified directory in the same extension as the input\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html","title":"MyImage","content":"MyImage \n\n Encapsulates an image, which includes both the byte pixel data and its associated attributes.\n \nMyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \nMyImage.Data \nData \nMyImage.Width \nWidth \nMyImage.Height \nHeight \nMyImage.Name \nName"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#\u0060\u0060.ctor\u0060\u0060","title":"MyImage.\u0060\u0060.ctor\u0060\u0060","content":"MyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Data","title":"MyImage.Data","content":"MyImage.Data \nData \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Width","title":"MyImage.Width","content":"MyImage.Width \nWidth \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Height","title":"MyImage.Height","content":"MyImage.Height \nHeight \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Name","title":"MyImage.Name","content":"MyImage.Name \nName \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html","title":"Process","content":"Process \n \nProcess.AgentsSupport \nAgentsSupport \nProcess.ProcessingUnits \nProcessingUnits \nProcess.Transformations \nTransformations \nProcess.transformationsParserCPU \ntransformationsParserCPU \nProcess.transformationsParserGPU \ntransformationsParserGPU \nProcess.processImages \nprocessImages"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html#transformationsParserCPU","title":"Process.transformationsParserCPU","content":"Process.transformationsParserCPU \ntransformationsParserCPU \n\n Parses an image transformation and returns the corresponding CPU-based transformation function\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html#transformationsParserGPU","title":"Process.transformationsParserGPU","content":"Process.transformationsParserGPU \ntransformationsParserGPU \n\n Generates GPU kernel functions for applying various image transformations\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html#processImages","title":"Process.processImages","content":"Process.processImages \nprocessImages \n\n Processes images located at the specified input path and saves the processed images to the specified output path\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html","title":"AgentsSupport","content":"AgentsSupport \n\n Specifies the level of agents support\n \nAgentsSupport.Full \nFull \nAgentsSupport.Partial \nPartial \nAgentsSupport.PartialUsingComposition \nPartialUsingComposition \nAgentsSupport.No \nNo"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#Full","title":"AgentsSupport.Full","content":"AgentsSupport.Full \nFull \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#Partial","title":"AgentsSupport.Partial","content":"AgentsSupport.Partial \nPartial \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#PartialUsingComposition","title":"AgentsSupport.PartialUsingComposition","content":"AgentsSupport.PartialUsingComposition \nPartialUsingComposition \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#No","title":"AgentsSupport.No","content":"AgentsSupport.No \nNo \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-processingunits.html","title":"ProcessingUnits","content":"ProcessingUnits \n\n Represents processing device\n \nProcessingUnits.CPU \nCPU \nProcessingUnits.GPU \nGPU"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-processingunits.html#CPU","title":"ProcessingUnits.CPU","content":"ProcessingUnits.CPU \nCPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-processingunits.html#GPU","title":"ProcessingUnits.GPU","content":"ProcessingUnits.GPU \nGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html","title":"Transformations","content":"Transformations \n\n Represents the available image transformations\n \nTransformations.Gauss \nGauss \nTransformations.Sharpen \nSharpen \nTransformations.Lighten \nLighten \nTransformations.Darken \nDarken \nTransformations.Edges \nEdges \nTransformations.RotationR \nRotationR \nTransformations.RotationL \nRotationL \nTransformations.FlipV \nFlipV \nTransformations.FlipH \nFlipH"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Gauss","title":"Transformations.Gauss","content":"Transformations.Gauss \nGauss \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Sharpen","title":"Transformations.Sharpen","content":"Transformations.Sharpen \nSharpen \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Lighten","title":"Transformations.Lighten","content":"Transformations.Lighten \nLighten \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Darken","title":"Transformations.Darken","content":"Transformations.Darken \nDarken \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Edges","title":"Transformations.Edges","content":"Transformations.Edges \nEdges \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#RotationR","title":"Transformations.RotationR","content":"Transformations.RotationR \nRotationR \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#RotationL","title":"Transformations.RotationL","content":"Transformations.RotationL \nRotationL \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#FlipV","title":"Transformations.FlipV","content":"Transformations.FlipV \nFlipV \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#FlipH","title":"Transformations.FlipH","content":"Transformations.FlipH \nFlipH \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/index.html","title":"Introduction to ImageProcessing\r\n","content":"# Introduction to ImageProcessing\n\n---\n\n## What is ImageProcessing?\n\nImageProcessing is an easy-to-use F# package that utilizes [Brahma.FSharp](https://github.com/YaccConstructor/Brahma.FSharp)\nand [SixLabors.ImageSharph](https://github.com/SixLabors/ImageSharp). It offers two primary image processing options: CPU\nand GPU or agent-supported processing, all accessible within the included console application.\n\n## Why use ImageProcessing?\n\nIt can helps you to process your images quickly using GPU or only command-line. \n\nThere is some of the features implemented in ImageProcessing.\n\n* Loading images from a local source and saving them.\n* Processing all images within a specified directory.\n* Filtering using one of five kernels, including \u0022Gaussian blur\u0022 and \u0022edges\u0022.\n* Other edits such as 90-degree rotation and flipping.\n* Combinations of existing transformations in four different scenarios.\n* Ability to utilize all of the features solely through the command line.\n\n---\n\n\u003Cdiv class=\u0022row row-cols-1 row-cols-md-2\u0022\u003E\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003EHow-To make your own code\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003ECreate new processing function using \u0022bricks\u0022 via ImageProcessing. \u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}How-Tos/Doing_A_Thing.html\u0022 class=\u0022btn btn-primary\u0022\u003ELearn how to code\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003EHow-To use CLI\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003EQuickly process your images using command line. \u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}How_Tos/Doing_Another_Thing.html\u0022 class=\u0022btn btn-primary\u0022\u003ELearn CLI\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022col mb-4 mb-md-0\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003ELibrary structure\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003EHelps you better understanding library\u0027s functions, modules and structures dependencies. \u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}Explanations/Background.html\u0022 class=\u0022btn btn-primary\u0022\u003EDive Deeper\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022col\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003EApi Reference\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003EContain technical reference for APIs.\u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}reference/index.html\u0022 class=\u0022btn btn-primary\u0022\u003ERead Api Docs\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n\u003C/div\u003E\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/Explanations/Background.html","title":"Background","content":"---\r\ntitle: Background\r\ncategory: Explanations\r\ncategoryindex: 3\r\nindex: 1\r\n---\r\n\r\n# Background\r\n\r\nHere\u0027s a core concept and reasons why this exists at a deeper level. CHECK\r\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/How_Tos/Doing_Another_Thing.html","title":"How To do a second thing","content":"---\ntitle: How To do a second thing\ncategory: How To Guides\ncategoryindex: 2\nindex: 2\n---\n\n# How-To use CLI\n\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/How_Tos/Doing_A_Thing.html","title":"How To do a first thing","content":"---\ntitle: How To do a first thing\ncategory: How To Guides\ncategoryindex: 2\nindex: 1\n---\n\n# How-To make your own code\n\n## Implemented Features\n\n---\n\nImageProcessing supports the following features, which you can use when implementing your examples:\n\n* **Filters for CPU/GPU**\n * Gaussian Blur\n * Edges\n * Sharpen\n * Lighten\n * Darken\n\n\n* **Transformations for CPU/GPU**\n * Clockwise rotation\n * Counterclockwise rotation\n * Vertical flip (Y-axis)\n * Horizontal flip (X-axis)\n\n\n* **Multithreaded processing tools**\n * Saving agent\n * Processing agent\n * Full processing agent, i.e saving plus processing\n * Events logger\n\n\n* **Directory with pictures processing tool**\n\n Also you can specify:\n * Processing unit (CPU or GPU)\n * Agents support\n\nFor detailed descriptions of all features visit [Api Reference]().\n\n\n## Simple CPU Example\n\n---\n\nOpen library and load image to process:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\u0060\u0060\u0060\n\nCreate new function which sequentially applies blur filter and clockwise rotation to images and saves it on CPU:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E CPU.applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E CPU.rotate true\n \n MyImage.save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E CPU.applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E CPU.rotate true\n \n MyImage.save rotatedImage pathToSave\n \nlet pathToSave = \u0022Path/To/Directory/image_name.jpg\u0022\n\napplyCustomFilterOnCPU myImage pathToSave\n\u0060\u0060\u0060\n\n## Simple GPU Example\n\n---\n\nOpen library and load image to process:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\u0060\u0060\u0060\n\nCreate new function which sequentially applies blur filter and clockwise rotation to images and saves it on GPU. But before it we need to do some steps for diagnosing graphical device.\n\nDefine the \u0060\u0060device\u0060\u0060 value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable). And make OpenCL context of it:\n\n\u0060\u0060\u0060fsharp\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\u0060\u0060\u0060\n\nNext, define new values for filter and rotation functions. This action is necessary because of compiling [kernel function]() once:\n\n\u0060\u0060\u0060fsharp\nlet applyFilterGPU = GPU.applyFilter clContext 64\nlet rotateGPU = GPU.rotate clContext 64\n\u0060\u0060\u0060\n\nAnd the final function:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n MyImage.save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n MyImage.save rotatedImage pathToSave\n \nlet pathToSave = \u0022Path/To/Directory/image_name.jpg\u0022\n\napplyCustomFilterOnGPU myImage pathToSave\n\u0060\u0060\u0060\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/Tutorials/Getting_Started.html","title":"Getting Started","content":"---\ntitle: Getting Started\ncategory: Tutorials\ncategoryindex: 1\nindex: 1\n---\n\n# Getting Started with ImageProcessing\n\n\n## Prepearing\n\n---\n\n### Requirements\n\nFirst of all, make sure the following requirements are installed on your system:\n\n* [dotnet SDK](https://www.microsoft.com/net/download/core) 3.0 or higher (recommended 6.0\u002B),\n* [Mono](http://www.mono-project.com/) if you\u0027re on Linux or macOS or\n* [VSCode Dev Container](https://code.visualstudio.com/docs/remote/containers).\n\nTo find more building and running options take a look at the [MiniScaffold](https://github.com/TheAngryByrd/MiniScaffold) template.\n\n### Package Adding\n\nGo to directory with your \u0060\u0060build.fsproj\u0060\u0060 (or \u0060\u0060build.csproj\u0060\u0060) file and install ImageProcessing using command line:\n\n [lang=bash]\n dotnet add package ImageProcessing --version 1.0.0\n\nFor more information visit package main [GitHub page](https://github.com/PolinaSavelyeva/ImageProcessing/pkgs/nuget/ImageProcessing).\n\n## Features\n\n---\n\nThe following features are implemented, even for CPU and GPU:\n\n* **Filters**\n * Gaussian Blur\n * Edges\n * Sharpen\n * Lighten\n * Darken\n\n\n* **Transformations**\n * Clockwise rotation\n * Counterclockwise rotation\n * Vertical flip (Y-axis)\n * Horizontal flip (X-axis)\n\n\n* **Multithreaded processing tools**\n * Saving agent\n * Processing agent\n * Full processing agent, i.e saving plus processing\n * Events logger\n\n\n* **Directory with pictures processing tool**\n\nFor detailed descriptions of all features above visit [Api Reference]().\n\n## Simple Usage\n\n---\n\n### Using CLI\nBefore usage, go to specify directory:\n\n\u0060\u0060\u0060sh\n$ cd /path/to/ImageProcessing/src/ImageProcessing\n\u0060\u0060\u0060\nTo process images from one directory and save them to another, you can use the following commands.\n\n* **\u041Ene transformation applied to each image in the directory**\n\n\u0060\u0060\u0060sh\n$ dotnet run -in /input/path -out /output/path -agent=full -unit=cpu gauss\n\u0060\u0060\u0060\n\n* **List of transformations that are sequentially applied**\n\n\u0060\u0060\u0060sh\n$ dotnet run -in /input/path -out /output/path -agent=no -unit=anygpu gauss sharpen\n\u0060\u0060\u0060\n\nMore details about CLI processing you can find [here]().\n\n### Using Your Own Code\n\nOpen library and load image to process:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\u0060\u0060\u0060\n\nCreate new function which sequentially applies blur filter and clockwise rotation to images and saves it on CPU:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E CPU.applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E CPU.rotate true\n \n MyImage.save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nCreate the same function for GPU. But before it we need to do some steps for diagnosing graphical device.\n\nDefine the \u0060\u0060device\u0060\u0060 value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable). And make OpenCL context of it:\n\n\u0060\u0060\u0060fsharp\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\u0060\u0060\u0060\n\nNext, define new values for filter and rotation functions. This action is necessary because of compiling [kernel function]() once:\n\n\u0060\u0060\u0060fsharp\nlet applyFilterGPU = GPU.applyFilter clContext 64\nlet rotateGPU = GPU.rotate clContext 64\n\u0060\u0060\u0060\n\nAnd the final function:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n MyImage.save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E CPU.applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E CPU.rotate true\n \n MyImage.save rotatedImage pathToSave\n\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n MyImage.save rotatedImage pathToSave\n \nlet pathToSave = \u0022Path/To/Directory/image_name.jpg\u0022\n\napplyCustomFilterOnCPU myImage pathToSave\napplyCustomFilterOnGPU myImage pathToSave\n\u0060\u0060\u0060\n"}]
\ No newline at end of file
+[{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global.html","title":"global","content":"Agents \nArguCommands \nCLI \nCPU \nGPU \nHelper \nKernels \nMyImage \nProcess"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html","title":"Agents","content":"Agents \n \nAgents.imageMessage \nimageMessage \nAgents.pathMessage \npathMessage \nAgents.logger \nlogger \nAgents.imageSaver \nimageSaver \nAgents.imageProcessor \nimageProcessor \nAgents.imageFullProcessor \nimageFullProcessor"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#logger","title":"Agents.logger","content":"Agents.logger \nlogger \n\n Represents a logger, which receives messages and prints them\n to the console\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#imageSaver","title":"Agents.imageSaver","content":"Agents.imageSaver \nimageSaver \n\n Defines an image saver agent that listens to image-messages and\n saves them to a specified output directory\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#imageProcessor","title":"Agents.imageProcessor","content":"Agents.imageProcessor \nimageProcessor \n\n Defines an image processing agent that listens to image-messages and\n applies the given function\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-agents.html#imageFullProcessor","title":"Agents.imageFullProcessor","content":"Agents.imageFullProcessor \nimageFullProcessor \n\n Creates an image processing and saving MailboxProcessor that continuously receives path messages from\n an input mailbox. It loads, edits, and saves images to the specified output directory\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-imagemessage.html","title":"imageMessage","content":"imageMessage \n\n Represents a message type that can either contain an image or\n an end-of-stream signal, which is used with an asynchronous reply\n channel\n \nimageMessage.Image \nImage \nimageMessage.EOS \nEOS"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-imagemessage.html#Image","title":"imageMessage.Image","content":"imageMessage.Image \nImage \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-imagemessage.html#EOS","title":"imageMessage.EOS","content":"imageMessage.EOS \nEOS \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-pathmessage.html","title":"pathMessage","content":"pathMessage \n\n Represents a message type encapsulated either a string path\n or an end-of-stream message, which is used with an asynchronous\n reply channel\n \npathMessage.Path \nPath \npathMessage.EOS \nEOS"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-pathmessage.html#Path","title":"pathMessage.Path","content":"pathMessage.Path \nPath \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/agents-pathmessage.html#EOS","title":"pathMessage.EOS","content":"pathMessage.EOS \nEOS \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-argucommands.html","title":"ArguCommands","content":"ArguCommands \n \nArguCommands.ArguProcessingUnits \nArguProcessingUnits \nArguCommands.CLIArguments \nCLIArguments \nArguCommands.arguProcessingUnitsParser \narguProcessingUnitsParser"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-argucommands.html#arguProcessingUnitsParser","title":"ArguCommands.arguProcessingUnitsParser","content":"ArguCommands.arguProcessingUnitsParser \narguProcessingUnitsParser \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html","title":"ArguProcessingUnits","content":"ArguProcessingUnits \n\n Represents the available CPU/GPU platforms for image processing\n \nArguProcessingUnits.CPU \nCPU \nArguProcessingUnits.NvidiaGPU \nNvidiaGPU \nArguProcessingUnits.IntelGPU \nIntelGPU \nArguProcessingUnits.AmdGPU \nAmdGPU \nArguProcessingUnits.AnyGPU \nAnyGPU"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#CPU","title":"ArguProcessingUnits.CPU","content":"ArguProcessingUnits.CPU \nCPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#NvidiaGPU","title":"ArguProcessingUnits.NvidiaGPU","content":"ArguProcessingUnits.NvidiaGPU \nNvidiaGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#IntelGPU","title":"ArguProcessingUnits.IntelGPU","content":"ArguProcessingUnits.IntelGPU \nIntelGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#AmdGPU","title":"ArguProcessingUnits.AmdGPU","content":"ArguProcessingUnits.AmdGPU \nAmdGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-arguprocessingunits.html#AnyGPU","title":"ArguProcessingUnits.AnyGPU","content":"ArguProcessingUnits.AnyGPU \nAnyGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html","title":"CLIArguments","content":"CLIArguments \n \nCLIArguments.InputPath \nInputPath \nCLIArguments.OutputPath \nOutputPath \nCLIArguments.AgentsSupport \nAgentsSupport \nCLIArguments.ProcessingUnit \nProcessingUnit \nCLIArguments.Transformations \nTransformations"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#InputPath","title":"CLIArguments.InputPath","content":"CLIArguments.InputPath \nInputPath \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#OutputPath","title":"CLIArguments.OutputPath","content":"CLIArguments.OutputPath \nOutputPath \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#AgentsSupport","title":"CLIArguments.AgentsSupport","content":"CLIArguments.AgentsSupport \nAgentsSupport \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#ProcessingUnit","title":"CLIArguments.ProcessingUnit","content":"CLIArguments.ProcessingUnit \nProcessingUnit \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/argucommands-cliarguments.html#Transformations","title":"CLIArguments.Transformations","content":"CLIArguments.Transformations \nTransformations \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cli.html","title":"CLI","content":"CLI \n \nCLI.main \nmain"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cli.html#main","title":"CLI.main","content":"CLI.main \nmain \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html","title":"CPU","content":"CPU \n \nCPU.applyFilter \napplyFilter \nCPU.rotate \nrotate \nCPU.flip \nflip"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html#applyFilter","title":"CPU.applyFilter","content":"CPU.applyFilter \napplyFilter \n\n Applies a filter to an input image\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html#rotate","title":"CPU.rotate","content":"CPU.rotate \nrotate \n\n Rotates an input image either clockwise or counterclockwise\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-cpu.html#flip","title":"CPU.flip","content":"CPU.flip \nflip \n\n Flips an input image either vertically or horizontally\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html","title":"GPU","content":"GPU \n \nGPU.applyFilterGPUKernel \napplyFilterGPUKernel \nGPU.rotateGPUKernel \nrotateGPUKernel \nGPU.flipGPUKernel \nflipGPUKernel \nGPU.applyFilter \napplyFilter \nGPU.rotate \nrotate \nGPU.flip \nflip"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#applyFilterGPUKernel","title":"GPU.applyFilterGPUKernel","content":"GPU.applyFilterGPUKernel \napplyFilterGPUKernel \n\n Creates compiled GPU filter kernel\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#rotateGPUKernel","title":"GPU.rotateGPUKernel","content":"GPU.rotateGPUKernel \nrotateGPUKernel \n\n Creates compiled GPU rotation kernel\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#flipGPUKernel","title":"GPU.flipGPUKernel","content":"GPU.flipGPUKernel \nflipGPUKernel \n\n Creates compiled GPU flip kernel\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#applyFilter","title":"GPU.applyFilter","content":"GPU.applyFilter \napplyFilter \n\n Applies a filter to the specified image using GPU\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#rotate","title":"GPU.rotate","content":"GPU.rotate \nrotate \n\n Rotates the image clockwise or counterclockwise using GPU\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-gpu.html#flip","title":"GPU.flip","content":"GPU.flip \nflip \n\n Flips the image vertically or horizontally using GPU\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-helper.html","title":"Helper","content":"Helper \n \nHelper.toFlatArray \ntoFlatArray \nHelper.generatePath \ngeneratePath"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-helper.html#toFlatArray","title":"Helper.toFlatArray","content":"Helper.toFlatArray \ntoFlatArray \n\n Converts a 2D array to a flat 1D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-helper.html#generatePath","title":"Helper.generatePath","content":"Helper.generatePath \ngeneratePath \n\n Generates a file path by combining an output directory and an image name\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html","title":"Kernels","content":"Kernels \n \nKernels.gaussianBlurKernel \ngaussianBlurKernel \nKernels.edgesKernel \nedgesKernel \nKernels.darkenKernel \ndarkenKernel \nKernels.lightenKernel \nlightenKernel \nKernels.sharpenKernel \nsharpenKernel"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#gaussianBlurKernel","title":"Kernels.gaussianBlurKernel","content":"Kernels.gaussianBlurKernel \ngaussianBlurKernel \n\n Represents a Gaussian blur kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#edgesKernel","title":"Kernels.edgesKernel","content":"Kernels.edgesKernel \nedgesKernel \n\n Represents a edges kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#darkenKernel","title":"Kernels.darkenKernel","content":"Kernels.darkenKernel \ndarkenKernel \n\n Represents a darken kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#lightenKernel","title":"Kernels.lightenKernel","content":"Kernels.lightenKernel \nlightenKernel \n\n Represents a lighten kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-kernels.html#sharpenKernel","title":"Kernels.sharpenKernel","content":"Kernels.sharpenKernel \nsharpenKernel \n\n Represents a sharpen kernel for filter applying on CPU as a 2D array\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-myimage.html","title":"MyImage","content":"MyImage \n \nMyImage.MyImage \nMyImage \nMyImage.load \nload \nMyImage.save \nsave"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-myimage.html#load","title":"MyImage.load","content":"MyImage.load \nload \n\n Loads the image located at the specified file path\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-myimage.html#save","title":"MyImage.save","content":"MyImage.save \nsave \n\n Saves the image to the specified directory in the same extension as the input\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html","title":"MyImage","content":"MyImage \n\n Encapsulates an image, which includes both the byte pixel data and its associated attributes.\n \nMyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \nMyImage.Data \nData \nMyImage.Width \nWidth \nMyImage.Height \nHeight \nMyImage.Name \nName"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#\u0060\u0060.ctor\u0060\u0060","title":"MyImage.\u0060\u0060.ctor\u0060\u0060","content":"MyImage.\u0060\u0060.ctor\u0060\u0060 \n\u0060\u0060.ctor\u0060\u0060 \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Data","title":"MyImage.Data","content":"MyImage.Data \nData \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Width","title":"MyImage.Width","content":"MyImage.Width \nWidth \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Height","title":"MyImage.Height","content":"MyImage.Height \nHeight \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/myimage-myimage.html#Name","title":"MyImage.Name","content":"MyImage.Name \nName \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html","title":"Process","content":"Process \n \nProcess.AgentsSupport \nAgentsSupport \nProcess.ProcessingUnits \nProcessingUnits \nProcess.Transformations \nTransformations \nProcess.transformationsParserCPU \ntransformationsParserCPU \nProcess.transformationsParserGPU \ntransformationsParserGPU \nProcess.processImages \nprocessImages"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html#transformationsParserCPU","title":"Process.transformationsParserCPU","content":"Process.transformationsParserCPU \ntransformationsParserCPU \n\n Parses an image transformation and returns the corresponding CPU-based transformation function\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html#transformationsParserGPU","title":"Process.transformationsParserGPU","content":"Process.transformationsParserGPU \ntransformationsParserGPU \n\n Generates GPU kernel functions for applying various image transformations\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/global-process.html#processImages","title":"Process.processImages","content":"Process.processImages \nprocessImages \n\n Processes images located at the specified input path and saves the processed images to the specified output path\n "},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html","title":"AgentsSupport","content":"AgentsSupport \n\n Specifies the level of agents support\n \nAgentsSupport.Full \nFull \nAgentsSupport.Partial \nPartial \nAgentsSupport.PartialUsingComposition \nPartialUsingComposition \nAgentsSupport.No \nNo"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#Full","title":"AgentsSupport.Full","content":"AgentsSupport.Full \nFull \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#Partial","title":"AgentsSupport.Partial","content":"AgentsSupport.Partial \nPartial \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#PartialUsingComposition","title":"AgentsSupport.PartialUsingComposition","content":"AgentsSupport.PartialUsingComposition \nPartialUsingComposition \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html#No","title":"AgentsSupport.No","content":"AgentsSupport.No \nNo \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-processingunits.html","title":"ProcessingUnits","content":"ProcessingUnits \n\n Represents processing device\n \nProcessingUnits.CPU \nCPU \nProcessingUnits.GPU \nGPU"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-processingunits.html#CPU","title":"ProcessingUnits.CPU","content":"ProcessingUnits.CPU \nCPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-processingunits.html#GPU","title":"ProcessingUnits.GPU","content":"ProcessingUnits.GPU \nGPU \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html","title":"Transformations","content":"Transformations \n\n Represents the available image transformations\n \nTransformations.Gauss \nGauss \nTransformations.Sharpen \nSharpen \nTransformations.Lighten \nLighten \nTransformations.Darken \nDarken \nTransformations.Edges \nEdges \nTransformations.RotationR \nRotationR \nTransformations.RotationL \nRotationL \nTransformations.FlipV \nFlipV \nTransformations.FlipH \nFlipH"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Gauss","title":"Transformations.Gauss","content":"Transformations.Gauss \nGauss \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Sharpen","title":"Transformations.Sharpen","content":"Transformations.Sharpen \nSharpen \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Lighten","title":"Transformations.Lighten","content":"Transformations.Lighten \nLighten \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Darken","title":"Transformations.Darken","content":"Transformations.Darken \nDarken \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#Edges","title":"Transformations.Edges","content":"Transformations.Edges \nEdges \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#RotationR","title":"Transformations.RotationR","content":"Transformations.RotationR \nRotationR \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#RotationL","title":"Transformations.RotationL","content":"Transformations.RotationL \nRotationL \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#FlipV","title":"Transformations.FlipV","content":"Transformations.FlipV \nFlipV \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/reference/process-transformations.html#FlipH","title":"Transformations.FlipH","content":"Transformations.FlipH \nFlipH \n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/index.html","title":"Introduction to ImageProcessing\n","content":"# Introduction to ImageProcessing\n\n---\n\n## What is ImageProcessing?\n\nImageProcessing is an easy-to-use F# package that utilizes [Brahma.FSharp](https://github.com/YaccConstructor/Brahma.FSharp)\nand [SixLabors.ImageSharph](https://github.com/SixLabors/ImageSharp). It offers two primary image processing options: CPU\nand GPU or agent-supported processing, all accessible within the included console application.\n\n## Why use ImageProcessing?\n\nIt can helps you to process your images quickly using GPU or only command-line. \n\nThere is some of the features implemented in ImageProcessing.\n\n* Loading images from a local source and saving them.\n* Processing all images within a specified directory.\n* Filtering using one of five kernels, including \u0022Gaussian blur\u0022 and \u0022edges\u0022.\n* Other edits such as 90-degree rotation and flipping.\n* Combinations of existing transformations in four different scenarios.\n* Ability to utilize all of the features solely through the command line.\n\n---\n\n\u003Cdiv class=\u0022row row-cols-1 row-cols-md-2\u0022\u003E\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003EHow-To make your own code\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003ECreate new processing function using \u0022bricks\u0022 via ImageProcessing. \u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}How-Tos/Doing_A_Thing.html\u0022 class=\u0022btn btn-primary\u0022\u003ELearn how to code\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022col mb-4\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003EHow-To use CLI\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003EQuickly process your images using command line. \u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}How_Tos/Doing_Another_Thing.html\u0022 class=\u0022btn btn-primary\u0022\u003ELearn CLI\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022col mb-4 mb-md-0\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003ELibrary structure\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003EHelps you better understanding library\u0027s functions, modules and structures dependencies. \u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}Explanations/Background.html\u0022 class=\u0022btn btn-primary\u0022\u003EDive Deeper\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022col\u0022\u003E\n \u003Cdiv class=\u0022card h-100\u0022\u003E\n \u003Cdiv class=\u0022card-body\u0022\u003E\n \u003Ch5 class=\u0022card-title\u0022\u003EApi Reference\u003C/h5\u003E\n \u003Cp class=\u0022card-text\u0022\u003EContain technical reference for APIs.\u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\u0022card-footer text-right border-top-0\u0022\u003E\n \u003Ca href=\u0022{{root}}reference/index.html\u0022 class=\u0022btn btn-primary\u0022\u003ERead Api Docs\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n\u003C/div\u003E\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/Explanations/Background.html","title":"Background","content":"---\ntitle: Background\ncategory: Explanations\ncategoryindex: 3\nindex: 1\n---\n\n# Background\n\nHere\u0027s a core concept and reasons why this exists at a deeper level. CHECK\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/Tutorials/Getting_Started.html","title":"Getting Started","content":"---\ntitle: Getting Started\ncategory: Tutorials\ncategoryindex: 1\nindex: 1\n---\n\n# Getting Started with ImageProcessing\n\n\n## Prepearing\n\n---\n\n### Requirements\n\nFirst of all, make sure the following requirements are installed on your system:\n\n* [dotnet SDK](https://www.microsoft.com/net/download/core) 3.0 or higher (recommended 6.0\u002B),\n* [Mono](http://www.mono-project.com/) if you\u0027re on Linux or macOS or\n* [VSCode Dev Container](https://code.visualstudio.com/docs/remote/containers).\n\nTo find more building and running options take a look at the [MiniScaffold](https://github.com/TheAngryByrd/MiniScaffold) template.\n\n### Package Adding\n\nGo to directory with your \u0060\u0060build.fsproj\u0060\u0060 (or \u0060\u0060build.csproj\u0060\u0060) file and install ImageProcessing using command line:\n\n [lang=bash]\n dotnet add package ImageProcessing --version 1.0.0\n\nFor more information visit package main [GitHub page](https://github.com/PolinaSavelyeva/ImageProcessing/pkgs/nuget/ImageProcessing).\n\n## Features\n\n---\n\nThe following features are implemented, even for CPU and GPU:\n\n* **Filters**\n * Gaussian Blur\n * Edges\n * Sharpen\n * Lighten\n * Darken\n\n\n* **Transformations**\n * Clockwise rotation\n * Counterclockwise rotation\n * Vertical flip (Y-axis)\n * Horizontal flip (X-axis)\n\n\n* **Multithreaded processing tools**\n * Saving agent\n * Processing agent\n * Full processing agent, i.e saving plus processing\n * Events logger\n\n\n* **Directory with pictures processing tool**\n\nFor detailed descriptions of all features above visit [Api Reference]().\n\n## Simple Usage\n\n---\n\n### Using CLI\nBefore usage, go to specify directory:\n\n\u0060\u0060\u0060sh\n$ cd /path/to/ImageProcessing/src/ImageProcessing\n\u0060\u0060\u0060\nTo process images from one directory and save them to another, you can use the following commands.\n\n* **\u041Ene transformation applied to each image in the directory**\n\n\u0060\u0060\u0060sh\n$ dotnet run -in /input/path -out /output/path -agent=full -unit=cpu gauss\n\u0060\u0060\u0060\n\n* **List of transformations that are sequentially applied**\n\n\u0060\u0060\u0060sh\n$ dotnet run -in /input/path -out /output/path -agent=no -unit=anygpu gauss sharpen\n\u0060\u0060\u0060\n\nMore details about CLI processing you can find [here]().\n\n### Using Your Own Code\n\nOpen library and load image to process:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\u0060\u0060\u0060\n\nCreate new function which sequentially applies blur filter and clockwise rotation to images and saves it on CPU:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E CPU.applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E CPU.rotate true\n \n MyImage.save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nCreate the same function for GPU. But before it we need to do some steps for diagnosing graphical device.\n\nDefine the \u0060\u0060device\u0060\u0060 value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable). And make OpenCL context of it:\n\n\u0060\u0060\u0060fsharp\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\u0060\u0060\u0060\n\nNext, define new values for filter and rotation functions. This action is necessary because of compiling [kernel function]() once:\n\n\u0060\u0060\u0060fsharp\nlet applyFilterGPU = GPU.applyFilter clContext 64\nlet rotateGPU = GPU.rotate clContext 64\n\u0060\u0060\u0060\n\nAnd the final function:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n MyImage.save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing\n\nlet myImage = MyImage.load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E CPU.applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E CPU.rotate true\n \n MyImage.save rotatedImage pathToSave\n\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\nlet applyFilterGPU = GPU.applyFilter clContext 64\nlet rotateGPU = GPU.rotate clContext 64\n\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n MyImage.save rotatedImage pathToSave\n \nlet pathToSave = \u0022Path/To/Directory/image_name.jpg\u0022\n\napplyCustomFilterOnCPU myImage pathToSave\napplyCustomFilterOnGPU myImage pathToSave\n\u0060\u0060\u0060\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/How_Tos/Doing_A_Thing.html","title":"How To do a first thing","content":"---\ntitle: How To do a first thing\ncategory: How To Guides\ncategoryindex: 2\nindex: 1\n---\n\n# How-To make your own code\n\n## Implemented Features\n\n---\n\nImageProcessing supports the following features, which you can use when implementing your examples:\n\n* **Filters for CPU/GPU**\n * Gaussian Blur\n * Edges\n * Sharpen\n * Lighten\n * Darken\n\n\n* **Transformations for CPU/GPU**\n * Clockwise rotation\n * Counterclockwise rotation\n * Vertical flip (Y-axis)\n * Horizontal flip (X-axis)\n\n\n* **Multithreaded processing tools**\n * Saving agent\n * Processing agent\n * Full processing agent, i.e saving plus processing\n * Events logger\n\n\n* **Directory with pictures processing tool**\n\n Also you can specify:\n * Processing unit (CPU or GPU)\n * Agents support\n\nFor detailed descriptions of all features visit [Api Reference]().\n\n\n\n## Processing on CPU\n\n---\n\n### CPU filter kernels\n\nFilter kernels are used to call \u0060\u0060applyFilter\u0060\u0060 function. \nYou can create 2D byte array as new kernel or use implemented [kernels](https://polinasavelyeva.github.io/ImageProcessing/reference/global-kernels.html) such as:\n\n* Gaussian Blur\n* Edges\n* Sharpen\n* Lighten\n* Darken\n\n### Multi-threaded processing on CPU\n\nYou can use either single-threaded CPU-based image processing or multi-threaded image processing.\nMultithreading is performed using logger and agent functions, which specified in this [section](https://polinasavelyeva.github.io/ImageProcessing/reference/global-agents.html).\n\nFour of them are implemented:\n\n* Logger, which is used to inform user about status of operations, i.e work of another agents\n* Saver agent, which save images stored in queue and send messages to logger\n* Processing agent, which process images stored in queue using specified transformation and and send messages to logger\n* Full processing agent, which do both saving and processing \n\n\n### Simple CPU Example\n\nOpen library and load image to process:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing.MyImage\nopen ImageProcessing.CPU\n\nlet myImage = load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\u0060\u0060\u0060\n\nCreate new function which sequentially applies blur filter and clockwise rotation to images and saves it on CPU:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotate true\n \n save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing.MyImage\nopen ImageProcessing.CPU\n\nlet myImage = load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\nlet applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilter gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotate true\n \n save rotatedImage pathToSave\n \nlet pathToSave = \u0022Path/To/Directory/image_name.jpg\u0022\n\napplyCustomFilterOnCPU myImage pathToSave\n\u0060\u0060\u0060\n\n## Processing on GPU\n\n---\n\n### GPU filter kernels\n\nFilter kernels are used to call \u0060\u0060applyFilter\u0060\u0060 function.\nYou can create 2D byte array as new kernel or use implemented [kernels](https://polinasavelyeva.github.io/ImageProcessing/reference/global-kernels.html) such as:\n\n* Gaussian Blur\n* Edges\n* Sharpen\n* Lighten\n* Darken\n\n### GPU processing kernels\n\nGPU kernels are used to call GPU-processing functions.\nThey have specific defining style, so for more information about how they work I recommended to visit [Brahma.Fsharp tutorial](https://yaccconstructor.github.io/Brahma.FSharp/Articles/Custom_Kernels.html).\nBut if you have no need in creating new GPU kernels just use implemented [ones](https://polinasavelyeva.github.io/ImageProcessing/reference/global-gpu.html), such as:\n\n* applyFilterGPUKernel\n* rotateGPUKernel\n* flipGPUKernel\n\nAll of them take \u0060\u0060clContext\u0060\u0060 (which is device\u0027s environment abstraction) and \u0060\u0060localWorkSize\u0060\u0060 (which shows the size of local work group) as input parameters.\n\n### Multi-threaded processing on GPU\n\nYou can use either single-threaded GPU-based image processing or multi-threaded image processing.\nMultithreading is performed using logger and agent functions, which specified in this [section](https://polinasavelyeva.github.io/ImageProcessing/reference/global-agents.html).\n\nFour of them are implemented:\n\n* Logger, which is used to inform user about status of operations, i.e work of another agents\n* Saver agent, which save images stored in queue and send messages to logger\n* Processing agent, which process images stored in queue using specified transformation and and send messages to logger\n* Full processing agent, which do both saving and processing\n\nNote that using logger via GPU-processing functions can cause unpredictable behavior, i.e the order in which the events occur will be broken due to the specifics of GPU operations.\n\n\n### Simple GPU Example\n\nOpen library and load image to process:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing.MyImage\nopen ImageProcessing.GPU\n\nlet myImage = load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\u0060\u0060\u0060\n\nCreate new function which sequentially applies blur filter and clockwise rotation to images and saves it on GPU. \nBut before it we need to do some steps for diagnosing graphical device.\n\nDefine the \u0060\u0060device\u0060\u0060 value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable). \nAnd make OpenCL context of it:\n\n\u0060\u0060\u0060fsharp\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\u0060\u0060\u0060\n\nNext, define new values for filter and rotation functions. \nThis action is necessary because of compiling [kernel function](#gpu-processing-kernels) once:\n\n\u0060\u0060\u0060fsharp\nlet applyFilterGPU = applyFilter clContext 64\nlet rotateGPU = rotate clContext 64\n\u0060\u0060\u0060\n\nAnd the final function:\n\n\u0060\u0060\u0060fsharp\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n save rotatedImage pathToSave\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing.MyImage\nopen ImageProcessing.GPU\n\nlet myImage = load (\u0022Full/Path/To/Images/Folder/image_name.jpg\u0022)\n\nlet device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()\nlet clContext = Brahma.FSharp.ClContext(device)\n\nlet applyFilterGPU = applyFilter clContext 64\nlet rotateGPU = rotate clContext 64\n\nlet applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) = \n let blurredImage = image |\u003E applyFilterGPU gaussianBlurKernel\n let rotatedImage = blurredImage |\u003E rotateGPU true\n \n save rotatedImage pathToSave\n \nlet pathToSave = \u0022Path/To/Directory/image_name.jpg\u0022\n\napplyCustomFilterOnGPU myImage pathToSave\n\u0060\u0060\u0060\n\n## Processing of Multiple Images via Directories\n\n---\n\n### Process parameters\n\nThe \u0060\u0060processImage\u0060\u0060 function is designed to process directories with various configuration options. \nIt allows you to choose the type of [agent support](https://polinasavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html) for processing:\n\n* Full, which uses a single agent to open, process and save\n* Partial, which uses different agents for each transformation and saving\n* PartialUsingComposition, which uses one agent for transformation and one for save\n* No, which uses naive image processing function\n\nAnd define a list of [transformations](https://polinasavelyeva.github.io/ImageProcessing/reference/process-transformations.html) to apply to the image, and specify the [processing unit](https://polinasavelyeva.github.io/ImageProcessing/reference/process-processingunits.html) (CPU or GPU) for the operation. \n\n### Simple Directory Processing Example\n\nOpen library and define directories:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing.Process\nopen ImageProcessing.AgentSupport\n\nlet inputDirectory = \u0022Full/Path/To/Input/Images/Folder/\u0022\nlet outputDirectory = \u0022Full/Path/To/Output/Images/Folder/\u0022\n\u0060\u0060\u0060\n\nDefine list of transformations and filters that will be used. [Transformations](https://polinasavelyeva.github.io/ImageProcessing/reference/process-transformations.html) type is used to define it:\n\n\u0060\u0060\u0060fsharp\nlet imageEditorsList = [Darken; Edges; RotationL]\n\u0060\u0060\u0060\n\nNote that transformations and filters will be applied sequentially, one-by-one on each image in the specific directory. Choose and define [processing unit](https://polinasavelyeva.github.io/ImageProcessing/reference/process-processingunits.html#CPU) and [multithreading mode](https://polinasavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html).\n\n\u0060\u0060\u0060fsharp\nlet processingUnit = GPU Brahma.FSharp.Platform.Nvidia\nlet agentsSupport = AgentSupport.Full\n\u0060\u0060\u0060\n\nThe result:\n\n\u0060\u0060\u0060fsharp\nopen ImageProcessing.Process\nopen ImageProcessing.AgentSupport\n\nlet inputDirectory = \u0022Full/Path/To/Input/Images/Folder/\u0022\nlet outputDirectory = \u0022Full/Path/To/Output/Images/Folder/\u0022\n\nlet imageEditorsList = [Darken; Edges; RotationL]\n\nlet processingUnit = GPU Brahma.FSharp.Platform.Nvidia\nlet agentsSupport = AgentSupport.Full\n\nprocessImages inputDirectory outputDirectory processingUnit imageEditorsList agentsSupport\n\u0060\u0060\u0060\n\n"},{"uri":"https://PolinaSavelyeva.github.io/ImageProcessing/How_Tos/Doing_Another_Thing.html","title":"How To do a second thing","content":"---\ntitle: How To do a second thing\ncategory: How To Guides\ncategoryindex: 2\nindex: 2\n---\n\n# How-To use CLI\n\n"}]
\ No newline at end of file
diff --git a/docsSrc/How_Tos/Doing_A_Thing.md b/docsSrc/How_Tos/Doing_A_Thing.md
index e17ae1c..9d6e8ea 100644
--- a/docsSrc/How_Tos/Doing_A_Thing.md
+++ b/docsSrc/How_Tos/Doing_A_Thing.md
@@ -44,72 +44,145 @@ ImageProcessing supports the following features, which you can use when implemen
For detailed descriptions of all features visit [Api Reference]().
-## Simple CPU Example
+
+## Processing on CPU
---
+### CPU filter kernels
+
+Filter kernels are used to call ``applyFilter`` function.
+You can create 2D byte array as new kernel or use implemented [kernels](https://polinasavelyeva.github.io/ImageProcessing/reference/global-kernels.html) such as:
+
+* Gaussian Blur
+* Edges
+* Sharpen
+* Lighten
+* Darken
+
+### Multi-threaded processing on CPU
+
+You can use either single-threaded CPU-based image processing or multi-threaded image processing.
+Multithreading is performed using logger and agent functions, which specified in this [section](https://polinasavelyeva.github.io/ImageProcessing/reference/global-agents.html).
+
+Four of them are implemented:
+
+* Logger, which is used to inform user about status of operations, i.e work of another agents
+* Saver agent, which save images stored in queue and send messages to logger
+* Processing agent, which process images stored in queue using specified transformation and and send messages to logger
+* Full processing agent, which do both saving and processing
+
+
+### Simple CPU Example
+
Open library and load image to process:
```fsharp
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.CPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
```
Create new function which sequentially applies blur filter and clockwise rotation to images and saves it on CPU:
```fsharp
let applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) =
- let blurredImage = image |> CPU.applyFilter gaussianBlurKernel
- let rotatedImage = blurredImage |> CPU.rotate true
+ let blurredImage = image |> applyFilter gaussianBlurKernel
+ let rotatedImage = blurredImage |> rotate true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
```
The result:
```fsharp
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.CPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
let applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) =
- let blurredImage = image |> CPU.applyFilter gaussianBlurKernel
- let rotatedImage = blurredImage |> CPU.rotate true
+ let blurredImage = image |> applyFilter gaussianBlurKernel
+ let rotatedImage = blurredImage |> rotate true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
let pathToSave = "Path/To/Directory/image_name.jpg"
applyCustomFilterOnCPU myImage pathToSave
```
-## Simple GPU Example
+## Processing on GPU
---
+### GPU filter kernels
+
+Filter kernels are used to call ``applyFilter`` function.
+You can create 2D byte array as new kernel or use implemented [kernels](https://polinasavelyeva.github.io/ImageProcessing/reference/global-kernels.html) such as:
+
+* Gaussian Blur
+* Edges
+* Sharpen
+* Lighten
+* Darken
+
+### GPU processing kernels
+
+GPU kernels are used to call GPU-processing functions.
+They have specific defining style, so for more information about how they work I recommended to visit [Brahma.Fsharp tutorial](https://yaccconstructor.github.io/Brahma.FSharp/Articles/Custom_Kernels.html).
+But if you have no need in creating new GPU kernels just use implemented [ones](https://polinasavelyeva.github.io/ImageProcessing/reference/global-gpu.html), such as:
+
+* applyFilterGPUKernel
+* rotateGPUKernel
+* flipGPUKernel
+
+All of them take ``clContext`` (which is device's environment abstraction) and ``localWorkSize`` (which shows the size of local work group) as input parameters.
+
+### Multi-threaded processing on GPU
+
+You can use either single-threaded GPU-based image processing or multi-threaded image processing.
+Multithreading is performed using logger and agent functions, which specified in this [section](https://polinasavelyeva.github.io/ImageProcessing/reference/global-agents.html).
+
+Four of them are implemented:
+
+* Logger, which is used to inform user about status of operations, i.e work of another agents
+* Saver agent, which save images stored in queue and send messages to logger
+* Processing agent, which process images stored in queue using specified transformation and and send messages to logger
+* Full processing agent, which do both saving and processing
+
+Note that using logger via GPU-processing functions can cause unpredictable behavior, i.e the order in which the events occur will be broken due to the specifics of GPU operations.
+
+
+### Simple GPU Example
+
Open library and load image to process:
```fsharp
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.GPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
```
-Create new function which sequentially applies blur filter and clockwise rotation to images and saves it on GPU. But before it we need to do some steps for diagnosing graphical device.
+Create new function which sequentially applies blur filter and clockwise rotation to images and saves it on GPU.
+But before it we need to do some steps for diagnosing graphical device.
-Define the ``device`` value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable). And make OpenCL context of it:
+Define the ``device`` value by specifying the brand of your GPU or whatever the program finds (embedded graphics cards are also suitable).
+And make OpenCL context of it:
```fsharp
let device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()
let clContext = Brahma.FSharp.ClContext(device)
```
-Next, define new values for filter and rotation functions. This action is necessary because of compiling [kernel function]() once:
+Next, define new values for filter and rotation functions.
+This action is necessary because of compiling [kernel function](#gpu-processing-kernels) once:
```fsharp
-let applyFilterGPU = GPU.applyFilter clContext 64
-let rotateGPU = GPU.rotate clContext 64
+let applyFilterGPU = applyFilter clContext 64
+let rotateGPU = rotate clContext 64
```
And the final function:
@@ -119,26 +192,89 @@ let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
let blurredImage = image |> applyFilterGPU gaussianBlurKernel
let rotatedImage = blurredImage |> rotateGPU true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
```
The result:
```fsharp
-open ImageProcessing
+open ImageProcessing.MyImage
+open ImageProcessing.GPU
-let myImage = MyImage.load ("Full/Path/To/Images/Folder/image_name.jpg")
+let myImage = load ("Full/Path/To/Images/Folder/image_name.jpg")
let device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()
let clContext = Brahma.FSharp.ClContext(device)
+let applyFilterGPU = applyFilter clContext 64
+let rotateGPU = rotate clContext 64
+
let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
let blurredImage = image |> applyFilterGPU gaussianBlurKernel
let rotatedImage = blurredImage |> rotateGPU true
- MyImage.save rotatedImage pathToSave
+ save rotatedImage pathToSave
let pathToSave = "Path/To/Directory/image_name.jpg"
applyCustomFilterOnGPU myImage pathToSave
```
+
+## Processing of Multiple Images via Directories
+
+---
+
+### Process parameters
+
+The ``processImage`` function is designed to process directories with various configuration options.
+It allows you to choose the type of [agent support](https://polinasavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html) for processing:
+
+* Full, which uses a single agent to open, process and save
+* Partial, which uses different agents for each transformation and saving
+* PartialUsingComposition, which uses one agent for transformation and one for save
+* No, which uses naive image processing function
+
+And define a list of [transformations](https://polinasavelyeva.github.io/ImageProcessing/reference/process-transformations.html) to apply to the image, and specify the [processing unit](https://polinasavelyeva.github.io/ImageProcessing/reference/process-processingunits.html) (CPU or GPU) for the operation.
+
+### Simple Directory Processing Example
+
+Open library and define directories:
+
+```fsharp
+open ImageProcessing.Process
+open ImageProcessing.AgentSupport
+
+let inputDirectory = "Full/Path/To/Input/Images/Folder/"
+let outputDirectory = "Full/Path/To/Output/Images/Folder/"
+```
+
+Define list of transformations and filters that will be used. [Transformations](https://polinasavelyeva.github.io/ImageProcessing/reference/process-transformations.html) type is used to define it:
+
+```fsharp
+let imageEditorsList = [Darken; Edges; RotationL]
+```
+
+Note that transformations and filters will be applied sequentially, one-by-one on each image in the specific directory. Choose and define [processing unit](https://polinasavelyeva.github.io/ImageProcessing/reference/process-processingunits.html#CPU) and [multithreading mode](https://polinasavelyeva.github.io/ImageProcessing/reference/process-agentssupport.html).
+
+```fsharp
+let processingUnit = GPU Brahma.FSharp.Platform.Nvidia
+let agentsSupport = AgentSupport.Full
+```
+
+The result:
+
+```fsharp
+open ImageProcessing.Process
+open ImageProcessing.AgentSupport
+
+let inputDirectory = "Full/Path/To/Input/Images/Folder/"
+let outputDirectory = "Full/Path/To/Output/Images/Folder/"
+
+let imageEditorsList = [Darken; Edges; RotationL]
+
+let processingUnit = GPU Brahma.FSharp.Platform.Nvidia
+let agentsSupport = AgentSupport.Full
+
+processImages inputDirectory outputDirectory processingUnit imageEditorsList agentsSupport
+```
+
diff --git a/docsSrc/Tutorials/Getting_Started.md b/docsSrc/Tutorials/Getting_Started.md
index 4635a29..e8bb78a 100644
--- a/docsSrc/Tutorials/Getting_Started.md
+++ b/docsSrc/Tutorials/Getting_Started.md
@@ -151,6 +151,9 @@ let applyCustomFilterOnCPU (image: MyImage) (pathToSave : string) =
let device = Brahma.FSharp.ClDevice.GetFirstAppropriateDevice()
let clContext = Brahma.FSharp.ClContext(device)
+let applyFilterGPU = GPU.applyFilter clContext 64
+let rotateGPU = GPU.rotate clContext 64
+
let applyCustomFilterOnGPU (image: MyImage) (pathToSave : string) =
let blurredImage = image |> applyFilterGPU gaussianBlurKernel
let rotatedImage = blurredImage |> rotateGPU true