Browse Source

verbose naming for Histogram Equalization stuff + make it public

af/merge-core
Anton Firszov 7 years ago
parent
commit
a7720e53cb
  1. 18
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs
  2. 6
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs
  3. 16
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs
  4. 6
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs
  5. 8
      src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs
  6. 6
      src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs

18
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs → src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs

@ -7,17 +7,21 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// Applies an adaptive histogram equalization to the image. The image is split up in tiles. For each tile a cumulative distribution function (cdf) is calculated. /// Applies an adaptive histogram equalization to the image. The image is split up in tiles. For each tile a cumulative distribution function (cdf) is calculated.
/// To calculate the final equalized pixel value, the cdf value of four adjacent tiles will be interpolated. /// To calculate the final equalized pixel value, the cdf value of four adjacent tiles will be interpolated.
/// </summary> /// </summary>
internal class AdaptiveHistEqualizationProcessor : HistogramEqualizationProcessor public class AdaptiveHistogramEqualizationProcessor : HistogramEqualizationProcessor
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="AdaptiveHistEqualizationProcessor"/> class. /// Initializes a new instance of the <see cref="AdaptiveHistogramEqualizationProcessor"/> class.
/// </summary> /// </summary>
/// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images /// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images
/// or 65536 for 16-bit grayscale images.</param> /// or 65536 for 16-bit grayscale images.</param>
/// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param> /// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param>
/// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param> /// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param>
/// <param name="numberOfTiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param> /// <param name="numberOfTiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param>
public AdaptiveHistEqualizationProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage, int numberOfTiles) public AdaptiveHistogramEqualizationProcessor(
int luminanceLevels,
bool clipHistogram,
float clipLimitPercentage,
int numberOfTiles)
: base(luminanceLevels, clipHistogram, clipLimitPercentage) : base(luminanceLevels, clipHistogram, clipLimitPercentage)
{ {
this.NumberOfTiles = numberOfTiles; this.NumberOfTiles = numberOfTiles;
@ -31,7 +35,11 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// <inheritdoc /> /// <inheritdoc />
public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>() public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>()
{ {
return new AdaptiveHistEqualizationProcessor<TPixel>(this.LuminanceLevels, this.ClipHistogram, this.ClipLimitPercentage, this.NumberOfTiles); return new AdaptiveHistogramEqualizationProcessor<TPixel>(
this.LuminanceLevels,
this.ClipHistogram,
this.ClipLimitPercentage,
this.NumberOfTiles);
} }
} }
} }

6
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor{TPixel}.cs → src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs

@ -21,18 +21,18 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// To calculate the final equalized pixel value, the cdf value of four adjacent tiles will be interpolated. /// To calculate the final equalized pixel value, the cdf value of four adjacent tiles will be interpolated.
/// </summary> /// </summary>
/// <typeparam name="TPixel">The pixel format.</typeparam> /// <typeparam name="TPixel">The pixel format.</typeparam>
internal class AdaptiveHistEqualizationProcessor<TPixel> : HistogramEqualizationProcessor<TPixel> internal class AdaptiveHistogramEqualizationProcessor<TPixel> : HistogramEqualizationProcessor<TPixel>
where TPixel : struct, IPixel<TPixel> where TPixel : struct, IPixel<TPixel>
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="AdaptiveHistEqualizationProcessor{TPixel}"/> class. /// Initializes a new instance of the <see cref="AdaptiveHistogramEqualizationProcessor{TPixel}"/> class.
/// </summary> /// </summary>
/// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images /// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images
/// or 65536 for 16-bit grayscale images.</param> /// or 65536 for 16-bit grayscale images.</param>
/// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param> /// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param>
/// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param> /// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param>
/// <param name="tiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param> /// <param name="tiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param>
public AdaptiveHistEqualizationProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage, int tiles) public AdaptiveHistogramEqualizationProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage, int tiles)
: base(luminanceLevels, clipHistogram, clipLimitPercentage) : base(luminanceLevels, clipHistogram, clipLimitPercentage)
{ {
Guard.MustBeGreaterThanOrEqualTo(tiles, 2, nameof(tiles)); Guard.MustBeGreaterThanOrEqualTo(tiles, 2, nameof(tiles));

16
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs → src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs

@ -6,17 +6,21 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// <summary> /// <summary>
/// Applies an adaptive histogram equalization to the image using an sliding window approach. /// Applies an adaptive histogram equalization to the image using an sliding window approach.
/// </summary> /// </summary>
internal class AdaptiveHistEqualizationSWProcessor : HistogramEqualizationProcessor public class AdaptiveHistogramEqualizationSlidingWindowProcessor : HistogramEqualizationProcessor
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="AdaptiveHistEqualizationSWProcessor"/> class. /// Initializes a new instance of the <see cref="AdaptiveHistogramEqualizationSlidingWindowProcessor"/> class.
/// </summary> /// </summary>
/// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images /// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images
/// or 65536 for 16-bit grayscale images.</param> /// or 65536 for 16-bit grayscale images.</param>
/// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param> /// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param>
/// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param> /// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param>
/// <param name="numberOfTiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param> /// <param name="numberOfTiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param>
public AdaptiveHistEqualizationSWProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage, int numberOfTiles) public AdaptiveHistogramEqualizationSlidingWindowProcessor(
int luminanceLevels,
bool clipHistogram,
float clipLimitPercentage,
int numberOfTiles)
: base(luminanceLevels, clipHistogram, clipLimitPercentage) : base(luminanceLevels, clipHistogram, clipLimitPercentage)
{ {
this.NumberOfTiles = numberOfTiles; this.NumberOfTiles = numberOfTiles;
@ -30,7 +34,11 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// <inheritdoc /> /// <inheritdoc />
public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>() public override IImageProcessor<TPixel> CreatePixelSpecificProcessor<TPixel>()
{ {
return new AdaptiveHistEqualizationSWProcessor<TPixel>(this.LuminanceLevels, this.ClipHistogram, this.ClipLimitPercentage, this.NumberOfTiles); return new AdaptiveHistogramEqualizationSlidingWindowProcessor<TPixel>(
this.LuminanceLevels,
this.ClipHistogram,
this.ClipLimitPercentage,
this.NumberOfTiles);
} }
} }
} }

6
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor{TPixel}.cs → src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs

@ -20,18 +20,18 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// Applies an adaptive histogram equalization to the image using an sliding window approach. /// Applies an adaptive histogram equalization to the image using an sliding window approach.
/// </summary> /// </summary>
/// <typeparam name="TPixel">The pixel format.</typeparam> /// <typeparam name="TPixel">The pixel format.</typeparam>
internal class AdaptiveHistEqualizationSWProcessor<TPixel> : HistogramEqualizationProcessor<TPixel> internal class AdaptiveHistogramEqualizationSlidingWindowProcessor<TPixel> : HistogramEqualizationProcessor<TPixel>
where TPixel : struct, IPixel<TPixel> where TPixel : struct, IPixel<TPixel>
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="AdaptiveHistEqualizationSWProcessor{TPixel}"/> class. /// Initializes a new instance of the <see cref="AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}"/> class.
/// </summary> /// </summary>
/// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images /// <param name="luminanceLevels">The number of different luminance levels. Typical values are 256 for 8-bit grayscale images
/// or 65536 for 16-bit grayscale images.</param> /// or 65536 for 16-bit grayscale images.</param>
/// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param> /// <param name="clipHistogram">Indicating whether to clip the histogram bins at a specific value.</param>
/// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param> /// <param name="clipLimitPercentage">Histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param>
/// <param name="tiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param> /// <param name="tiles">The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100.</param>
public AdaptiveHistEqualizationSWProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage, int tiles) public AdaptiveHistogramEqualizationSlidingWindowProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage, int tiles)
: base(luminanceLevels, clipHistogram, clipLimitPercentage) : base(luminanceLevels, clipHistogram, clipLimitPercentage)
{ {
Guard.MustBeGreaterThanOrEqualTo(tiles, 2, nameof(tiles)); Guard.MustBeGreaterThanOrEqualTo(tiles, 2, nameof(tiles));

8
src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs

@ -6,8 +6,14 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// <summary> /// <summary>
/// Defines a global histogram equalization applicable to an <see cref="Image"/>. /// Defines a global histogram equalization applicable to an <see cref="Image"/>.
/// </summary> /// </summary>
internal class GlobalHistogramEqualizationProcessor : HistogramEqualizationProcessor public class GlobalHistogramEqualizationProcessor : HistogramEqualizationProcessor
{ {
/// <summary>
/// Initializes a new instance of the <see cref="GlobalHistogramEqualizationProcessor"/> class.
/// </summary>
/// <param name="luminanceLevels">The number of luminance levels.</param>
/// <param name="clipHistogram">A value indicating whether to clip the histogram bins at a specific value.</param>
/// <param name="clipLimitPercentage">The histogram clip limit in percent of the total pixels in the tile. Histogram bins which exceed this limit, will be capped at this value.</param>
public GlobalHistogramEqualizationProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage) public GlobalHistogramEqualizationProcessor(int luminanceLevels, bool clipHistogram, float clipLimitPercentage)
: base(luminanceLevels, clipHistogram, clipLimitPercentage) : base(luminanceLevels, clipHistogram, clipLimitPercentage)
{ {

6
src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
/// <summary> /// <summary>
/// Defines a processor that normalizes the histogram of an image. /// Defines a processor that normalizes the histogram of an image.
/// </summary> /// </summary>
internal abstract class HistogramEqualizationProcessor : IImageProcessor public abstract class HistogramEqualizationProcessor : IImageProcessor
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="HistogramEqualizationProcessor"/> class. /// Initializes a new instance of the <see cref="HistogramEqualizationProcessor"/> class.
@ -63,7 +63,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
break; break;
case HistogramEqualizationMethod.AdaptiveTileInterpolation: case HistogramEqualizationMethod.AdaptiveTileInterpolation:
processor = new AdaptiveHistEqualizationProcessor( processor = new AdaptiveHistogramEqualizationProcessor(
options.LuminanceLevels, options.LuminanceLevels,
options.ClipHistogram, options.ClipHistogram,
options.ClipLimitPercentage, options.ClipLimitPercentage,
@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
break; break;
case HistogramEqualizationMethod.AdaptiveSlidingWindow: case HistogramEqualizationMethod.AdaptiveSlidingWindow:
processor = new AdaptiveHistEqualizationSWProcessor( processor = new AdaptiveHistogramEqualizationSlidingWindowProcessor(
options.LuminanceLevels, options.LuminanceLevels,
options.ClipHistogram, options.ClipHistogram,
options.ClipLimitPercentage, options.ClipLimitPercentage,

Loading…
Cancel
Save