|
|
|
@ -21,29 +21,29 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
|
|
|
|
public const PixelTypes CommonNonDefaultPixelTypes = PixelTypes.Rgba32 | PixelTypes.Bgra32 | PixelTypes.RgbaVector; |
|
|
|
|
|
|
|
public static readonly TheoryData<EdgeDetectorKernel> DetectEdgesFilters |
|
|
|
= new TheoryData<EdgeDetectorKernel> |
|
|
|
public static readonly TheoryData<EdgeDetectorKernel, string> DetectEdgesFilters |
|
|
|
= new TheoryData<EdgeDetectorKernel, string> |
|
|
|
{ |
|
|
|
KnownEdgeDetectorKernels.Laplacian3x3, |
|
|
|
KnownEdgeDetectorKernels.Laplacian5x5, |
|
|
|
KnownEdgeDetectorKernels.LaplacianOfGaussian, |
|
|
|
{ KnownEdgeDetectorKernels.Laplacian3x3, nameof(KnownEdgeDetectorKernels.Laplacian3x3) }, |
|
|
|
{ KnownEdgeDetectorKernels.Laplacian5x5, nameof(KnownEdgeDetectorKernels.Laplacian5x5) }, |
|
|
|
{ KnownEdgeDetectorKernels.LaplacianOfGaussian, nameof(KnownEdgeDetectorKernels.LaplacianOfGaussian) }, |
|
|
|
}; |
|
|
|
|
|
|
|
public static readonly TheoryData<EdgeDetector2DKernel> DetectEdges2DFilters |
|
|
|
= new TheoryData<EdgeDetector2DKernel> |
|
|
|
public static readonly TheoryData<EdgeDetector2DKernel, string> DetectEdges2DFilters |
|
|
|
= new TheoryData<EdgeDetector2DKernel, string> |
|
|
|
{ |
|
|
|
KnownEdgeDetectorKernels.Kayyali, |
|
|
|
KnownEdgeDetectorKernels.Prewitt, |
|
|
|
KnownEdgeDetectorKernels.RobertsCross, |
|
|
|
KnownEdgeDetectorKernels.Scharr, |
|
|
|
KnownEdgeDetectorKernels.Sobel |
|
|
|
{ KnownEdgeDetectorKernels.Kayyali, nameof(KnownEdgeDetectorKernels.Kayyali) }, |
|
|
|
{ KnownEdgeDetectorKernels.Prewitt, nameof(KnownEdgeDetectorKernels.Prewitt) }, |
|
|
|
{ KnownEdgeDetectorKernels.RobertsCross, nameof(KnownEdgeDetectorKernels.RobertsCross) }, |
|
|
|
{ KnownEdgeDetectorKernels.Scharr, nameof(KnownEdgeDetectorKernels.Scharr) }, |
|
|
|
{ KnownEdgeDetectorKernels.Sobel, nameof(KnownEdgeDetectorKernels.Sobel) }, |
|
|
|
}; |
|
|
|
|
|
|
|
public static readonly TheoryData<EdgeDetectorCompassKernel> DetectEdgesCompassFilters |
|
|
|
= new TheoryData<EdgeDetectorCompassKernel> |
|
|
|
public static readonly TheoryData<EdgeDetectorCompassKernel, string> DetectEdgesCompassFilters |
|
|
|
= new TheoryData<EdgeDetectorCompassKernel, string> |
|
|
|
{ |
|
|
|
KnownEdgeDetectorKernels.Kirsch, |
|
|
|
KnownEdgeDetectorKernels.Robinson, |
|
|
|
{ KnownEdgeDetectorKernels.Kirsch, nameof(KnownEdgeDetectorKernels.Kirsch) }, |
|
|
|
{ KnownEdgeDetectorKernels.Robinson, nameof(KnownEdgeDetectorKernels.Robinson) }, |
|
|
|
}; |
|
|
|
|
|
|
|
[Theory] |
|
|
|
@ -65,7 +65,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
[Theory] |
|
|
|
[WithTestPatternImages(nameof(DetectEdgesFilters), 100, 100, PixelTypes.Rgba32)] |
|
|
|
[WithFileCollection(nameof(TestImages), nameof(DetectEdgesFilters), PixelTypes.Rgba32)] |
|
|
|
public void DetectEdges_WorksWithAllFilters<TPixel>(TestImageProvider<TPixel> provider, EdgeDetectorKernel detector) |
|
|
|
public void DetectEdges_WorksWithAllFilters<TPixel>( |
|
|
|
TestImageProvider<TPixel> provider, |
|
|
|
EdgeDetectorKernel detector, |
|
|
|
string name) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
bool hasAlpha = provider.SourceFileOrDescription.Contains("TestPattern"); |
|
|
|
@ -73,15 +76,18 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
using (Image<TPixel> image = provider.GetImage()) |
|
|
|
{ |
|
|
|
image.Mutate(x => x.DetectEdges(detector)); |
|
|
|
image.DebugSave(provider, detector.ToString()); |
|
|
|
image.CompareToReferenceOutput(comparer, provider, detector.ToString()); |
|
|
|
image.DebugSave(provider, name); |
|
|
|
image.CompareToReferenceOutput(comparer, provider, name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[WithTestPatternImages(nameof(DetectEdgesFilters), 100, 100, PixelTypes.Rgba32)] |
|
|
|
[WithTestPatternImages(nameof(DetectEdges2DFilters), 100, 100, PixelTypes.Rgba32)] |
|
|
|
[WithFileCollection(nameof(TestImages), nameof(DetectEdges2DFilters), PixelTypes.Rgba32)] |
|
|
|
public void DetectEdges2D_WorksWithAllFilters<TPixel>(TestImageProvider<TPixel> provider, EdgeDetector2DKernel detector) |
|
|
|
public void DetectEdges2D_WorksWithAllFilters<TPixel>( |
|
|
|
TestImageProvider<TPixel> provider, |
|
|
|
EdgeDetector2DKernel detector, |
|
|
|
string name) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
bool hasAlpha = provider.SourceFileOrDescription.Contains("TestPattern"); |
|
|
|
@ -89,15 +95,18 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
using (Image<TPixel> image = provider.GetImage()) |
|
|
|
{ |
|
|
|
image.Mutate(x => x.DetectEdges(detector)); |
|
|
|
image.DebugSave(provider, detector.ToString()); |
|
|
|
image.CompareToReferenceOutput(comparer, provider, detector.ToString()); |
|
|
|
image.DebugSave(provider, name); |
|
|
|
image.CompareToReferenceOutput(comparer, provider, name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[WithTestPatternImages(nameof(DetectEdgesCompassFilters), 100, 100, PixelTypes.Rgba32)] |
|
|
|
[WithFileCollection(nameof(TestImages), nameof(DetectEdgesFilters), PixelTypes.Rgba32)] |
|
|
|
public void DetectEdgesCompass_WorksWithAllFilters<TPixel>(TestImageProvider<TPixel> provider, EdgeDetectorCompassKernel detector) |
|
|
|
[WithFileCollection(nameof(TestImages), nameof(DetectEdgesCompassFilters), PixelTypes.Rgba32)] |
|
|
|
public void DetectEdgesCompass_WorksWithAllFilters<TPixel>( |
|
|
|
TestImageProvider<TPixel> provider, |
|
|
|
EdgeDetectorCompassKernel detector, |
|
|
|
string name) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
bool hasAlpha = provider.SourceFileOrDescription.Contains("TestPattern"); |
|
|
|
@ -105,8 +114,8 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
using (Image<TPixel> image = provider.GetImage()) |
|
|
|
{ |
|
|
|
image.Mutate(x => x.DetectEdges(detector)); |
|
|
|
image.DebugSave(provider, detector.ToString()); |
|
|
|
image.CompareToReferenceOutput(comparer, provider, detector.ToString()); |
|
|
|
image.DebugSave(provider, name); |
|
|
|
image.CompareToReferenceOutput(comparer, provider, name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -159,7 +168,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[WithFile(Tests.TestImages.Png.Bike, nameof(DetectEdgesFilters), PixelTypes.Rgba32)] |
|
|
|
public void WorksWithDiscoBuffers<TPixel>(TestImageProvider<TPixel> provider, EdgeDetectorKernel detector) |
|
|
|
public void WorksWithDiscoBuffers<TPixel>( |
|
|
|
TestImageProvider<TPixel> provider, |
|
|
|
EdgeDetectorKernel detector, |
|
|
|
string _) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
provider.RunBufferCapacityLimitProcessorTest( |
|
|
|
@ -170,7 +182,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[WithFile(Tests.TestImages.Png.Bike, nameof(DetectEdges2DFilters), PixelTypes.Rgba32)] |
|
|
|
public void WorksWithDiscoBuffers2D<TPixel>(TestImageProvider<TPixel> provider, EdgeDetector2DKernel detector) |
|
|
|
public void WorksWithDiscoBuffers2D<TPixel>( |
|
|
|
TestImageProvider<TPixel> provider, |
|
|
|
EdgeDetector2DKernel detector, |
|
|
|
string _) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
provider.RunBufferCapacityLimitProcessorTest( |
|
|
|
@ -181,7 +196,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[WithFile(Tests.TestImages.Png.Bike, nameof(DetectEdgesCompassFilters), PixelTypes.Rgba32)] |
|
|
|
public void WorksWithDiscoBuffersCompass<TPixel>(TestImageProvider<TPixel> provider, EdgeDetectorCompassKernel detector) |
|
|
|
public void WorksWithDiscoBuffersCompass<TPixel>( |
|
|
|
TestImageProvider<TPixel> provider, |
|
|
|
EdgeDetectorCompassKernel detector, |
|
|
|
string _) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
provider.RunBufferCapacityLimitProcessorTest( |
|
|
|
|