From ec0b9d98edb37b80ec1839d946a07cf2056b17e6 Mon Sep 17 00:00:00 2001 From: Brad Parham Date: Thu, 20 May 2021 10:20:03 +0200 Subject: [PATCH 1/2] Add contrast limiting adaptive histogram equalization (clahe) function --- docs/api-operation.md | 30 ++++- docs/search-index.json | 2 +- lib/constructor.js | 3 + lib/operation.js | 41 ++++++ package.json | 3 +- src/operations.cc | 7 ++ src/operations.h | 5 + src/pipeline.cc | 9 ++ src/pipeline.h | 6 + test/fixtures/concert.jpg | Bin 0 -> 24244 bytes test/fixtures/expected/clahe-100-100-0.jpg | Bin 0 -> 25021 bytes test/fixtures/expected/clahe-100-50-3.jpg | Bin 0 -> 15217 bytes test/fixtures/expected/clahe-11-25-14.jpg | Bin 0 -> 28947 bytes test/fixtures/expected/clahe-5-5-0.jpg | Bin 0 -> 41258 bytes test/fixtures/expected/clahe-5-5-5.jpg | Bin 0 -> 37483 bytes test/fixtures/expected/clahe-50-50-0.jpg | Bin 0 -> 28143 bytes test/fixtures/expected/clahe-50-50-14.jpg | Bin 0 -> 21121 bytes test/fixtures/index.js | 2 + test/unit/clahe.js | 139 +++++++++++++++++++++ 19 files changed, 243 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/concert.jpg create mode 100644 test/fixtures/expected/clahe-100-100-0.jpg create mode 100644 test/fixtures/expected/clahe-100-50-3.jpg create mode 100644 test/fixtures/expected/clahe-11-25-14.jpg create mode 100644 test/fixtures/expected/clahe-5-5-0.jpg create mode 100644 test/fixtures/expected/clahe-5-5-5.jpg create mode 100644 test/fixtures/expected/clahe-50-50-0.jpg create mode 100644 test/fixtures/expected/clahe-50-50-14.jpg create mode 100644 test/unit/clahe.js diff --git a/docs/api-operation.md b/docs/api-operation.md index 037c95d8d..4247c14aa 100644 --- a/docs/api-operation.md +++ b/docs/api-operation.md @@ -243,6 +243,30 @@ Alternative spelling of normalise. Returns **Sharp** +## clahe + +Perform contrast limiting adaptive histogram equalization (CLAHE) + +This will, in general, enhance the clarity of the image by bringing out +darker details. Please read more about CLAHE here: +[https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE][8] + +### Parameters + +* `options` **[Object][2]** + + * `options.width` **[number][1]** integer width of the region in pixels. + * `options.height` **[number][1]** integer height of the region in pixels. + * `options.maxSlope` **[number][1]** maximum value for the slope of the + cumulative histogram. A value of 0 disables contrast limiting. Valid values + are integers in the range 0-100 (inclusive) (optional, default `3`) + + + +* Throws **[Error][5]** Invalid parameters + +Returns **Sharp** + ## convolve Convolve the image with the specified kernel. @@ -304,7 +328,7 @@ the selected bitwise boolean `operation` between the corresponding pixels of the ### Parameters -* `operand` **([Buffer][8] | [string][3])** Buffer containing image data or string containing the path to an image file. +* `operand` **([Buffer][9] | [string][3])** Buffer containing image data or string containing the path to an image file. * `operator` **[string][3]** one of `and`, `or` or `eor` to perform that bitwise operation, like the C logic operators `&`, `|` and `^` respectively. * `options` **[Object][2]?** @@ -421,4 +445,6 @@ Returns **Sharp** [7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array -[8]: https://nodejs.org/api/buffer.html +[8]: https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE + +[9]: https://nodejs.org/api/buffer.html diff --git a/docs/search-index.json b/docs/search-index.json index 46bc23c66..27117513c 100644 --- a/docs/search-index.json +++ b/docs/search-index.json @@ -1 +1 @@ -[{"t":"Prerequisites","d":"Node.js v10","k":"prerequisites node","l":"/install#prerequisites"},{"t":"Prebuilt binaries","d":"Ready-compiled sharp and libvips binaries are provided for use with Node.js v10 on the most common platforms macOS x64 10.13 Linux x64 glibc 2.17, musl 1.1.24 Linux ARM64 glibc 2.2","k":"prebuilt binaries compiled sharp libvips node common platforms macos linux glibc musl arm","l":"/install#prebuilt-binaries"},{"t":"Common problems","d":"The architecture and platform of Node.js used for npm install must be the same as the architecture and platform of Node.js used at runtime. See the cross-platform","k":"common problems architecture platform node npm install runtime cross","l":"/install#common-problems"},{"t":"Apple M1","d":"Prebuilt libvips binaries are provided for macOS on ARM64 since sharp v0.28.0. During npm install sharp will be built locally, which requires Xcode and Python - see building from s","k":"apple prebuilt libvips binaries macos arm sharp during npm install built locally requires xcode python building","l":"/install#apple-m1"},{"t":"Custom libvips","d":"To use a custom, globally-installed version of libvips instead of the provided binaries, make sure it is at least the version listed under config.libvips in the package.json file a","k":"custom libvips globally installed version instead binaries make listed config package json file","l":"/install#custom-libvips"},{"t":"Building from source","d":"This module will be compiled from source at npm install time when a globally-installed libvips is detected set the SHARP_IGNORE_GLOBAL_LIBVIPS environment variable to skip this, pr","k":"building source module compiled npm install time globally installed libvips detected environment variable skip","l":"/install#building-from-source"},{"t":"Custom prebuilt binaries","d":"This is an advanced approach that most people will not require. To install the prebuilt sharp binaries from a custom URL, set the sharp_binary_host npm config option or the npm_con","k":"custom prebuilt binaries advanced approach people require install sharp url npm config option npmcon","l":"/install#custom-prebuilt-binaries"},{"t":"Chinese mirror","d":"A mirror site based in China, provided by Alibaba, contains binaries for both sharp and libvips. To use this either set the following configuration sh npm config set sharp_binary_h","k":"chinese mirror site china alibaba contains binaries sharp libvips following configuration npm config sharpbinaryh","l":"/install#chinese-mirror"},{"t":"FreeBSD","d":"The vips package must be installed before npm install is run. sh pkg install -y pkgconf vips sh cd /usr/ports/graphics/vips/ make install clean","k":"freebsd vips package installed npm install run pkg pkgconf usr ports graphics make clean","l":"/install#freebsd"},{"t":"Linux memory allocator","d":"The default memory allocator on most glibc-based Linux systems e.g. Debian, Red Hat is unsuitable for long-running, multi-threaded processes that involve lots of small memory alloc","k":"linux memory allocator glibc systems debian red hat unsuitable long running multi threaded processes small alloc","l":"/install#linux-memory-allocator"},{"t":"Heroku","d":"Add the jemalloc buildpack to reduce the effects of memory fragmentation. Set NODE_MODULES_CACHE","k":"heroku add jemalloc buildpack reduce effects memory fragmentation","l":"/install#heroku"},{"t":"AWS Lambda","d":"The binaries in the node_modules directory of the deployment package must be for the Linux x64 platform. When building your deployment package on machines other than Linux x64 glib","k":"aws lambda binaries nodemodules directory deployment package linux platform building your machines other than glib","l":"/install#aws-lambda"},{"t":"Webpack","d":"Ensure sharp is added to the externals configuration. js externals sharp commonjs sharp","k":"webpack sharp added externals configuration commonjs","l":"/install#webpack"},{"t":"Worker threads","d":"The main thread must call requiresharp before worker threads are created to ensure shared libraries remain loaded in memory until after all threads are complete.","k":"worker threads main thread requiresharp created shared libraries remain loaded memory complete","l":"/install#worker-threads"},{"t":"Canvas and Windows","d":"The prebuilt binaries provided by canvas for Windows depend on the unmaintained GTK 2, last updated in 2011. These conflict with the modern, up-to-date binaries provided by sharp.","k":"canvas windows prebuilt binaries depend unmaintained gtk last updated conflict modern date sharp","l":"/install#canvas-and-windows"},{"t":"Sharp","d":"Constructor factory to create an instance of sharp, to which further methods are chained.","k":"sharp constructor factory create instance further methods chained","l":"/api-constructor#sharp"},{"t":"clone","d":"Take a snapshot of the Sharp instance, returning a new instance. Cloned instances inherit the input of their parent instance. This allows multiple output Streams and therefore mult","k":"clone snapshot sharp instance returning new cloned instances inherit input parent multiple output streams mult","l":"/api-constructor#clone"},{"t":"metadata","d":"Fast access to uncached image metadata without decoding any compressed image data. A Promise is returned when callback is not provided.","k":"metadata fast access uncached decoding compressed data promise returned callback","l":"/api-input#metadata"},{"t":"stats","d":"Access to pixel-derived image statistics for every channel in the image. A Promise is returned when callback is not provided.","k":"stats access pixel derived statistics channel promise returned callback","l":"/api-input#stats"},{"t":"toFile","d":"Write output image data to a file.","k":"tofile write output data file","l":"/api-output#tofile"},{"t":"toBuffer","d":"Write output to a Buffer. JPEG, PNG, WebP, AVIF, TIFF and raw pixel data output are supported.","k":"tobuffer write output buffer jpeg png webp avif tiff raw pixel data","l":"/api-output#tobuffer"},{"t":"withMetadata","d":"Include all metadata EXIF, XMP, IPTC from the input image in the output image. This will also convert to and add a web-friendly sRGB ICC profile unless a custom output profile is p","k":"withmetadata include metadata exif xmp iptc input output convert add web friendly srgb icc profile custom","l":"/api-output#withmetadata"},{"t":"toFormat","d":"Force output to a given format.","k":"toformat force output format","l":"/api-output#toformat"},{"t":"jpeg","d":"Use these JPEG options for output image.","k":"jpeg output","l":"/api-output#jpeg"},{"t":"png","d":"Use these PNG options for output image.","k":"png output","l":"/api-output#png"},{"t":"webp","d":"Use these WebP options for output image.","k":"webp output","l":"/api-output#webp"},{"t":"gif","d":"Use these GIF options for output image.","k":"gif output","l":"/api-output#gif"},{"t":"tiff","d":"Use these TIFF options for output image.","k":"tiff output","l":"/api-output#tiff"},{"t":"avif","d":"Use these AVIF options for output image.","k":"avif output","l":"/api-output#avif"},{"t":"heif","d":"Use these HEIF options for output image.","k":"heif output","l":"/api-output#heif"},{"t":"raw","d":"Force output to be raw, uncompressed, 8-bit unsigned integer unit8 pixel data. Pixel ordering is left-to-right, top-to-bottom, without padding. Channel ordering will be RGB or RGBA","k":"raw force output uncompressed bit unsigned integer unit pixel data ordering left right top bottom padding channel rgb rgba","l":"/api-output#raw"},{"t":"tile","d":"Use tile-based deep zoom image pyramid output. Set the format and options for tile images via the toFormat, jpeg, png or webp functions. Use a .zip or .szi file extension with toFi","k":"tile deep zoom pyramid output format images via toformat jpeg png webp functions zip szi file extension tofi","l":"/api-output#tile"},{"t":"resize","d":"Resize image to width, height or width x height.","k":"resize width height","l":"/api-resize#resize"},{"t":"extend","d":"Extends/pads the edges of the image with the provided background colour. This operation will always occur after resizing and extraction, if any.","k":"extend extends pads edges background colour operation resizing extraction","l":"/api-resize#extend"},{"t":"extract","d":"Extract/crop a region of the image.","k":"extract crop region","l":"/api-resize#extract"},{"t":"trim","d":"Trim boring pixels from all edges that contain values similar to the top-left pixel. Images consisting entirely of a single colour will calculate boring using the alpha channel, if","k":"trim boring pixels edges contain similar top left pixel images consisting entirely single colour calculate alpha channel","l":"/api-resize#trim"},{"t":"composite","d":"Composite images over the processed resized, extracted etc. image.","k":"composite images processed resized extracted","l":"/api-composite#composite"},{"t":"rotate","d":"Rotate the output image by either an explicit angle or auto-orient based on the EXIF Orientation tag.","k":"rotate output explicit angle auto orient exif orientation tag","l":"/api-operation#rotate"},{"t":"flip","d":"Flip the image about the vertical Y axis. This always occurs after rotation, if any. The use of flip implies the removal of the EXIF Orientation tag, if any.","k":"flip vertical axis rotation implies removal exif orientation tag","l":"/api-operation#flip"},{"t":"flop","d":"Flop the image about the horizontal X axis. This always occurs after rotation, if any. The use of flop implies the removal of the EXIF Orientation tag, if any.","k":"flop horizontal axis rotation implies removal exif orientation tag","l":"/api-operation#flop"},{"t":"affine","d":"Perform an affine transform on an image. This operation will always occur after resizing, extraction and rotation, if any.","k":"affine transform operation resizing extraction rotation","l":"/api-operation#affine"},{"t":"sharpen","d":"Sharpen the image. When used without parameters, performs a fast, mild sharpen of the output image. When a sigma is provided, performs a slower, more accurate sharpen of the L chan","k":"sharpen parameters fast mild output sigma slower accurate chan","l":"/api-operation#sharpen"},{"t":"median","d":"Apply median filter. When used without parameters the default window is 3x3.","k":"median apply filter parameters window","l":"/api-operation#median"},{"t":"blur","d":"Blur the image. When used without parameters, performs a fast, mild blur of the output image. When a sigma is provided, performs a slower, more accurate Gaussian blur.","k":"blur parameters fast mild output sigma slower accurate gaussian","l":"/api-operation#blur"},{"t":"flatten","d":"Merge alpha transparency channel, if any, with a background, then remove the alpha channel.","k":"flatten merge alpha transparency channel background then remove","l":"/api-operation#flatten"},{"t":"gamma","d":"Apply a gamma correction by reducing the encoding darken pre-resize at a factor of 1/gamma then increasing the encoding brighten post-resize at a factor of gamma. This can improve","k":"gamma apply correction reducing encoding darken pre resize factor then increasing brighten post improve","l":"/api-operation#gamma"},{"t":"negate","d":"Produce the negative of the image.","k":"negate produce negative","l":"/api-operation#negate"},{"t":"normalise","d":"Enhance output image contrast by stretching its luminance to cover the full dynamic range.","k":"normalise enhance output contrast stretching luminance cover full dynamic range","l":"/api-operation#normalise"},{"t":"normalize","d":"Alternative spelling of normalise.","k":"normalize normalise","l":"/api-operation#normalize"},{"t":"convolve","d":"Convolve the image with the specified kernel.","k":"convolve specified kernel","l":"/api-operation#convolve"},{"t":"threshold","d":"Any pixel value greater than or equal to the threshold value will be set to 255, otherwise it will be set to 0.","k":"threshold pixel greater than equal otherwise","l":"/api-operation#threshold"},{"t":"boolean","d":"Perform a bitwise boolean operation with operand image.","k":"boolean bitwise operation operand","l":"/api-operation#boolean"},{"t":"linear","d":"Apply the linear formula a input b to the image levels adjustment","k":"linear apply formula input levels adjustment","l":"/api-operation#linear"},{"t":"recomb","d":"Recomb the image with the specified matrix.","k":"recomb specified matrix","l":"/api-operation#recomb"},{"t":"modulate","d":"Transforms the image using brightness, saturation and hue rotation.","k":"modulate transforms brightness saturation hue rotation","l":"/api-operation#modulate"},{"t":"removeAlpha","d":"Remove alpha channel, if any. This is a no-op if the image does not have an alpha channel.","k":"removealpha remove alpha channel","l":"/api-channel#removealpha"},{"t":"ensureAlpha","d":"Ensure the output image has an alpha transparency channel. If missing, the added alpha channel will have the specified transparency level, defaulting to fully-opaque 1. This is a n","k":"ensurealpha output alpha transparency channel missing added specified level defaulting fully opaque","l":"/api-channel#ensurealpha"},{"t":"extractChannel","d":"Extract a single channel from a multi-channel image.","k":"extractchannel extract single channel multi","l":"/api-channel#extractchannel"},{"t":"joinChannel","d":"Join one or more channels to the image. The meaning of the added channels depends on the output colourspace, set with toColourspace. By default the output image will be web-friendl","k":"joinchannel join one channels meaning added depends output colourspace tocolourspace web friendl","l":"/api-channel#joinchannel"},{"t":"bandbool","d":"Perform a bitwise boolean operation on all input image channels bands to produce a single channel output image.","k":"bandbool bitwise boolean operation input channels bands produce single channel output","l":"/api-channel#bandbool"},{"t":"tint","d":"Tint the image using the provided chroma while preserving the image luminance. An alpha channel may be present and will be unchanged by the operation.","k":"tint chroma preserving luminance alpha channel present unchanged operation","l":"/api-colour#tint"},{"t":"greyscale","d":"Convert to 8-bit greyscale 256 shades of grey. This is a linear operation. If the input image is in a non-linear colour space such as sRGB, use gamma with greyscale for the best re","k":"greyscale convert bit shades grey linear operation input colour space srgb gamma best","l":"/api-colour#greyscale"},{"t":"grayscale","d":"Alternative spelling of greyscale.","k":"grayscale greyscale","l":"/api-colour#grayscale"},{"t":"toColourspace","d":"Set the output colourspace. By default output image will be web-friendly sRGB, with additional channels interpreted as alpha channels.","k":"tocolourspace output colourspace web friendly srgb additional channels interpreted alpha","l":"/api-colour#tocolourspace"},{"t":"toColorspace","d":"Alternative spelling of toColourspace.","k":"tocolorspace tocolourspace","l":"/api-colour#tocolorspace"},{"t":"format","d":"An Object containing nested boolean values representing the available input and output formats/methods.","k":"format object nested boolean representing available input output formats methods","l":"/api-utility#format"},{"t":"interpolators","d":"An Object containing the available interpolators and their proper values","k":"interpolators object available proper","l":"/api-utility#interpolators"},{"t":"versions","d":"An Object containing the version numbers of libvips and its dependencies.","k":"versions object version numbers libvips dependencies","l":"/api-utility#versions"},{"t":"cache","d":"Gets or, when options are provided, sets the limits of libvips operation cache. Existing entries in the cache will be trimmed after any change in limits. This method always returns","k":"cache limits libvips operation existing entries trimmed change method returns","l":"/api-utility#cache"},{"t":"concurrency","d":"Gets or, when a concurrency is provided, sets the number of threads libvips should create to process each image.","k":"concurrency number threads libvips create process","l":"/api-utility#concurrency"},{"t":"queue","d":"An EventEmitter that emits a change event when a task is either","k":"queue eventemitter emits change event task","l":"/api-utility#queue"},{"t":"counters","d":"Provides access to internal task counters.","k":"counters provides access internal task","l":"/api-utility#counters"},{"t":"simd","d":"Get and set use of SIMD vector unit instructions. Requires libvips to have been compiled with liborc support.","k":"simd vector unit instructions requires libvips compiled liborc","l":"/api-utility#simd"}] \ No newline at end of file +[{"t":"Prerequisites","d":"Node.js v10","k":"prerequisites node","l":"/install#prerequisites"},{"t":"Prebuilt binaries","d":"Ready-compiled sharp and libvips binaries are provided for use with Node.js v10 on the most common platforms macOS x64 10.13 Linux x64 glibc 2.17, musl 1.1.24 Linux ARM64 glibc 2.2","k":"prebuilt binaries compiled sharp libvips node common platforms macos linux glibc musl arm","l":"/install#prebuilt-binaries"},{"t":"Common problems","d":"The architecture and platform of Node.js used for npm install must be the same as the architecture and platform of Node.js used at runtime. See the cross-platform","k":"common problems architecture platform node npm install runtime cross","l":"/install#common-problems"},{"t":"Apple M1","d":"Prebuilt libvips binaries are provided for macOS on ARM64 since sharp v0.28.0. During npm install sharp will be built locally, which requires Xcode and Python - see building from s","k":"apple prebuilt libvips binaries macos arm sharp during npm install built locally requires xcode python building","l":"/install#apple-m1"},{"t":"Custom libvips","d":"To use a custom, globally-installed version of libvips instead of the provided binaries, make sure it is at least the version listed under config.libvips in the package.json file a","k":"custom libvips globally installed version instead binaries make listed config package json file","l":"/install#custom-libvips"},{"t":"Building from source","d":"This module will be compiled from source at npm install time when a globally-installed libvips is detected set the SHARP_IGNORE_GLOBAL_LIBVIPS environment variable to skip this, pr","k":"building source module compiled npm install time globally installed libvips detected environment variable skip","l":"/install#building-from-source"},{"t":"Custom prebuilt binaries","d":"This is an advanced approach that most people will not require. To install the prebuilt sharp binaries from a custom URL, set the sharp_binary_host npm config option or the npm_con","k":"custom prebuilt binaries advanced approach people require install sharp url npm config option npmcon","l":"/install#custom-prebuilt-binaries"},{"t":"Chinese mirror","d":"A mirror site based in China, provided by Alibaba, contains binaries for both sharp and libvips. To use this either set the following configuration sh npm config set sharp_binary_h","k":"chinese mirror site china alibaba contains binaries sharp libvips following configuration npm config sharpbinaryh","l":"/install#chinese-mirror"},{"t":"FreeBSD","d":"The vips package must be installed before npm install is run. sh pkg install -y pkgconf vips sh cd /usr/ports/graphics/vips/ make install clean","k":"freebsd vips package installed npm install run pkg pkgconf usr ports graphics make clean","l":"/install#freebsd"},{"t":"Linux memory allocator","d":"The default memory allocator on most glibc-based Linux systems e.g. Debian, Red Hat is unsuitable for long-running, multi-threaded processes that involve lots of small memory alloc","k":"linux memory allocator glibc systems debian red hat unsuitable long running multi threaded processes small alloc","l":"/install#linux-memory-allocator"},{"t":"Heroku","d":"Add the jemalloc buildpack to reduce the effects of memory fragmentation. Set NODE_MODULES_CACHE","k":"heroku add jemalloc buildpack reduce effects memory fragmentation","l":"/install#heroku"},{"t":"AWS Lambda","d":"The binaries in the node_modules directory of the deployment package must be for the Linux x64 platform. When building your deployment package on machines other than Linux x64 glib","k":"aws lambda binaries nodemodules directory deployment package linux platform building your machines other than glib","l":"/install#aws-lambda"},{"t":"Webpack","d":"Ensure sharp is added to the externals configuration. js externals sharp commonjs sharp","k":"webpack sharp added externals configuration commonjs","l":"/install#webpack"},{"t":"Worker threads","d":"The main thread must call requiresharp before worker threads are created to ensure shared libraries remain loaded in memory until after all threads are complete.","k":"worker threads main thread requiresharp created shared libraries remain loaded memory complete","l":"/install#worker-threads"},{"t":"Canvas and Windows","d":"The prebuilt binaries provided by canvas for Windows depend on the unmaintained GTK 2, last updated in 2011. These conflict with the modern, up-to-date binaries provided by sharp.","k":"canvas windows prebuilt binaries depend unmaintained gtk last updated conflict modern date sharp","l":"/install#canvas-and-windows"},{"t":"Sharp","d":"Constructor factory to create an instance of sharp, to which further methods are chained.","k":"sharp constructor factory create instance further methods chained","l":"/api-constructor#sharp"},{"t":"clone","d":"Take a snapshot of the Sharp instance, returning a new instance. Cloned instances inherit the input of their parent instance. This allows multiple output Streams and therefore mult","k":"clone snapshot sharp instance returning new cloned instances inherit input parent multiple output streams mult","l":"/api-constructor#clone"},{"t":"metadata","d":"Fast access to uncached image metadata without decoding any compressed image data. A Promise is returned when callback is not provided.","k":"metadata fast access uncached decoding compressed data promise returned callback","l":"/api-input#metadata"},{"t":"stats","d":"Access to pixel-derived image statistics for every channel in the image. A Promise is returned when callback is not provided.","k":"stats access pixel derived statistics channel promise returned callback","l":"/api-input#stats"},{"t":"toFile","d":"Write output image data to a file.","k":"tofile write output data file","l":"/api-output#tofile"},{"t":"toBuffer","d":"Write output to a Buffer. JPEG, PNG, WebP, AVIF, TIFF and raw pixel data output are supported.","k":"tobuffer write output buffer jpeg png webp avif tiff raw pixel data","l":"/api-output#tobuffer"},{"t":"withMetadata","d":"Include all metadata EXIF, XMP, IPTC from the input image in the output image. This will also convert to and add a web-friendly sRGB ICC profile unless a custom output profile is p","k":"withmetadata include metadata exif xmp iptc input output convert add web friendly srgb icc profile custom","l":"/api-output#withmetadata"},{"t":"toFormat","d":"Force output to a given format.","k":"toformat force output format","l":"/api-output#toformat"},{"t":"jpeg","d":"Use these JPEG options for output image.","k":"jpeg output","l":"/api-output#jpeg"},{"t":"png","d":"Use these PNG options for output image.","k":"png output","l":"/api-output#png"},{"t":"webp","d":"Use these WebP options for output image.","k":"webp output","l":"/api-output#webp"},{"t":"gif","d":"Use these GIF options for output image.","k":"gif output","l":"/api-output#gif"},{"t":"tiff","d":"Use these TIFF options for output image.","k":"tiff output","l":"/api-output#tiff"},{"t":"avif","d":"Use these AVIF options for output image.","k":"avif output","l":"/api-output#avif"},{"t":"heif","d":"Use these HEIF options for output image.","k":"heif output","l":"/api-output#heif"},{"t":"raw","d":"Force output to be raw, uncompressed, 8-bit unsigned integer unit8 pixel data. Pixel ordering is left-to-right, top-to-bottom, without padding. Channel ordering will be RGB or RGBA","k":"raw force output uncompressed bit unsigned integer unit pixel data ordering left right top bottom padding channel rgb rgba","l":"/api-output#raw"},{"t":"tile","d":"Use tile-based deep zoom image pyramid output. Set the format and options for tile images via the toFormat, jpeg, png or webp functions. Use a .zip or .szi file extension with toFi","k":"tile deep zoom pyramid output format images via toformat jpeg png webp functions zip szi file extension tofi","l":"/api-output#tile"},{"t":"resize","d":"Resize image to width, height or width x height.","k":"resize width height","l":"/api-resize#resize"},{"t":"extend","d":"Extends/pads the edges of the image with the provided background colour. This operation will always occur after resizing and extraction, if any.","k":"extend extends pads edges background colour operation resizing extraction","l":"/api-resize#extend"},{"t":"extract","d":"Extract/crop a region of the image.","k":"extract crop region","l":"/api-resize#extract"},{"t":"trim","d":"Trim boring pixels from all edges that contain values similar to the top-left pixel. Images consisting entirely of a single colour will calculate boring using the alpha channel, if","k":"trim boring pixels edges contain similar top left pixel images consisting entirely single colour calculate alpha channel","l":"/api-resize#trim"},{"t":"composite","d":"Composite images over the processed resized, extracted etc. image.","k":"composite images processed resized extracted","l":"/api-composite#composite"},{"t":"rotate","d":"Rotate the output image by either an explicit angle or auto-orient based on the EXIF Orientation tag.","k":"rotate output explicit angle auto orient exif orientation tag","l":"/api-operation#rotate"},{"t":"flip","d":"Flip the image about the vertical Y axis. This always occurs after rotation, if any. The use of flip implies the removal of the EXIF Orientation tag, if any.","k":"flip vertical axis rotation implies removal exif orientation tag","l":"/api-operation#flip"},{"t":"flop","d":"Flop the image about the horizontal X axis. This always occurs after rotation, if any. The use of flop implies the removal of the EXIF Orientation tag, if any.","k":"flop horizontal axis rotation implies removal exif orientation tag","l":"/api-operation#flop"},{"t":"affine","d":"Perform an affine transform on an image. This operation will always occur after resizing, extraction and rotation, if any.","k":"affine transform operation resizing extraction rotation","l":"/api-operation#affine"},{"t":"sharpen","d":"Sharpen the image. When used without parameters, performs a fast, mild sharpen of the output image. When a sigma is provided, performs a slower, more accurate sharpen of the L chan","k":"sharpen parameters fast mild output sigma slower accurate chan","l":"/api-operation#sharpen"},{"t":"median","d":"Apply median filter. When used without parameters the default window is 3x3.","k":"median apply filter parameters window","l":"/api-operation#median"},{"t":"blur","d":"Blur the image. When used without parameters, performs a fast, mild blur of the output image. When a sigma is provided, performs a slower, more accurate Gaussian blur.","k":"blur parameters fast mild output sigma slower accurate gaussian","l":"/api-operation#blur"},{"t":"flatten","d":"Merge alpha transparency channel, if any, with a background, then remove the alpha channel.","k":"flatten merge alpha transparency channel background then remove","l":"/api-operation#flatten"},{"t":"gamma","d":"Apply a gamma correction by reducing the encoding darken pre-resize at a factor of 1/gamma then increasing the encoding brighten post-resize at a factor of gamma. This can improve","k":"gamma apply correction reducing encoding darken pre resize factor then increasing brighten post improve","l":"/api-operation#gamma"},{"t":"negate","d":"Produce the negative of the image.","k":"negate produce negative","l":"/api-operation#negate"},{"t":"normalise","d":"Enhance output image contrast by stretching its luminance to cover the full dynamic range.","k":"normalise enhance output contrast stretching luminance cover full dynamic range","l":"/api-operation#normalise"},{"t":"normalize","d":"Alternative spelling of normalise.","k":"normalize normalise","l":"/api-operation#normalize"},{"t":"clahe","d":"Perform contrast limiting adaptive histogram equalization CLAHE","k":"clahe contrast limiting adaptive histogram equalization","l":"/api-operation#clahe"},{"t":"convolve","d":"Convolve the image with the specified kernel.","k":"convolve specified kernel","l":"/api-operation#convolve"},{"t":"threshold","d":"Any pixel value greater than or equal to the threshold value will be set to 255, otherwise it will be set to 0.","k":"threshold pixel greater than equal otherwise","l":"/api-operation#threshold"},{"t":"boolean","d":"Perform a bitwise boolean operation with operand image.","k":"boolean bitwise operation operand","l":"/api-operation#boolean"},{"t":"linear","d":"Apply the linear formula a input b to the image levels adjustment","k":"linear apply formula input levels adjustment","l":"/api-operation#linear"},{"t":"recomb","d":"Recomb the image with the specified matrix.","k":"recomb specified matrix","l":"/api-operation#recomb"},{"t":"modulate","d":"Transforms the image using brightness, saturation and hue rotation.","k":"modulate transforms brightness saturation hue rotation","l":"/api-operation#modulate"},{"t":"removeAlpha","d":"Remove alpha channel, if any. This is a no-op if the image does not have an alpha channel.","k":"removealpha remove alpha channel","l":"/api-channel#removealpha"},{"t":"ensureAlpha","d":"Ensure the output image has an alpha transparency channel. If missing, the added alpha channel will have the specified transparency level, defaulting to fully-opaque 1. This is a n","k":"ensurealpha output alpha transparency channel missing added specified level defaulting fully opaque","l":"/api-channel#ensurealpha"},{"t":"extractChannel","d":"Extract a single channel from a multi-channel image.","k":"extractchannel extract single channel multi","l":"/api-channel#extractchannel"},{"t":"joinChannel","d":"Join one or more channels to the image. The meaning of the added channels depends on the output colourspace, set with toColourspace. By default the output image will be web-friendl","k":"joinchannel join one channels meaning added depends output colourspace tocolourspace web friendl","l":"/api-channel#joinchannel"},{"t":"bandbool","d":"Perform a bitwise boolean operation on all input image channels bands to produce a single channel output image.","k":"bandbool bitwise boolean operation input channels bands produce single channel output","l":"/api-channel#bandbool"},{"t":"tint","d":"Tint the image using the provided chroma while preserving the image luminance. An alpha channel may be present and will be unchanged by the operation.","k":"tint chroma preserving luminance alpha channel present unchanged operation","l":"/api-colour#tint"},{"t":"greyscale","d":"Convert to 8-bit greyscale 256 shades of grey. This is a linear operation. If the input image is in a non-linear colour space such as sRGB, use gamma with greyscale for the best re","k":"greyscale convert bit shades grey linear operation input colour space srgb gamma best","l":"/api-colour#greyscale"},{"t":"grayscale","d":"Alternative spelling of greyscale.","k":"grayscale greyscale","l":"/api-colour#grayscale"},{"t":"toColourspace","d":"Set the output colourspace. By default output image will be web-friendly sRGB, with additional channels interpreted as alpha channels.","k":"tocolourspace output colourspace web friendly srgb additional channels interpreted alpha","l":"/api-colour#tocolourspace"},{"t":"toColorspace","d":"Alternative spelling of toColourspace.","k":"tocolorspace tocolourspace","l":"/api-colour#tocolorspace"},{"t":"format","d":"An Object containing nested boolean values representing the available input and output formats/methods.","k":"format object nested boolean representing available input output formats methods","l":"/api-utility#format"},{"t":"interpolators","d":"An Object containing the available interpolators and their proper values","k":"interpolators object available proper","l":"/api-utility#interpolators"},{"t":"versions","d":"An Object containing the version numbers of libvips and its dependencies.","k":"versions object version numbers libvips dependencies","l":"/api-utility#versions"},{"t":"cache","d":"Gets or, when options are provided, sets the limits of libvips operation cache. Existing entries in the cache will be trimmed after any change in limits. This method always returns","k":"cache limits libvips operation existing entries trimmed change method returns","l":"/api-utility#cache"},{"t":"concurrency","d":"Gets or, when a concurrency is provided, sets the number of threads libvips should create to process each image.","k":"concurrency number threads libvips create process","l":"/api-utility#concurrency"},{"t":"queue","d":"An EventEmitter that emits a change event when a task is either","k":"queue eventemitter emits change event task","l":"/api-utility#queue"},{"t":"counters","d":"Provides access to internal task counters.","k":"counters provides access internal task","l":"/api-utility#counters"},{"t":"simd","d":"Get and set use of SIMD vector unit instructions. Requires libvips to have been compiled with liborc support.","k":"simd vector unit instructions requires libvips compiled liborc","l":"/api-utility#simd"}] \ No newline at end of file diff --git a/lib/constructor.js b/lib/constructor.js index 85f7284cb..d25091d24 100644 --- a/lib/constructor.js +++ b/lib/constructor.js @@ -216,6 +216,9 @@ const Sharp = function (input, options) { gammaOut: 0, greyscale: false, normalise: false, + claheWidth: 0, + claheHeight: 0, + claheMaxSlope: 3, brightness: 1, saturation: 1, hue: 0, diff --git a/lib/operation.js b/lib/operation.js index 7ab114732..0245958b3 100644 --- a/lib/operation.js +++ b/lib/operation.js @@ -350,6 +350,46 @@ function normalize (normalize) { return this.normalise(normalize); } +/** + * Perform contrast limiting adaptive histogram equalization (CLAHE) + * + * This will, in general, enhance the clarity of the image by bringing out + * darker details. Please read more about CLAHE here: + * https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE + * + * @param {Object} options + * @param {number} options.width - integer width of the region in pixels. + * @param {number} options.height - integer height of the region in pixels. + * @param {number} [options.maxSlope=3] - maximum value for the slope of the + * cumulative histogram. A value of 0 disables contrast limiting. Valid values + * are integers in the range 0-100 (inclusive) + * @returns {Sharp} + * @throws {Error} Invalid parameters + */ +function clahe (options) { + if (!is.plainObject(options)) { + throw is.invalidParameterError('options', 'plain object', options); + } + if (!('width' in options) || !is.integer(options.width) || options.width <= 0) { + throw is.invalidParameterError('width', 'integer above zero', options.width); + } else { + this.options.claheWidth = options.width; + } + if (!('height' in options) || !is.integer(options.height) || options.height <= 0) { + throw is.invalidParameterError('height', 'integer above zero', options.height); + } else { + this.options.claheHeight = options.height; + } + if (!is.defined(options.maxSlope)) { + this.options.claheMaxSlope = 3; + } else if (!is.integer(options.maxSlope) || options.maxSlope < 0 || options.maxSlope > 100) { + throw is.invalidParameterError('maxSlope', 'integer 0-100', options.maxSlope); + } else { + this.options.claheMaxSlope = options.maxSlope; + } + return this; +} + /** * Convolve the image with the specified kernel. * @@ -594,6 +634,7 @@ module.exports = function (Sharp) { negate, normalise, normalize, + clahe, convolve, threshold, boolean, diff --git a/package.json b/package.json index 363e95a97..81415fd9e 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,8 @@ "Leon Radley ", "alza54 ", "Jacob Smith ", - "Michael Nutt " + "Michael Nutt ", + "Brad Parham " ], "scripts": { "install": "(node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)", diff --git a/src/operations.cc b/src/operations.cc index 4cf56d4a3..79fa5c792 100644 --- a/src/operations.cc +++ b/src/operations.cc @@ -92,6 +92,13 @@ namespace sharp { return image; } + /* + * Contrast limiting adapative histogram equalization (CLAHE) + */ + VImage Clahe(VImage image, int const width, int const height, int const maxSlope) { + return image.hist_local(width, height, VImage::option()->set("max_slope", maxSlope)); + } + /* * Gamma encoding/decoding */ diff --git a/src/operations.h b/src/operations.h index 6659ff8c8..7e538a50d 100644 --- a/src/operations.h +++ b/src/operations.h @@ -35,6 +35,11 @@ namespace sharp { */ VImage Normalise(VImage image); + /* + * Contrast limiting adapative histogram equalization (CLAHE) + */ + VImage Clahe(VImage image, int const width, int const height, int const maxSlope); + /* * Gamma encoding/decoding */ diff --git a/src/pipeline.cc b/src/pipeline.cc index c329afbfa..66d0c97cb 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -345,6 +345,7 @@ class PipelineWorker : public Napi::AsyncWorker { bool const shouldApplyMedian = baton->medianSize > 0; bool const shouldComposite = !baton->composite.empty(); bool const shouldModulate = baton->brightness != 1.0 || baton->saturation != 1.0 || baton->hue != 0.0; + bool const shouldApplyClahe = baton->claheWidth != 0 && baton->claheHeight != 0; if (shouldComposite && !sharp::HasAlpha(image)) { image = sharp::EnsureAlpha(image, 1); @@ -650,6 +651,11 @@ class PipelineWorker : public Napi::AsyncWorker { image = sharp::Normalise(image); } + // Apply contrast limiting adaptive histogram equalization (CLAHE) + if (shouldApplyClahe) { + image = sharp::Clahe(image, baton->claheWidth, baton->claheHeight, baton->claheMaxSlope); + } + // Apply bitwise boolean operation between images if (baton->boolean != nullptr) { VImage booleanImage; @@ -1330,6 +1336,9 @@ Napi::Value pipeline(const Napi::CallbackInfo& info) { baton->linearB = sharp::AttrAsDouble(options, "linearB"); baton->greyscale = sharp::AttrAsBool(options, "greyscale"); baton->normalise = sharp::AttrAsBool(options, "normalise"); + baton->claheWidth = sharp::AttrAsUint32(options, "claheWidth"); + baton->claheHeight = sharp::AttrAsUint32(options, "claheHeight"); + baton->claheMaxSlope = sharp::AttrAsUint32(options, "claheMaxSlope"); baton->useExifOrientation = sharp::AttrAsBool(options, "useExifOrientation"); baton->angle = sharp::AttrAsInt32(options, "angle"); baton->rotationAngle = sharp::AttrAsDouble(options, "rotationAngle"); diff --git a/src/pipeline.h b/src/pipeline.h index 70d7ba9bf..980389250 100644 --- a/src/pipeline.h +++ b/src/pipeline.h @@ -109,6 +109,9 @@ struct PipelineBaton { double gammaOut; bool greyscale; bool normalise; + int claheWidth; + int claheHeight; + int claheMaxSlope; bool useExifOrientation; int angle; double rotationAngle; @@ -234,6 +237,9 @@ struct PipelineBaton { gamma(0.0), greyscale(false), normalise(false), + claheWidth(0), + claheHeight(0), + claheMaxSlope(3), useExifOrientation(false), angle(0), rotationAngle(0.0), diff --git a/test/fixtures/concert.jpg b/test/fixtures/concert.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7591c91990b3d31eb2911a007ebf332a84fc4c48 GIT binary patch literal 24244 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ƕ@-E@ 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/clahe-100-50-3.jpg b/test/fixtures/expected/clahe-100-50-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4c248169646a09218a6488b8b1a3b24e62fe5d7 GIT binary patch literal 15217 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ⅇS7sUhC_*?olh)|)I4GCJ%{N^ zVZPm7H*Ba@77g)12SK3ZP!KCBp2Rzq$8Hwa(D%E}oK-Z-S%&ZrbHkQF4cTlAQg}FW zuTOr!hP;0~pq2L>8+oD_71W+MB<&sHhB^C+za^Gl zl|aY(&s*x8;cVXneP#TK1tF+^HhoNGjUaVn00tDQU ztRu7ehv5#nl7xF5Cc$7~;Zf_ofR*qRA`+lme)iBR<4=2K#o zsQ>Mtyue)g>#4S52av8HyAz16FV9$ZVMd>NJM@ss9(*_q^$MMzqm;%(P!+2t*nrOn z#KSKuD<%fY=p*W%eB}o^Jbs>TpqpkVtHtN5)H9dTbISX2sh{Z++Gq%1pnNT#^t-i` N>n<)SQ literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/clahe-11-25-14.jpg b/test/fixtures/expected/clahe-11-25-14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ed0f51ab93b0a007cbd7f0b9449771bb84de452 GIT binary patch literal 28947 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/clahe-5-5-0.jpg b/test/fixtures/expected/clahe-5-5-0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83bd016d54b788555522f974faa143089cb2cbb9 GIT binary patch literal 41258 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 NlNN41bD!c$|JkvURwn=e literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/clahe-50-50-0.jpg b/test/fixtures/expected/clahe-50-50-0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f56f4b88ed3d42fb387005615abc44b427804343 GIT binary patch literal 28143 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
  • veOcRp5FzyNt_AZm&$=u&1bmCv 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 UH*qgo(v6E>TV&_tZ|PtE+1zla$p8QV literal 0 HcmV?d00001 diff --git a/test/fixtures/index.js b/test/fixtures/index.js index 1aa2dfaea..fac1701c7 100644 --- a/test/fixtures/index.js +++ b/test/fixtures/index.js @@ -121,6 +121,8 @@ module.exports = { inputV: getPath('vfile.v'), + inputJpgClahe: getPath('concert.jpg'), // public domain - https://www.flickr.com/photos/mars_/14389236779/ + testPattern: getPath('test-pattern.png'), // Path for tests requiring human inspection diff --git a/test/unit/clahe.js b/test/unit/clahe.js new file mode 100644 index 000000000..e4247e521 --- /dev/null +++ b/test/unit/clahe.js @@ -0,0 +1,139 @@ +'use strict'; + +const assert = require('assert'); + +const sharp = require('../../lib'); +const fixtures = require('../fixtures'); + +describe('Clahe', function () { + it('width 5 width 5 maxSlope 0', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 5, height: 5, maxSlope: 0 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-5-5-0.jpg'), data, { threshold: 10 }, done); + }); + }); + + it('width 5 width 5 maxSlope 5', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 5, height: 5, maxSlope: 5 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-5-5-5.jpg'), data, done); + }); + }); + + it('width 11 width 25 maxSlope 14', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 11, height: 25, maxSlope: 14 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-11-25-14.jpg'), data, done); + }); + }); + + it('width 50 width 50 maxSlope 0', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 50, height: 50, maxSlope: 0 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-50-50-0.jpg'), data, done); + }); + }); + + it('width 50 width 50 maxSlope 14', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 50, height: 50, maxSlope: 14 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-50-50-14.jpg'), data, done); + }); + }); + + it('width 100 width 50 maxSlope 3', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 100, height: 50, maxSlope: 3 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-100-50-3.jpg'), data, done); + }); + }); + + it('width 100 width 100 maxSlope 0', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 100, height: 100, maxSlope: 0 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-100-100-0.jpg'), data, done); + }); + }); + + it('invalid maxSlope', function () { + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: 100, maxSlope: -5 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: 100, maxSlope: 110 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: 100, maxSlope: 5.5 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: 100, maxSlope: 'a string' }); + }); + }); + + it('invalid width', function () { + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100.5, height: 100 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: -5, height: 100 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: true, height: 100 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 'string test', height: 100 }); + }); + }); + + it('invalid height', function () { + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: 100.5 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: -5 }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: true }); + }); + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe({ width: 100, height: 'string test' }); + }); + }); + + it('invalid options object', function () { + assert.throws(function () { + sharp(fixtures.inputJpgClahe).clahe(100, 100, 5); + }); + }); + + it('uses default maxSlope of 3', function (done) { + sharp(fixtures.inputJpgClahe) + .clahe({ width: 100, height: 50 }) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual('jpeg', info.format); + fixtures.assertSimilar(fixtures.expected('clahe-100-50-3.jpg'), data, done); + }); + }); +}); From d2c3f81046c512f29d9c51e09f3a19b00f1546a6 Mon Sep 17 00:00:00 2001 From: Brad Parham Date: Thu, 20 May 2021 10:20:50 +0200 Subject: [PATCH 2/2] Fix minor doc error in convolve() --- docs/api-operation.md | 2 +- lib/operation.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api-operation.md b/docs/api-operation.md index 4247c14aa..fb7a747e2 100644 --- a/docs/api-operation.md +++ b/docs/api-operation.md @@ -276,7 +276,7 @@ Convolve the image with the specified kernel. * `kernel` **[Object][2]** * `kernel.width` **[number][1]** width of the kernel in pixels. - * `kernel.height` **[number][1]** width of the kernel in pixels. + * `kernel.height` **[number][1]** height of the kernel in pixels. * `kernel.kernel` **[Array][7]<[number][1]>** Array of length `width*height` containing the kernel values. * `kernel.scale` **[number][1]** the scale of the kernel in pixels. (optional, default `sum`) * `kernel.offset` **[number][1]** the offset of the kernel in pixels. (optional, default `0`) diff --git a/lib/operation.js b/lib/operation.js index 0245958b3..0be23407d 100644 --- a/lib/operation.js +++ b/lib/operation.js @@ -408,7 +408,7 @@ function clahe (options) { * * @param {Object} kernel * @param {number} kernel.width - width of the kernel in pixels. - * @param {number} kernel.height - width of the kernel in pixels. + * @param {number} kernel.height - height of the kernel in pixels. * @param {Array} kernel.kernel - Array of length `width*height` containing the kernel values. * @param {number} [kernel.scale=sum] - the scale of the kernel in pixels. * @param {number} [kernel.offset=0] - the offset of the kernel in pixels.