Skip to content

Commit e8b36e3

Browse files
brianpopowJimBobSquarePants
authored andcommitted
Feature: adaptive histogram equalization (SixLabors#673)
* first version of sliding window adaptive histogram equalization * going now from top to bottom of the image, added more comments * using memory allocator to create the histogram and the cdf * mirroring rows which exceeds the borders * mirroring also left and right borders * gridsize and cliplimit are now parameters of the constructor * using Parallel.For * only applying clipping once, effect applying it multiple times is neglectable * added abstract base class for histogram equalization, added option to enable / disable clipping * small improvements * clipLimit now in percent of the total number of pixels in the grid * optimization: only calculating the cdf until the maximum histogram index * fix: using configuration from the parameter instead of the default * removed unnecessary loops in CalculateCdf, fixed typo in method name AddPixelsToHistogram * added different approach for ahe: image is split up in tiles, cdf is computed for each tile. Grey value will be determined by interpolating between 4 tiles * simplified interpolation between the tiles * number of tiles is now fixed and depended on the width and height of the image * moved calculating LUT's into separate method * number of tiles is now part of the options and will be used with the sliding window approach also, so both methods are comparable * removed no longer valid xml comment * attempt fixing the borders * refactoring to improve readability * linear interpolation in the border tiles * refactored processing the borders into separate methods * fixing corner tiles * fixed build errors * fixing mistake during merge from upstream: setting test images to "update Resize reference output because of improved ResizeKernelMap calculations" * using Parallel.ForEach for all inner tile calculations * using Parallel.ForEach to calculate the lookup tables * re-using pre allocated pixel row in GetPixelRow * fixed issue with the border tiles, when tile width != tile height * changed default value for ClipHistogram to false again * alpha channel from the original image is now preserved * added unit tests for adaptive histogram equalization * Update External * 2x faster adaptive tiled processor * Remove double indexing and bounds checks * Begin optimizing the global histogram * Parallelize GlobalHistogramEqualizationProcessor * Moving sliding window from left to right instead of from top to bottom * The tile width and height is again depended on the image width: image.Width / Tiles * Removed keeping track of the maximum histogram position * Updated reference image for sliding window AHE for moving the sliding window from left to right * Removed unnecessary call to Span.Clear(), all values are overwritten anyway * Revert "Moving sliding window from left to right instead of from top to bottom" This reverts commit 8f19e5e. # Conflicts: # src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs * Split GetPixelRow in two version: one which mirrors the edges (only needed in the borders of the images) and one which does not * Refactoring and cleanup sliding window processor * Added an upper limit of 100 tiles * Performance tweaks * Update External
1 parent 572afe4 commit e8b36e3

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

tests/ImageSharp.Tests/TestImages.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ public static class Bad
141141
public const string Testorig420 = "Jpg/baseline/testorig.jpg";
142142
public const string MultiScanBaselineCMYK = "Jpg/baseline/MultiScanBaselineCMYK.jpg";
143143
public const string Ratio1x1 = "Jpg/baseline/ratio-1x1.jpg";
144+
public const string LowContrast = "Jpg/baseline/AsianCarvingLowContrast.jpg";
144145
public const string Testorig12bit = "Jpg/baseline/testorig12.jpg";
145146
public const string YcckSubsample1222 = "Jpg/baseline/ycck-subsample-1222.jpg";
146147

0 commit comments

Comments
 (0)