mergechannels 0.3.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mergechannels might be problematic. Click here for more details.
- {mergechannels-0.3.0 → mergechannels-0.4.0}/Cargo.lock +2 -2
- {mergechannels-0.3.0 → mergechannels-0.4.0}/Cargo.toml +1 -1
- {mergechannels-0.3.0 → mergechannels-0.4.0}/PKG-INFO +6 -5
- {mergechannels-0.3.0 → mergechannels-0.4.0}/README.md +5 -4
- {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/__init__.py +2 -1
- {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/__init__.pyi +13 -4
- mergechannels-0.4.0/python/mergechannels/_internal.py +59 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/src/blend.rs +0 -23
- {mergechannels-0.3.0 → mergechannels-0.4.0}/src/colorize.rs +2 -1
- mergechannels-0.4.0/src/errors.rs +51 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/src/interface.rs +7 -34
- {mergechannels-0.3.0 → mergechannels-0.4.0}/src/lib.rs +1 -0
- mergechannels-0.3.0/python/mergechannels/_internal.py +0 -65
- {mergechannels-0.3.0 → mergechannels-0.4.0}/.gitattributes +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/.github/workflows/CI.yml +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/.gitignore +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/.pre-commit-config.yaml +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/LICENSE +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/16_colors.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/5_ramps.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/6_shades.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Cyan Hot.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Green Fire Blue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/HiLo.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/ICA.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/ICA2.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/ICA3.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Magenta Hot.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Orange Hot.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Rainbow RGB.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Red Hot.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Thermal.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Yellow Hot.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/blue_orange_icb.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/brgbcmyw.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/cool.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/edges.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/gem.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glasbey.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glasbey_inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glasbey_on_dark.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-inferno.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-magma.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-plasma.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-viridis.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/phase.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/physics.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/royal.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/sepia.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/smart.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/thal.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/thallium.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/unionjack.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-BMR.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-CGY.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-RMB.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-YGC.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/BOP blue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/BOP orange.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/BOP purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Blue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Bordeaux.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Forest.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Red.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/LICENSE +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/NOTICE +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/OPF fresh.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/OPF orange.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/OPF purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/Turbo.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/16_colors.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3-3-2 RGB.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-BMR.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-CGY.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-RMB.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-YGC.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/5_ramps.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/6_shades.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/BOP blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/BOP orange.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/BOP purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Black.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Cyan Hot.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Fire.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.25 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.25.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.50 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.50.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.75 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.75.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.00 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.25 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.25.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.50 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.50.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.75 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.75.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=2.00 inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=2.00.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Green Fire Blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Green Hot.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/HiLo.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Bordeaux.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Forest.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Red.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/ICA.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/ICA2.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/ICA3.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ice.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Black.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Black.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Magenta Hot.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OIMB1.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OIMB2.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OIMB3.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OPF fresh.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OPF orange.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OPF purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Orange Hot.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Parabolic RGB.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Green-Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Ink Green-Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Ink Mint-Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Ink Yellow-Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Mint-Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Yellow-Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Green-Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Ink Green-Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Ink Mint-Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Ink Yellow-Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Mint-Cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Yellow-Cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop blue inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cherry inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cherry.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cyan inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop green inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop lavender inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop magenta inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop mint inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop mint.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop purple inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop purple.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop red inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop red.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop yellow inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Magenta.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Blue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Red.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Rainbow RGB.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Red Hot.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Red%Green.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Red.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Spectrum Parabolic Ramp.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Spectrum.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Thermal.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Turbo.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Yellow Hot.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Yellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterBlue.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterCyan.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterGreen.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterOrange.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterRed.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterYellow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/blue_orange_icb.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/brgbcmyw.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/cool.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/edges.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/gem.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glasbey.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glasbey_inverted.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glasbey_on_dark.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glow.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-inferno.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-magma.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-plasma.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-viridis.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/phase.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/physics.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/royal.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/sepia.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/smart.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/thal.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/thallium.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/unionjack.txt +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Black.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.25 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.25.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.50 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.50.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.75 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.75.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.00 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.25 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.25.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.50 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.50.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.75 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.75.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=2.00 inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=2.00.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Black.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Black.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Parabolic RGB.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Green-Magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Ink Green-Magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Ink Mint-Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Ink Yellow-Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Mint-Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Yellow-Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Green-Magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Ink Green-Magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Ink Mint-Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Ink Yellow-Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Mint-Cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Yellow-Cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop blue inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop blue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cherry inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cherry.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cyan inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop green inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop lavender inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop magenta inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop mint inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop mint.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop purple inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop purple.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop red inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop red.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop yellow inverted.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Blue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Magenta.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Blue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Green.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Red.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Yellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/OIMB1.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/OIMB2.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/OIMB3.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterBlue.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterCyan.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterGreen.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterOrange.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterRed.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterYellow.lut +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/pyproject.toml +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/pytests/test_colorize.py +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/_blending.py +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/_luts.py +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/py.typed +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/ruff.toml +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/scripts/convert_luts_to_txt.ijm +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/scripts/populate_luts.py +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/src/cmaps.rs +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/src/normalize.rs +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/tox.ini +0 -0
- {mergechannels-0.3.0 → mergechannels-0.4.0}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This file is automatically @generated by Cargo.
|
|
2
2
|
# It is not intended for manual editing.
|
|
3
|
-
version =
|
|
3
|
+
version = 3
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
6
|
name = "autocfg"
|
|
@@ -59,7 +59,7 @@ dependencies = [
|
|
|
59
59
|
|
|
60
60
|
[[package]]
|
|
61
61
|
name = "mergechannels"
|
|
62
|
-
version = "0.
|
|
62
|
+
version = "0.4.0"
|
|
63
63
|
dependencies = [
|
|
64
64
|
"lazy_static",
|
|
65
65
|
"ndarray",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mergechannels
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -50,6 +50,7 @@ pip install git+https://github.com/zacswider/mergechannels.git
|
|
|
50
50
|
|
|
51
51
|
```python
|
|
52
52
|
from skimage import data
|
|
53
|
+
import matplotlib.pyplot as plt
|
|
53
54
|
import mergechannels as mc
|
|
54
55
|
|
|
55
56
|
img = data.camera()
|
|
@@ -116,10 +117,10 @@ b.imshow(
|
|
|
116
117
|
channels,
|
|
117
118
|
colormaps,
|
|
118
119
|
blending='min',
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
),
|
|
120
|
+
percentiles=[(
|
|
121
|
+
1, # bottom 1% of pixels set to black point
|
|
122
|
+
97, # top 3% of pixels set to white point
|
|
123
|
+
)]*len(channels),
|
|
123
124
|
),
|
|
124
125
|
)
|
|
125
126
|
fig.tight_layout()
|
|
@@ -28,6 +28,7 @@ pip install git+https://github.com/zacswider/mergechannels.git
|
|
|
28
28
|
|
|
29
29
|
```python
|
|
30
30
|
from skimage import data
|
|
31
|
+
import matplotlib.pyplot as plt
|
|
31
32
|
import mergechannels as mc
|
|
32
33
|
|
|
33
34
|
img = data.camera()
|
|
@@ -94,10 +95,10 @@ b.imshow(
|
|
|
94
95
|
channels,
|
|
95
96
|
colormaps,
|
|
96
97
|
blending='min',
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
),
|
|
98
|
+
percentiles=[(
|
|
99
|
+
1, # bottom 1% of pixels set to black point
|
|
100
|
+
97, # top 3% of pixels set to white point
|
|
101
|
+
)]*len(channels),
|
|
101
102
|
),
|
|
102
103
|
)
|
|
103
104
|
fig.tight_layout()
|
|
@@ -3,11 +3,12 @@ from .mergechannels import ( # type: ignore
|
|
|
3
3
|
dispatch_single_channel,
|
|
4
4
|
dispatch_multi_channel,
|
|
5
5
|
)
|
|
6
|
-
from ._internal import merge
|
|
6
|
+
from ._internal import merge, apply_color_map
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
__all__ = [
|
|
10
10
|
'dispatch_single_channel',
|
|
11
11
|
'dispatch_multi_channel',
|
|
12
12
|
'merge',
|
|
13
|
+
'apply_color_map',
|
|
13
14
|
]
|
|
@@ -6,11 +6,20 @@ from python.mergechannels._blending import BLENDING_OPTIONS
|
|
|
6
6
|
from python.mergechannels._luts import COLORMAPS
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
def apply_color_map(
|
|
10
|
+
arr: np.ndarray,
|
|
11
|
+
color: COLORMAPS,
|
|
12
|
+
percentiles: tuple[float, float] | None = None,
|
|
13
|
+
saturation_limits: tuple[float, float] | None = None,
|
|
14
|
+
) -> np.ndarray:
|
|
15
|
+
...
|
|
16
|
+
|
|
9
17
|
def merge(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
arrs: Sequence[np.ndarray],
|
|
19
|
+
colors: Sequence[COLORMAPS],
|
|
20
|
+
blending: BLENDING_OPTIONS = 'max',
|
|
21
|
+
percentiles: tuple[float, float] | Sequence[tuple[float, float]] | None = None,
|
|
22
|
+
saturation_limits: tuple[float, float] | Sequence[tuple[float, float]] | None = None,
|
|
14
23
|
) -> np.ndarray:
|
|
15
24
|
...
|
|
16
25
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Sequence,
|
|
3
|
+
Union,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
from mergechannels import (
|
|
9
|
+
dispatch_single_channel,
|
|
10
|
+
dispatch_multi_channel,
|
|
11
|
+
)
|
|
12
|
+
from ._luts import COLORMAPS
|
|
13
|
+
from ._blending import BLENDING_OPTIONS
|
|
14
|
+
|
|
15
|
+
def apply_color_map(
|
|
16
|
+
arr: np.ndarray,
|
|
17
|
+
color: COLORMAPS,
|
|
18
|
+
percentiles: Union[tuple[float, float], None] = None,
|
|
19
|
+
saturation_limits: Union[tuple[float, float], None] = None,
|
|
20
|
+
) -> np.ndarray:
|
|
21
|
+
'''
|
|
22
|
+
apply a color map to an array
|
|
23
|
+
'''
|
|
24
|
+
if saturation_limits is None:
|
|
25
|
+
if percentiles is None:
|
|
26
|
+
percentiles = (1.1, 99.9)
|
|
27
|
+
low, high = np.percentile(arr, percentiles)
|
|
28
|
+
saturation_limits = (low, high)
|
|
29
|
+
|
|
30
|
+
return dispatch_single_channel(
|
|
31
|
+
array_reference=arr,
|
|
32
|
+
cmap_name=color,
|
|
33
|
+
limits=saturation_limits,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def merge(
|
|
38
|
+
arrs: Sequence[np.ndarray],
|
|
39
|
+
colors: Sequence[COLORMAPS],
|
|
40
|
+
blending: BLENDING_OPTIONS = 'max',
|
|
41
|
+
percentiles: Union[Sequence[tuple[float, float]], None] = None,
|
|
42
|
+
saturation_limits: Union[Sequence[tuple[float, float]], None] = None,
|
|
43
|
+
) -> np.ndarray:
|
|
44
|
+
'''
|
|
45
|
+
apply cmaps to arrays and blend the colors
|
|
46
|
+
'''
|
|
47
|
+
if saturation_limits is None:
|
|
48
|
+
if percentiles is None:
|
|
49
|
+
percentiles = [(1.1, 99.9)] * len(arrs)
|
|
50
|
+
saturation_limits = tuple(
|
|
51
|
+
np.percentile(arr, ch_percentiles)
|
|
52
|
+
for arr, ch_percentiles in zip(arrs, percentiles) # type: ignore
|
|
53
|
+
)
|
|
54
|
+
return dispatch_multi_channel(
|
|
55
|
+
array_references=arrs,
|
|
56
|
+
cmap_names=colors,
|
|
57
|
+
blending=blending,
|
|
58
|
+
limits=saturation_limits, # type: ignore
|
|
59
|
+
)
|
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
use smallvec::SmallVec;
|
|
2
|
-
use std::error::Error;
|
|
3
|
-
use std::fmt;
|
|
4
2
|
|
|
5
3
|
pub const MAX_N_CH: usize = 5;
|
|
6
4
|
|
|
7
5
|
pub type BlendFn = fn(&SmallVec<[[u8; 3]; 5]>) -> [u8; 3];
|
|
8
6
|
|
|
9
|
-
#[derive(Debug)]
|
|
10
|
-
pub enum MergeError {
|
|
11
|
-
InvalidBlendingMode(String),
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
impl fmt::Display for MergeError {
|
|
15
|
-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
16
|
-
match self {
|
|
17
|
-
MergeError::InvalidBlendingMode(mode) => {
|
|
18
|
-
write!(
|
|
19
|
-
f,
|
|
20
|
-
"Invalid blending mode: `{}`. Valid modes are 'max', 'sum', 'min', and 'mean'.",
|
|
21
|
-
mode
|
|
22
|
-
)
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
impl Error for MergeError {}
|
|
29
|
-
|
|
30
7
|
pub fn max_blending(px_vals: &SmallVec<[[u8; 3]; 5]>) -> [u8; 3] {
|
|
31
8
|
let mut r: u8 = 0;
|
|
32
9
|
let mut g: u8 = 0;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
use pyo3::exceptions::PyValueError;
|
|
2
|
+
use pyo3::prelude::*;
|
|
3
|
+
use std::error::Error;
|
|
4
|
+
|
|
5
|
+
#[derive(Debug)]
|
|
6
|
+
pub enum DispatchError {
|
|
7
|
+
UnsupportedDataType(String),
|
|
8
|
+
UnsupportedNumberOfDimensions(usize),
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
impl std::fmt::Display for DispatchError {
|
|
12
|
+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
13
|
+
match self {
|
|
14
|
+
DispatchError::UnsupportedDataType(dtype) => {
|
|
15
|
+
write!(f, "Received unsupported dtype: {}", dtype)
|
|
16
|
+
}
|
|
17
|
+
DispatchError::UnsupportedNumberOfDimensions(ndim) => {
|
|
18
|
+
write!(f, "Received unsupported number of dimensions: {}", ndim)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
impl std::error::Error for DispatchError {}
|
|
25
|
+
|
|
26
|
+
impl From<DispatchError> for PyErr {
|
|
27
|
+
fn from(err: DispatchError) -> Self {
|
|
28
|
+
PyValueError::new_err(err.to_string())
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#[derive(Debug)]
|
|
33
|
+
pub enum MergeError {
|
|
34
|
+
InvalidBlendingMode(String),
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
impl std::fmt::Display for MergeError {
|
|
38
|
+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
39
|
+
match self {
|
|
40
|
+
MergeError::InvalidBlendingMode(mode) => {
|
|
41
|
+
write!(
|
|
42
|
+
f,
|
|
43
|
+
"Invalid blending mode: `{}`. Valid modes are 'max', 'sum', 'min', and 'mean'.",
|
|
44
|
+
mode
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
impl Error for MergeError {}
|
|
@@ -1,43 +1,16 @@
|
|
|
1
1
|
use crate::cmaps;
|
|
2
2
|
use crate::colorize;
|
|
3
|
+
use crate::errors;
|
|
3
4
|
use ndarray::ArrayView2;
|
|
4
5
|
use ndarray::ArrayView3;
|
|
5
6
|
use numpy::{
|
|
6
7
|
IntoPyArray, PyArrayDyn, PyReadonlyArray2, PyReadonlyArray3, PyUntypedArray,
|
|
7
8
|
PyUntypedArrayMethods,
|
|
8
9
|
};
|
|
9
|
-
use pyo3::exceptions::PyValueError;
|
|
10
10
|
use pyo3::prelude::*;
|
|
11
11
|
use pyo3::types::PyAny;
|
|
12
12
|
use pyo3::{Bound, Python};
|
|
13
13
|
|
|
14
|
-
#[derive(Debug)]
|
|
15
|
-
pub enum DispatchError {
|
|
16
|
-
UnsupportedDataType(String),
|
|
17
|
-
UnsupportedNumberOfDimensions(usize),
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
impl std::fmt::Display for DispatchError {
|
|
21
|
-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
22
|
-
match self {
|
|
23
|
-
DispatchError::UnsupportedDataType(dtype) => {
|
|
24
|
-
write!(f, "Received unsupported dtype: {}", dtype)
|
|
25
|
-
}
|
|
26
|
-
DispatchError::UnsupportedNumberOfDimensions(ndim) => {
|
|
27
|
-
write!(f, "Received unsupported number of dimensions: {}", ndim)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
impl std::error::Error for DispatchError {}
|
|
34
|
-
|
|
35
|
-
impl From<DispatchError> for PyErr {
|
|
36
|
-
fn from(err: DispatchError) -> Self {
|
|
37
|
-
PyValueError::new_err(err.to_string())
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
14
|
#[pyfunction]
|
|
42
15
|
#[pyo3(name = "dispatch_single_channel")]
|
|
43
16
|
pub fn dispatch_single_channel_py<'py>(
|
|
@@ -65,7 +38,7 @@ pub fn dispatch_single_channel_py<'py>(
|
|
|
65
38
|
let rgb = colorize::colorize_stack_8bit(arr, cmap, limits);
|
|
66
39
|
Ok(rgb.into_dyn().into_pyarray(py))
|
|
67
40
|
}
|
|
68
|
-
_ => Err(DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
|
|
41
|
+
_ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
|
|
69
42
|
},
|
|
70
43
|
"uint16" => match ndim {
|
|
71
44
|
2 => {
|
|
@@ -82,9 +55,9 @@ pub fn dispatch_single_channel_py<'py>(
|
|
|
82
55
|
let rgb = colorize::colorize_stack_16bit(arr, cmap, limits);
|
|
83
56
|
Ok(rgb.into_dyn().into_pyarray(py))
|
|
84
57
|
}
|
|
85
|
-
_ => Err(DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
|
|
58
|
+
_ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
|
|
86
59
|
},
|
|
87
|
-
_ => Err(DispatchError::UnsupportedDataType(dtype).into()),
|
|
60
|
+
_ => Err(errors::DispatchError::UnsupportedDataType(dtype).into()),
|
|
88
61
|
}
|
|
89
62
|
}
|
|
90
63
|
|
|
@@ -215,7 +188,7 @@ pub fn dispatch_multi_channel_py<'py>(
|
|
|
215
188
|
let rgb = colorize::merge_3d_u8(arrs, cmaps, blending, limits).unwrap();
|
|
216
189
|
Ok(rgb.into_dyn().into_pyarray(py))
|
|
217
190
|
}
|
|
218
|
-
_ => Err(DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
|
|
191
|
+
_ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
|
|
219
192
|
},
|
|
220
193
|
"uint16" => match ndim {
|
|
221
194
|
2 => {
|
|
@@ -232,8 +205,8 @@ pub fn dispatch_multi_channel_py<'py>(
|
|
|
232
205
|
let rgb = colorize::merge_3d_u16(arrs, cmaps, blending, limits).unwrap();
|
|
233
206
|
Ok(rgb.into_dyn().into_pyarray(py))
|
|
234
207
|
}
|
|
235
|
-
_ => Err(DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
|
|
208
|
+
_ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
|
|
236
209
|
},
|
|
237
|
-
_ => Err(DispatchError::UnsupportedDataType(dtype.clone()).into()),
|
|
210
|
+
_ => Err(errors::DispatchError::UnsupportedDataType(dtype.clone()).into()),
|
|
238
211
|
}
|
|
239
212
|
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
from typing import Sequence
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
|
|
5
|
-
from mergechannels import (
|
|
6
|
-
dispatch_single_channel,
|
|
7
|
-
dispatch_multi_channel,
|
|
8
|
-
)
|
|
9
|
-
from ._luts import COLORMAPS
|
|
10
|
-
from ._blending import BLENDING_OPTIONS
|
|
11
|
-
|
|
12
|
-
def merge(
|
|
13
|
-
arrs: Sequence[np.ndarray],
|
|
14
|
-
colors: Sequence[COLORMAPS],
|
|
15
|
-
blending: BLENDING_OPTIONS = 'max',
|
|
16
|
-
saturation_limits: tuple[float, float] = (0.011, 0.999),
|
|
17
|
-
) -> np.ndarray:
|
|
18
|
-
'''
|
|
19
|
-
apply cmaps to arrays and blend the colors
|
|
20
|
-
'''
|
|
21
|
-
# region validation
|
|
22
|
-
n_arrs = len(arrs)
|
|
23
|
-
n_colors = len(colors)
|
|
24
|
-
if not n_arrs == n_colors and n_arrs > 0:
|
|
25
|
-
raise ValueError(
|
|
26
|
-
'Expected an equal number of arrays to colorize and colormap names to apply. '
|
|
27
|
-
f'Got {n_arrs} arrays and {n_colors} colors'
|
|
28
|
-
)
|
|
29
|
-
arr_shapes = [arr.shape for arr in arrs]
|
|
30
|
-
if not len(set(arr_shapes)) == 1:
|
|
31
|
-
raise ValueError(
|
|
32
|
-
f'Expected every array to have the same shape, got {arr_shapes}'
|
|
33
|
-
)
|
|
34
|
-
if len(arr_shapes[0]) not in (2, 3):
|
|
35
|
-
raise ValueError(
|
|
36
|
-
f'Expected every array to be 2D or 3D, got {arr_shapes[0]}'
|
|
37
|
-
)
|
|
38
|
-
arr_dtypes = [arr.dtype for arr in arrs]
|
|
39
|
-
if not len(set(arr_dtypes)) == 1:
|
|
40
|
-
raise ValueError(
|
|
41
|
-
f'Expected every array to have the same dtype, got {arr_dtypes}'
|
|
42
|
-
)
|
|
43
|
-
# endregion
|
|
44
|
-
if n_arrs == 1:
|
|
45
|
-
if arrs[0].dtype == 'uint8':
|
|
46
|
-
limits = (0, 255)
|
|
47
|
-
else:
|
|
48
|
-
low, high = np.percentile(arrs[0], np.array(saturation_limits) * 100)
|
|
49
|
-
limits = (low, high)
|
|
50
|
-
return dispatch_single_channel(
|
|
51
|
-
array_reference=arrs[0],
|
|
52
|
-
cmap_name=colors[0],
|
|
53
|
-
limits=limits,
|
|
54
|
-
)
|
|
55
|
-
else:
|
|
56
|
-
if all(arr.dtype == 'uint8' for arr in arrs):
|
|
57
|
-
limits = (0, 255)
|
|
58
|
-
else:
|
|
59
|
-
limits = tuple(np.percentile(arr, np.array(saturation_limits) * 100) for arr in arrs)
|
|
60
|
-
return dispatch_multi_channel(
|
|
61
|
-
array_references=arrs,
|
|
62
|
-
cmap_names=colors,
|
|
63
|
-
blending=blending,
|
|
64
|
-
limits=limits, # type: ignore
|
|
65
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|