Skip to content

Commit 76cbc1e

Browse files
committed
Update Aardvark.Base packages
1 parent 9ac2982 commit 76cbc1e

File tree

5 files changed

+48
-45
lines changed

5 files changed

+48
-45
lines changed

paket.dependencies

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ storage: none
55
nuget Aardvark.Build ~> 1.0.24
66
nuget FSharp.Core >= 8.0.0 lowest_matching: true
77

8-
nuget Aardvark.Base.Tensors ~> 5.3.0
8+
nuget Aardvark.Base.Tensors ~> 5.3.4
99

1010
nuget OpenCvSharp4 ~> 4.10.0
1111

paket.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@ STORAGE: NONE
22
RESTRICTION: || (== net8.0) (== netstandard2.0)
33
NUGET
44
remote: https://api.nuget.org/v3/index.json
5-
Aardvark.Base (5.3.3)
6-
Aardvark.Base.Telemetry (5.3.3)
5+
Aardvark.Base (5.3.4)
6+
Aardvark.Base.Telemetry (5.3.4)
77
SingleFileExtractor.Core (>= 2.2.1 < 2.3)
88
System.Collections.Immutable (>= 8.0)
99
System.Reflection.Metadata (>= 8.0)
1010
System.Text.Json (>= 8.0.4)
11-
Aardvark.Base.FSharp (5.3.3)
12-
Aardvark.Base (5.3.3)
11+
Aardvark.Base.FSharp (5.3.4)
12+
Aardvark.Base (5.3.4)
1313
Aardvark.Base.TypeProviders (>= 4.5.15 < 4.6)
1414
FSharp.Core (>= 8.0)
1515
FSharp.Data.Adaptive (>= 1.2 < 1.3)
1616
FsPickler (>= 5.3.2 < 5.4)
1717
System.Dynamic.Runtime (>= 4.3 < 4.4)
18-
Aardvark.Base.Telemetry (5.3.3)
19-
Aardvark.Base.Tensors (5.3.3)
20-
Aardvark.Base (5.3.3)
21-
Aardvark.Base.FSharp (5.3.3)
18+
Aardvark.Base.Telemetry (5.3.4)
19+
Aardvark.Base.Tensors (5.3.4)
20+
Aardvark.Base (5.3.4)
21+
Aardvark.Base.FSharp (5.3.4)
2222
FSharp.Core (>= 8.0)
2323
Aardvark.Base.TypeProviders (4.5.15)
2424
FSharp.Core (>= 4.2.3)

src/Aardvark.OpenCV.Tests/Benchmarks/ImageBench.fs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace Aardvark.OpenCV.Benchmarks
22

33
open Aardvark.Base
4-
open Aardvark.OpenCV
54
open BenchmarkDotNet.Attributes
65

76
module ``Image Processing Benchmarks`` =
@@ -27,9 +26,8 @@ module ``Image Processing Benchmarks`` =
2726

2827
[<Benchmark(Description = "Aardvark (Tensors)", Baseline = true)>]
2928
member x.AardvarkTensors() =
30-
let volume = Aardvark.Base.TensorExtensions.Scaled(image.Volume, scaleFactor, x.Interpolation)
31-
PixImage<float32>(image.Format, volume)
29+
Aardvark.Base.PixProcessor.Instance.Scale(image, scaleFactor, x.Interpolation)
3230

3331
[<Benchmark>]
3432
member x.OpenCV() =
35-
ImageProcessing.ScaledOpenCV(image, scaleFactor, x.Interpolation)
33+
Aardvark.OpenCV.PixProcessor.Instance.Scale(image, scaleFactor, x.Interpolation)

src/Aardvark.OpenCV.Tests/Tests/ImageTests.fs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace Aardvark.OpenCV.Tests
22

33
open Aardvark.Base
4-
open Aardvark.OpenCV
54
open NUnit.Framework
65
open FsUnit
76

@@ -45,11 +44,8 @@ module ``Image Processing Tests`` =
4544
else
4645
pi
4746

48-
let result = ImageProcessing.ScaledOpenCV(src, scaleFactor, filter)
49-
50-
let reference =
51-
let volume = Aardvark.Base.TensorExtensions.Scaled(src.Volume, scaleFactor, filter)
52-
new PixImage<float32>(src.Format, volume)
47+
let result = Aardvark.OpenCV.PixProcessor.Instance.Scale(src, scaleFactor, filter)
48+
let reference = Aardvark.Base.PixProcessor.Instance.Scale(src, scaleFactor, filter)
5349

5450
let psnr = PixImage.peakSignalToNoiseRatio result reference
5551
psnr |> should be (greaterThan 20.0)

src/Aardvark.OpenCV/ImageProcessing.cs

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,10 @@ namespace Aardvark.OpenCV
1818
public void Dispose() => Handle.Free();
1919
}
2020

21-
internal static class PinningExtensions
21+
internal static class Extensions
2222
{
2323
public static GCHandleDiposable Pin(this object obj)
2424
=> new (GCHandle.Alloc(obj, GCHandleType.Pinned));
25-
}
26-
27-
public static class ImageProcessing
28-
{
29-
[OnAardvarkInit]
30-
public static void Init()
31-
{
32-
PixImage<byte>.SetScaledFun(ScaledOpenCV);
33-
PixImage<sbyte>.SetScaledFun(ScaledOpenCV);
34-
PixImage<ushort>.SetScaledFun(ScaledOpenCV);
35-
PixImage<short>.SetScaledFun(ScaledOpenCV);
36-
PixImage<uint>.SetScaledFun(ScaledOpenCV);
37-
PixImage<int>.SetScaledFun(ScaledOpenCV);
38-
PixImage<ulong>.SetScaledFun(ScaledOpenCV);
39-
PixImage<long>.SetScaledFun(ScaledOpenCV);
40-
PixImage<Half>.SetScaledFun(ScaledOpenCV);
41-
PixImage<float>.SetScaledFun(ScaledOpenCV);
42-
PixImage<double>.SetScaledFun(ScaledOpenCV);
43-
}
4425

4526
private static readonly Dictionary<Type, Func<int, MatType>> matTypes = new()
4627
{
@@ -53,7 +34,7 @@ public static void Init()
5334
{ typeof(double), MatType.CV_64FC },
5435
};
5536

56-
private static MatType ToMatType(this Type type, int channels)
37+
public static MatType ToMatType(this Type type, int channels)
5738
{
5839
if (matTypes.TryGetValue(type, out var toMatType)) return toMatType(channels);
5940
else throw new NotSupportedException($"Channel type {type} is not supported.");
@@ -67,14 +48,29 @@ private static MatType ToMatType(this Type type, int channels)
6748
{ ImageInterpolation.Lanczos, InterpolationFlags.Lanczos4 },
6849
};
6950

70-
private static InterpolationFlags ToInterpolationFlags(this ImageInterpolation interpolation)
51+
public static InterpolationFlags ToInterpolationFlags(this ImageInterpolation interpolation)
7152
{
7253
if (interpolationFlags.TryGetValue(interpolation, out InterpolationFlags flags)) return flags;
7354
else throw new NotSupportedException($"Filter {interpolation} is not supported.");
7455
}
56+
}
57+
58+
public sealed class PixProcessor : IPixProcessor
59+
{
60+
public string Name => "OpenCV";
61+
62+
public PixProcessorCaps Capabilities => PixProcessorCaps.Scale;
7563

76-
public static Volume<T> ScaledOpenCV<T>(this Volume<T> src, V2d scaleFactor, ImageInterpolation interpolation)
64+
[OnAardvarkInit]
65+
public static void Init()
66+
{
67+
PixImage.AddProcessor(Instance);
68+
}
69+
70+
public PixImage<T> Scale<T>(PixImage<T> image, V2d scaleFactor, ImageInterpolation interpolation)
7771
{
72+
var src = image.Volume;
73+
7874
if (!src.HasImageWindowLayout())
7975
{
8076
throw new ArgumentException($"Volume must be in image layout (Delta = {src.Delta}).");
@@ -104,10 +100,23 @@ public static Volume<T> ScaledOpenCV<T>(this Volume<T> src, V2d scaleFactor, Ima
104100
var dstMat = CvMat.FromPixelData(dstSize.Y, dstSize.X, matType, dstPtr);
105101
Cv2.Resize(srcMat, dstMat, new Size(dstSize.X, dstSize.Y), interpolation: interpolation.ToInterpolationFlags());
106102

107-
return dst;
103+
return new (image.Format, dst);
108104
}
109105

110-
public static PixImage<T> ScaledOpenCV<T>(this PixImage<T> src, V2d scaleFactor, ImageInterpolation interpolation)
111-
=> new (src.Format, src.Volume.ScaledOpenCV(scaleFactor, interpolation));
106+
public PixImage<T> Rotate<T>(PixImage<T> image, double angleInRadians, bool resize, ImageInterpolation interpolation,
107+
ImageBorderType borderType = ImageBorderType.Const,
108+
T border = default)
109+
=> null;
110+
111+
public PixImage<T> Remap<T>(PixImage<T> image, Matrix<float> mapX, Matrix<float> mapY, ImageInterpolation interpolation,
112+
ImageBorderType borderType = ImageBorderType.Const,
113+
T border = default)
114+
=> null;
115+
116+
private PixProcessor() { }
117+
118+
private static readonly Lazy<PixProcessor> _instance = new(() => new PixProcessor());
119+
120+
public static PixProcessor Instance => _instance.Value;
112121
}
113122
}

0 commit comments

Comments
 (0)