Browse Source

mirroring rows which exceeds the borders

pull/673/head
popow 8 years ago
parent
commit
30f4d73692
  1. 19
      src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs

19
src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs

@ -58,17 +58,24 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization
this.AddPixelsTooHistogram(rowSpan, histogram, this.LuminanceLevels); this.AddPixelsTooHistogram(rowSpan, histogram, this.LuminanceLevels);
} }
for (int y = halfGridSize + 1; y < source.Height - halfGridSize; y++) for (int y = 1; y < source.Height; y++)
{ {
// Remove top most row from the histogram // Remove top most row from the histogram, mirroring rows which exceeds the borders
Span<TPixel> rowSpan = source.GetPixelRowSpan(y - halfGridSize - 1).Slice(start: x - halfGridSize, length: gridSize); Span<TPixel> rowSpan = source.GetPixelRowSpan(Math.Abs(y - halfGridSize - 1)).Slice(start: x - halfGridSize, length: gridSize);
this.RemovePixelsFromHistogram(rowSpan, histogram, this.LuminanceLevels); this.RemovePixelsFromHistogram(rowSpan, histogram, this.LuminanceLevels);
// Add new bottom row to the histogram // Add new bottom row to the histogram, mirroring rows which exceeds the borders
rowSpan = source.GetPixelRowSpan(y + halfGridSize - 1).Slice(start: x - halfGridSize, length: gridSize); int rowPos = y + halfGridSize - 1;
if (rowPos >= source.Height)
{
int diff = rowPos - source.Height;
rowPos = source.Height - diff - 1;
}
rowSpan = source.GetPixelRowSpan(rowPos).Slice(start: x - halfGridSize, length: gridSize);
this.AddPixelsTooHistogram(rowSpan, histogram, this.LuminanceLevels); this.AddPixelsTooHistogram(rowSpan, histogram, this.LuminanceLevels);
// Clipping the histogram, but doing it on a copy to keep the original un-clipped values // Clipping the histogram, but doing it on a copy to keep the original un-clipped values for the next iteration
histogram.CopyTo(histogramCopy); histogram.CopyTo(histogramCopy);
this.ClipHistogram(histogramCopy, gridSize, contrastLimit); this.ClipHistogram(histogramCopy, gridSize, contrastLimit);
cdf.Clear(); cdf.Clear();

Loading…
Cancel
Save