Skip to content

Commit 30e08b9

Browse files
committed
Implement scaling (WIP)
1 parent b0230f2 commit 30e08b9

15 files changed

+527
-69
lines changed

paket.dependencies

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ group Test
1414
storage: none
1515
source https://api.nuget.org/v3/index.json
1616

17-
nuget NUnit ~> 3.14.0
18-
nuget NUnit3TestAdapter ~> 4.5.0
19-
nuget Microsoft.NET.Test.Sdk ~> 17.9.0
17+
nuget FSharp.Core ~> 8.0.0
18+
19+
nuget Aardvark.PixImage.ImageSharp ~> 2.0.1
20+
21+
nuget NUnit ~> 3.14.0
22+
nuget NUnit3TestAdapter ~> 4.5.0
23+
nuget Microsoft.NET.Test.Sdk ~> 17.9.0
24+
25+
nuget BenchmarkDotNet ~> 0.14.0

paket.lock

Lines changed: 267 additions & 10 deletions
Large diffs are not rendered by default.

src/Aardvark.OpenCV.Tests/Aardvark.OpenCV.Tests.csproj renamed to src/Aardvark.OpenCV.Tests/Aardvark.OpenCV.Tests.fsproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,22 @@
33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
55
<TargetFramework>net8.0</TargetFramework>
6+
<GenerateProgramFile>false</GenerateProgramFile>
67
</PropertyGroup>
78
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
89
<OutputPath>..\..\bin\Debug</OutputPath>
910
</PropertyGroup>
1011
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
1112
<OutputPath>..\..\bin\Release</OutputPath>
1213
</PropertyGroup>
14+
<ItemGroup>
15+
<Compile Include="Benchmarks\ImageBench.fs" />
16+
<Compile Include="Tests\ClusteringTests.fs" />
17+
<Compile Include="Tests\FittingTests.fs" />
18+
<Compile Include="Tests\ImageTests.fs" />
19+
<Compile Include="Program.fs" />
20+
<None Include="paket.references" />
21+
</ItemGroup>
1322
<ItemGroup>
1423
<ProjectReference Include="..\Aardvark.OpenCV\Aardvark.OpenCV.csproj" />
1524
</ItemGroup>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
namespace Aardvark.OpenCV.Benchmarks
2+
3+
open Aardvark.Base
4+
open Aardvark.OpenCV
5+
open BenchmarkDotNet.Attributes
6+
7+
module ``Image Processing Benchmarks`` =
8+
9+
type Scaling() =
10+
11+
[<DefaultValue; Params(128, 1024, 2048, 4096)>]
12+
val mutable Size : int
13+
14+
[<DefaultValue; Params(ImageInterpolation.Linear, ImageInterpolation.Cubic, ImageInterpolation.Lanczos)>]
15+
val mutable Interpolation : ImageInterpolation
16+
17+
let mutable image = null
18+
19+
let scaleFactor = V2d(0.234, 0.894)
20+
21+
[<GlobalSetup>]
22+
member x.Setup() =
23+
Aardvark.Init()
24+
let rnd = RandomSystem 0
25+
image <- new PixImage<float32>(Col.Format.RGBA, x.Size, x.Size)
26+
image.Volume.SetByIndex(ignore >> rnd.UniformFloat) |> ignore
27+
28+
[<Benchmark(Description = "Aardvark (Tensors)", Baseline = true)>]
29+
member x.AardvarkTensors() =
30+
let volume = image.Volume.Scaled(scaleFactor, x.Interpolation)
31+
PixImage<float32>(image.Format, volume)
32+
33+
[<Benchmark>]
34+
member x.OpenCV() =
35+
TensorExtensions.ScaledOpenCV(image, scaleFactor, x.Interpolation)

src/Aardvark.OpenCV.Tests/ClusteringTests.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Aardvark.OpenCV.Tests/FittingTests.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace Aardvark.OpenCV.Benchmarks
2+
3+
open System.Reflection
4+
open BenchmarkDotNet.Running;
5+
open BenchmarkDotNet.Configs
6+
open BenchmarkDotNet.Jobs
7+
open BenchmarkDotNet.Toolchains
8+
9+
module Program =
10+
11+
[<EntryPoint>]
12+
let main argv =
13+
14+
let cfg =
15+
let job = Job.ShortRun.WithToolchain(InProcess.Emit.InProcessEmitToolchain.Instance)
16+
ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator).AddJob(job)
17+
18+
BenchmarkSwitcher.FromAssembly(Assembly.GetExecutingAssembly()).Run(argv, cfg) |> ignore
19+
20+
0
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using Aardvark.Base;
2+
using BenchmarkDotNet.Attributes;
3+
4+
namespace Aardvark.OpenCV.Tests
5+
{
6+
public class Scaling
7+
{
8+
[Params(128, 1024, 2048, 4096)]
9+
public int Size;
10+
11+
[Params(ImageInterpolation.Linear, ImageInterpolation.Cubic)]
12+
public ImageInterpolation Interpolation;
13+
14+
private PixImage<float> _image;
15+
16+
private readonly V2d _scaleFactor = new (0.234, 0.894);
17+
18+
[GlobalSetup]
19+
public void Init()
20+
{
21+
Aardvark.Base.Aardvark.Init();
22+
var rnd = new RandomSystem(0);
23+
_image = new PixImage<float>(Col.Format.RGBA, new V2i(Size, Size));
24+
_image.Volume.SetByIndex((_) => rnd.UniformFloat());
25+
}
26+
27+
[Benchmark(Description = "Aardvark (Tensors)", Baseline = true)]
28+
public PixImage<float> AardvarkTensors()
29+
{
30+
var volume = Aardvark.Base.TensorExtensions.Scaled(_image.Volume, _scaleFactor, Interpolation);
31+
return new PixImage<float>(_image.Format, volume);
32+
}
33+
34+
[Benchmark]
35+
public PixImage<float> OpenCV()
36+
=> TensorExtensions.ScaledOpenCV(_image, _scaleFactor, Interpolation);
37+
}
38+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace Aardvark.OpenCV.Tests
2+
3+
open Aardvark.Base
4+
open Aardvark.OpenCV
5+
open NUnit.Framework
6+
7+
module ``Clustering Tests`` =
8+
9+
let private vec value =
10+
Vector<float32> [| value; value; value |]
11+
12+
[<SetUp>]
13+
let init() =
14+
Aardvark.Init()
15+
16+
[<Test>]
17+
let ``K-means``() =
18+
let data = [| vec -1.2f; vec -1.3f; vec -1.4f; vec 2.3f; vec 2.4f |]
19+
20+
let mutable clusters = Array.empty
21+
let mutable centers = Array.empty
22+
OpenCVKMeansClustering.ClusterKMeans(data, 2, 1, false, &clusters, &centers);
23+
24+
Assert.AreEqual([| 0; 0; 0; 1; 1 |], clusters);
25+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace Aardvark.OpenCV.Tests
2+
3+
open Aardvark.Base
4+
open Aardvark.OpenCV
5+
open NUnit.Framework
6+
7+
module ``Fitting Tests`` =
8+
9+
[<SetUp>]
10+
let init() =
11+
Aardvark.Init()
12+
13+
[<Test>]
14+
let ``Plane3d least squares``() =
15+
let data = [| V3d(1.0, 2.0, -1.0); V3d(5.0, 4.0, -1.0); V3d(23.0, 100.0, -1.0) |]
16+
let plane = data.FitPlane3dLeastSquares();
17+
Assert.AreEqual(Plane3d(V3d.ZAxis, -1), plane);

0 commit comments

Comments
 (0)