Browse Source

Few general changes without effecting the algorithm implementation

pull/725/head
Simanto Rahman 8 years ago
parent
commit
bb5cc29ba2
  1. 20
      src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs

20
src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs

@ -57,11 +57,13 @@ namespace SixLabors.ImageSharp.Processing.Processors
ushort startX = (ushort)intersect.X;
ushort endX = (ushort)intersect.Right;
ushort width = (ushort)(endX - startX);
ushort height = (ushort)(endY - startY);
ushort width = (ushort)intersect.Width;
ushort height = (ushort)intersect.Height;
// Tweaked to support upto 4k wide pixels and not more. 4096 / 16 is 256 thus the '-1'
byte s = (byte)Math.Truncate((width / 16f) - 1);
byte clusterSize = (byte)((width / 16) - 1);
float threshold = 0.85f;
// Using pooled 2d buffer for integer image table
using (Buffer2D<ulong> intImage = configuration.MemoryAllocator.Allocate2D<ulong>(width, height, AllocationOptions.Clean))
@ -126,23 +128,21 @@ namespace SixLabors.ImageSharp.Processing.Processors
{
ref Rgb24 rgb = ref span[(width * j) + 1];
x1 = (ushort)Math.Max(i - s + 1, 0);
x2 = (ushort)Math.Min(i + s + 1, endY - 1);
y1 = (ushort)Math.Max(j - s + 1, 0);
y2 = (ushort)Math.Min(j + s + 1, endX - 1);
x1 = (ushort)Math.Max(i - clusterSize + 1, 0);
x2 = (ushort)Math.Min(i + clusterSize + 1, endY - 1);
y1 = (ushort)Math.Max(j - clusterSize + 1, 0);
y2 = (ushort)Math.Min(j + clusterSize + 1, endX - 1);
count = (uint)((x2 - x1) * (y2 - y1));
sum = (long)(intImage[x2, y2] - intImage[x1, y2] - intImage[x2, y1] + intImage[x1, y1])
if ((rgb.R + rgb.G + rgb.B) * count < sum * (1.0 - 0.15))
if ((rgb.R + rgb.G + rgb.B) * count < sum * threshold)
{
//row[j] = this.Lower;
rgb = this.Lower.ToRgba32().Rgb;
}
else
{
//row[j] = this.Upper;
rgb = this.Upper.ToRgba32().Rgb;
}
}

Loading…
Cancel
Save