Python modules to work with large multiresolution images.

Overview

Large Image

Build Status codecov.io License doi-badge pypi-badge

Python modules to work with large, multiresolution images.

Large Image is developed and maintained by the Data & Analytics group at Kitware, Inc. for processing large geospatial and medical images. This provides the backbone for several of our image analysis platforms including Resonant GeoData, HistomicsUI, and the Digital Slide Archive.

Highlights

  • Tile serving made easy
  • Supports a wide variety of geospatial and medical image formats
  • Convert to tiled Cloud Optimized (Geo)Tiffs (also known as pyramidal tiffs)
  • Python methods for retiling or accessing regions of images efficiently
  • Options for restyling tiles, such as dynamically applying color and band transform

Installation

In addition to installing the large-image package, you'll need at least one tile source (a large-image-source-xxx package). You can install everything from the main project with one of these commands:

Pip

Install all tile sources on linux:

pip install large-image[all] --find-links https://girder.github.io/large_image_wheels

Install all tile sources and all Girder plugins on linux:

pip install large-image[all] girder-large-image-annotation[tasks] --find-links https://girder.github.io/large_image_wheels

Conda

Conda makes dependency management a bit easier if not on Linux. Some of the source modules are available on conda-forge. You can install the following:

conda install -c conda-forge large-image-source-gdal
conda install -c conda-forge large-image-source-tiff
conda install -c conda-forge large-image-converter

Modules

Large Image consists of several Python modules designed to work together. These include:

  • large-image: The core module. You can specify extras_require of the name of any tile source included with this repository, sources for all of the tile sources in the repository, a specific source name (e.g., tiff), memcached for using memcached for tile caching, converter to include the converter module, colormap for using matplotlib for named color palettes used in styles, or all for all of the tile sources, memcached, the converter module, and better color map support.

  • large-image-converter: A utility for using pyvips and other libraries to convert images into pyramidal tiff files that can be read efficiently by large_image. You can specify extras_require of jp2k to include modules to allow output to JPEG2000 compression, sources to include all sources, and stats to include modules to allow computing compression noise statistics.

  • Tile sources:

    • large-image-source-tiff: A tile source for reading pyramidal tiff files in common compression formats.
    • large-image-source-openslide: A tile source using the OpenSlide library. This works with svs, ndpi, Mirax, tiff, vms, and other file formats.
    • large-image-source-ometiff: A tile source using the tiff library that can handle some multi-frame OMETiff files.
    • large-image-source-pil: A tile source for small images via the Python Imaging Library (Pillow).
    • large-image-source-gdal: A tile source for reading geotiff files via GDAL. This handles source data with more complex transforms than the mapnik tile source.
    • large-image-source-mapnik: A tile source for reading geotiff and netcdf files via Mapnik and GDAL. This handles more vector issues than the gdal tile source.
    • large-image-source-openjpeg: A tile source using the Glymur library to read jp2 (JPEG 2000) files.
    • large-image-source-nd2: A tile source for reading nd2 (NIS Element) images.
    • large-image-source-bioformats: A tile source for reading any file handled by the Java Bioformats library.
    • large-image-source-deepzoom: A tile source for reading Deepzoom tiles.
    • large-image-source-test: A tile source that generates test tiles, including a simple fractal pattern. Useful for testing extreme zoom levels.
    • large-image-source-dummy: A tile source that does nothing.

    Most tile sources can be used with girder-large-image. You can specific an extras_require of girder to include girder-large-image with the source.

  • As a Girder plugin:

    • girder-large-image: Large Image as a Girder 3.x plugin. You can specify extras_require of tasks to install a Girder Worker task that can convert otherwise unreadable images to pyramidal tiff files.
    • girder-large-image-annotation: Annotations for large images as a Girder 3.x plugin.
    • large-image-tasks: A utility for running the converter via Girder Worker. You can specify an extras_require of girder to include modules needed to work with the Girder remote worker or worker to include modules needed on the remote side of the Girder remote worker. If neither is specified, some conversion tasks can be run using Girder local jobs.

Developer Installation

To install all packages from source, clone the repository:

git clone https://github.com/girder/large_image.git
cd large_image

Install all packages and dependencies:

pip install -e . -r requirements-dev.txt

If you aren't developing with Girder 3, you can skip installing those components. Use requirements-dev-core.txt instead of requirements-dev.txt:

pip install -e . -r requirements-dev-core.txt

Tile source prerequisites

Many tile sources have complex prerequisites. These can be installed directly using your system's package manager or from some prebuilt Python wheels for Linux. The prebuilt wheels are not official packages, but they can be used by instructing pip to use them by preference:

pip install -e . -r requirements-dev.txt --find-links https://girder.github.io/large_image_wheels
Comments
  • AttributeError: module 'large_image' has no attribute 'getTileSource'

    AttributeError: module 'large_image' has no attribute 'getTileSource'

    I tried extracting the patches using your code. However, I received the following error message:

    AttributeError: module 'large_image' has no attribute 'getTileSource'

    Do you have any idea why this happens? Thank you!

    opened by bryanwong17 31
  • Update to Girder 2.0

    Update to Girder 2.0

    This is still kind of a WIP. For one, I have taken out all of the annotation code. WIth the annotation work from @manthey on GeoJS, I'm not sure it worth going through the effort to update it.

    The client test is also failing on travis, and I'm at a loss for why. It passes for me locally, but on travis, there is an error:

    ERROR: ReferenceError: Can't find variable: webpackJsonp
    

    The build takes quite a while to complete so it is combersome to debug. It looks like a problem with the webpack bundle, so I'm wondering if @sebastienbarre or @zachmullen have any ideas?

    opened by jbeezley 20
  • Add a tile size parameter for TileSource.tileIterator

    Add a tile size parameter for TileSource.tileIterator

    This is to provide the ability to use a custom tile size when iterating through a whole slide image at a desired magnification.

    Example usage:

    ts = large_image.getTileSource(wsi_path)
    for tile in ts.tileIterator(scale={'magnification': 20}, 
                                tile_size=(tile_height, tile_width)):
        pass
    
    opened by cdeepakroy 19
  • Refactor the tile sources so that they can be used without Girder.

    Refactor the tile sources so that they can be used without Girder.

    Assuming you have the prerequisites, the tilesource can be used without girder. To facilitate importing it from the source tree, when server is imported without girder, it will still work (though, naturally, you can't import server.models or server.rest).

    The plugin_tests/girderless_test.py file shows some access of file sources without girder.

    opened by manthey 17
  • Automatically import svs and ptif files.

    Automatically import svs and ptif files.

    Any file that has a TIFF mime type or a file extension that is one of ptif, tif, tiff, svs is checked. If it can be used as a large_image without a conversion job, it is so marked.

    This resolves issue #65.

    opened by manthey 15
  • Tile iterator

    Tile iterator

    Added a tile iterator. This doesn't depend on Girder. To use, get a tile source, then, for example,

    for tile in tilesource.tileIterator(magnification=20, format=TILE_FORMAT_NUMPY):
      Tile = tile['tile'][:, :, :3]  # three components only
      # process the Tile
    

    You can use many criteria for determining which tiles you get from the image (magnification, level, size of pixels, etc.). See the method documentation of tileIterator in tilesource/base.py. Currently, the tiles that you get from the iterator can optionally be scaled.

    This should be fully functional (it is used by getRegion), but needs more tests and probably more documentation.

    Report magnification and pixel size of images.

    Changed init to allow flake8 to process it (mostly).

    opened by manthey 14
  • Failing to pull Girder Tile Source - CCIPD lab project

    Failing to pull Girder Tile Source - CCIPD lab project

    Here is sample code which is not working:

    import girder_large_image
    import girder_client
    import large_image
    import json
    gc = girder_client.GirderClient(apiUrl='http://localhost:8080/api/v2')
    gc.authenticate(username='admin', password='password')
    item = gc.getItem('6204344429b98b9caa33c7ec')
    print(item)
    ts = girder_large_image.girder_tilesource.GirderTileSource(item)
    ts_metadata = ts.getMetadata()
    print(json.dumps(ts_metadata, indent=2))
    is_wsi = ts_metadata['magnification'] is not None
    print("WSI ", is_wsi)
    print(ts.getSingleTile())
    

    We used this svs file: https://styx.neurology.emory.edu/girder/#item/60df5a4c68f4fe34fc7e92d2

    Here is the printout and error message:

    {'_id': '6204344429b98b9caa33c7ec', '_modelType': 'item', 'baseParentId': '61dd35a75ef164ec2f932d35', 'baseParentType': 'collection', 'created': '2022-02-09T21:38:12.879000+00:00', 'creatorId': '61dd3564bd467a0ab2a0244c', 'description': '', 'folderId': '6204340929b98b9caa33c7ea', 'largeImage': {'fileId': '6204344429b98b9caa33c7ed', 'sourceName': 'openslide'}, 'meta': {}, 'name': 'girder-test.svs', 'size': 134394101, 'updated': '2022-02-09T21:38:12.879000+00:00'}

    Using python for large_image caching

    None

    { "levels": null, "sizeX": null, "sizeY": null, "tileWidth": null, "tileHeight": null, "magnification": null, "mm_x": null, "mm_y": null }

    WSI False

    Traceback (most recent call last):
      File "/Users/varunverma/Desktop/playground/test.py", line 23, in <module>
        print(ts.getSingleTile())
      File "/usr/local/lib/python3.9/site-packages/large_image/tilesource/base.py", line 2241, in getSingleTile
        return next(self.tileIterator(*args, kwargs), None)
      File "/usr/local/lib/python3.9/site-packages/large_image/tilesource/base.py", line 2202, in tileIterator
        iterInfo = self._tileIteratorInfo(format=iterFormat, resample=resample,
      File "/usr/local/lib/python3.9/site-packages/large_image/tilesource/base.py", line 467, in _tileIteratorInfo
        magLevel = self.getLevelForMagnification(magArgs)
      File "/usr/local/lib/python3.9/site-packages/large_image/tilesource/base.py", line 2010, in getLevelForMagnification
        mag = self.getMagnificationForLevel()
      File "/usr/local/lib/python3.9/site-packages/large_image/tilesource/base.py", line 1982, in getMagnificationForLevel
        if mag.get('level') == self.levels - 1:
    
    TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
    
    opened by VarunVerma7 13
  • Is there a way to draw concentric polygons/circles using large image?

    Is there a way to draw concentric polygons/circles using large image?

    Hi,

    I was looking at the annotations documentation here: https://github.com/girder/large_image/blob/master/docs/annotations.md and was wondering if we could create a single polygon or a circle that has a polygon/circle within it. I ask because the nature of the annotations seems that if you put the points into the points array, a line will be drawn connecting the inner circle/polygon to the outer circle/polygon, like this: image

    From documentation the points are specified like this: "points": [
    [5,6,0],
    [-17,6,0], [56,-45,6] ] But is there any special way for it to support concentric polygons without a connecting line?

    opened by rwtam121 13
  • Packer based generation of girder + large_image docker image

    Packer based generation of girder + large_image docker image

    This still requires more documentation, but in principal is a minimum viable feature.

    If you want to try it out install Packer and cd to devops/packer/ and run packer build large_image.json this will require that ansible is installed in your environment. It should build a docker image with girder & large_image with stock libtiff on an ubuntu-16.04 image. Once build you should be able to test it out with:

    docker run -it --net=host --rm large_image/large_image:latest
    

    You will need a local instance of mongo running. Once girder is up you will have to create a user, assetstore, enable the plugins and rebuild.

    opened by kotfic 13
  • Issue with GetRegion returning zero values.

    Issue with GetRegion returning zero values.

    I am using large_image with matplotlib to interactively record rectangles that match the size of the highest resolution tile based on a lower resolution tile. However when I use GetRegion at the lower magnification the returned image has blank pixels.

    The input format is .svs and I am outputting to numpy for visualization in matplotlib.

    im_low_res, er = image.getRegion( scale=image.getMagnificationForLevel(level=2), format=large_image.tilesource.TILE_FORMAT_NUMPY )

    Here is a screen shot of what I am seeing

    Screen Shot 2019-11-01 at 8 46 03 PM

    I also plotted just the first three components of RGBA,

    Screen Shot 2019-11-01 at 9 02 19 PM

    When I open in QuPath the metadata says its a rgb file and not cmyk/rgba. could that explain it ? maybe it's not reading it in the proper format?

    I was also able to open the image directly with openslide-python and get a thumbnail without the missing values. when converted to numpy in openslide, it returns an rgb array that is correctly populated..

    Is there some kind of encoding step that might be missing.

    opened by kayarre 11
  • Cache sources based on available memory.

    Cache sources based on available memory.

    Cache getTile and getThumbnail as well. These caches are per instance of a tile source; they really should be a single cache for all.

    Similarly, the tile source class cache should be one cache, not one cache per class.

    Switched to Pillow 3.1.2.

    Added a change to the geojs viewer to (when geojs is updated) not request tiles we know don't exist in certain circumstances.

    TODO:

    • [x] Testing
    • [x] Use single caches rather than per-instance and per-class caches
    opened by manthey 11
  • Write a test to generate n random tiles with m dimensions

    Write a test to generate n random tiles with m dimensions

    The following variables can be adjusted for this test:

    possible_axes = {
        'x': [1, 10],
        'y': [1, 10],
        'c': [1, 100],
        'z': [1, 100],
        't': [1, 100],
        'p': [1, 100],
        'q': [1, 100],
        's': [3, 3],
    }
    
    include_axes = {
        'c': False,
        'z': False,
        't': False,
        'p': False,
        'q': False,
    }
    
    possible_data_ranges = [
        [0, 1],
        [0, 255],
        [0, 65535],
        [-1, 1]
    ]
    
    max_tile_size = 100
    tile_overlap_ratio = 0.5
    

    More axes and higher numbers will take more computation time. The test succeeds if all extra axes (c, z, t, p, q) are disabled. Enabling any fourth axis after x, y, and s breaks the test because the image source is currently implemented with vips. The goal is to add implementation to the image source such that it can accept arbitrary axes and pass this test.

    opened by annehaley 0
  • Improved image creation

    Improved image creation

    Currently, the vips source adds a new method that, when used with addTile, can take a series of images (PIL or numpy or vips) and output a file in a few formats. The addTile method species where in the single frame image the new data is located and allows for masking the data as it is added.

    We want to expand this capability:

    • [ ] Support arbitrary data axes to have multiple frames. The base image can have different sample depths (currently L, LA, RGB, RGBA, but it would be nice to support arbitrary hyperspectal sample channels OR indexed data). Frames could be arbitrary OR could have specific axes: C (channel, which should have channel names as optional metadata), Z (vertical Z stack), T (time), XY (also called P or P and Q for physical sample position). We don't currently handle other axes in any source, but having arbitrary axes would make reading things like netcdf more obvious.
    • [ ] Support arbitrary numpy dtypes for the data
    • [ ] Support a variety of inputs for data and masks: PIL, numpy arrays, vips images
    • [ ] Set a variety of metadata: pixel scale, image description, channel names.
    • [ ] Support padding or cropping the data to different sizes so that the output is constrained. If padding, we might want to specify a default color for all channels.
    • [ ] Add data at different scales (e.g., a lower resolutions from the base). This could do a nearest neighbor mapping to the base resolution, but we might want to eventually add an option for how the data is scaled. The general form of this would be to accept an affine transform.
    • [ ] For geospatial data, specify a base projection and corner locations in some manner, and add an optional different projection when adding data.
    • [ ] Have entry-point based file output plugins for this.
    • [ ] Add associated images
    • [ ] Add arbitrary additional metadata.
    • [ ] Allow new images to have a optional path so that they could be created over multiple program runs. This would require having a close method (preferably implicit) that saves enough state to resume image creation.

    One method of storing this data internally would be a hdf5 file via the h5py module. We could make a new hdf5 source (limited to just files we create) to allow reading the data as it is being created.

    We always want the property that the last data added "wins", overwriting any existing data at its location. If the added data has a mask, it should only change the appropriate locations. If it has an alpha channel, this should be applied as it is added. As part of this, we may want to have a default alpha channel that is transparent until any data is added. Note that if data is added to the same location multiple times with alpha values that are 0 < a < 1, we need to make sure that they mix in the expected proportion.

    As a starting point, we should create tests that will exercise the existing features and then expand the tests as we add features.

    opened by manthey 3
  • Annotation list checkboxes

    Annotation list checkboxes

    In the Girder interface, for annotation lists in items, it would be convenient to have check boxes on each row and a top-level check box to check/uncheck all and then have the top-level controls (permissions, delete, download) apply only to those annotations that are checked. This would make it easier to delete multiple but not all annotations at a time, which would be useful in some of the guided labelling work.

    opened by manthey 0
  • Rasterio source

    Rasterio source

    Fix #898

    at the moment this is just to show that I'm moving forward.

    I think I still missed some very specific tricks with projections but we are getting there. If you want to have a look be my guest, I still need to test it but that's complicated in my environment.

    Note don't trigger the build yet, it's not ready at all

    opened by 12rambau 2
  • why not using a with statement ?

    why not using a with statement ?

    In this section of the gdal tilesource, there is a complex structure to set and unlink tmp files using os. could it be possible to use a with statement instead (https://stackoverflow.com/a/39984066/6734243) ? letting the lib responsible for cleaning.

    https://github.com/girder/large_image/blob/d60004b4810efa14c396281bdaf858d97dd87997/sources/gdal/large_image_source_gdal/init.py#L1131

    opened by 12rambau 4
Releases(v1.19.0)
  • v1.19.0(Jan 5, 2023)

    Features

    • Add a frames property to the tile source as a short hand for getting the number of frames from the metadata (#1014)

    Improvements

    • Better release file handles (#1007)
    • Support tiny images from the test source (#1013)
    • Speed up loading or parsing some multi sources (#1015)
    • Better scale uint32 images (#1017)

    Changes

    • Don't report filename in internal PIL metadata (#1006)

    Bug Fixes

    • Better output new vips images as float32 (#1016)
    • Pin tinycolor2 for annotations (#1018)
    Source code(tar.gz)
    Source code(zip)
  • v1.18.0(Dec 1, 2022)

    Features

    • Add a DICOM tile source (#1005)

    Improvements

    • Better control dtype on multi sources (#993)
    • Don't use dask threads when using nd2 to fetch tiles (#994)
    • Set mime type for imported girder files (#995)
    • Specify token scopes for girder endpoints (#999, #1000)
    • Set the qptiff extension to prefer the tiff reader (#1003)

    Bug Fixes

    • Use open.read rather than download to access files in Girder (#989)
    • Fix nd2 source scale (#990)
    Source code(tar.gz)
    Source code(zip)
  • v1.17.3(Nov 2, 2022)

  • v1.17.2(Oct 20, 2022)

  • v1.17.1(Oct 18, 2022)

    Improvements

    • Fallback when server notification streams are turned off (#967)
    • Show and edit yaml and json files using codemirror (#969, #971)
    • Show configured item lists even if there are no large images (#972)
    • Add metadata and annotation metadata search modes to Girder (#974)
    • Add the ability to show annotation metadata in item annotation lists (#977)
    • Support ETAG in annotation rest responses for better browser caching (#978)
    • Thumbnail maintenance endpoints (#980)
    • Handle lif file extensions (#981)

    Bug Fixes

    • Fixed an issue with compositing multiple frames (#982)
    Source code(tar.gz)
    Source code(zip)
  • v1.17.0(Sep 16, 2022)

    Features

    • Style functions (#960)
    • Annotation metadata endpoints (#963)

    Improvements

    • Reduce rest calls to get settings (#953)
    • Add an endpoint to delete all annotations in a folder (#954)
    • Support relabeling axes in the multi source (#957)
    • Reduce a restriction on reading some tiff files (#958)

    Changes

    • Improve internals for handling large annotation elements (#961)

    Bug Fixes

    • Harden adding images to the item list (#955)
    • Fix checking user annotation document length (#956)
    • Improve scaled overlays (#959)
    Source code(tar.gz)
    Source code(zip)
  • v1.16.2(Aug 31, 2022)

    Improvements

    • Add a general filter control to item lists (938, 941)
    • Item list modal dialogs are wider (939)
    • Improve mimetypes on upload to Girder (944)

    Bug Fixes

    • Fix iterating tiles where the overlap larger than the tile size (940)
    • Better ignore tiff directories that aren't part of the pyramid (943)
    • Fix an issue with styling frames in ome tiffs (945)
    • Better handle large user records in annotation elements (949)
    • Harden which output formats are supported (950)

    Changes

    • Adjusted rest request logging rates for region endpoint (948)
    Source code(tar.gz)
    Source code(zip)
  • v1.16.1(Aug 18, 2022)

    Improvements

    • Add annotation access controls at the folder level (905)
    • Reduce error messages and make canRead results more accurate (918, 919, 920)
    • Sort columns in item lists based (925, 928)
    • Better handle tiffs with orientation flags in pil source (924)
    • Support a bands parameter for the test source (935)
    • Add annotation creation access flag (937)

    Changes

    • Remove some extraneous values from metadata responses (932)
    • Reduce some messages to stderr from other libraries (919)
    • Avoid some warnings in Python 3.10 (913)
    Source code(tar.gz)
    Source code(zip)
  • v1.16.0(Aug 5, 2022)

    Features

    • Add a tifffile tile source (885, 896, 903)
    • Added a canReadList method to large_image to show which source can be used (895)
    • Optionally show metadata in item lists (901)
    • Register the tile output formats from PIL (904)
    • Copy tilesource instances to add styles (894)

    Improvements

    • Pass options to the annotationLayer mode (881)
    • Support more style range options (883)
    • When converting girder images locally, prefer mount paths (886)
    • Store the id of job results for easier post-job work (887)
    • Harden style compositing of partial tiles (889)
    • Cache read_tiff calls to speed up restyling (891)
    • Speed up styling by doing less (892)
    • Add local color definitions (858)
    • Inheritable config files (897)
    • Add geospatial property (818, 908)
    • Improve repr of image bytes (902)
    • Handle nodata style when specified as a string (914)

    Changes

    • Be more consistent in source class name attribute assignment (884)

    Bug Fixes

    • Fix alpha on GDAL sources with a projection that have an explicit alpha channel (909, 915)
    Source code(tar.gz)
    Source code(zip)
  • v1.15.1(Jun 29, 2022)

  • v1.15.0(Jun 17, 2022)

  • v1.14.5(Jun 1, 2022)

    Improvements

    • Speed up ingesting annotations (870)
    • Reduce the chance of blinking on annotation layers (871)
    • Reduce updates when modifying annotations (872)

    Bug Fixes

    • Improve annotation upload; support full annotation documents (869)
    Source code(tar.gz)
    Source code(zip)
  • v1.14.4(May 27, 2022)

    Improvements

    • Better handle editing polygons with holes (857)
    • Support fetching yaml config files (860)
    • Optionally include bounding box information with annotation queries (851)
    • Reduce memory copying in the nd2 reader (853)
    • Add support for boolean annotation operations (865)
    • Speed up removing all annotations from an item (863)

    Bug Fixes

    • Fix issues with the nd2 reader (866, 867)
    • Honor the highlight size limit with centroid annotations (861)
    Source code(tar.gz)
    Source code(zip)
  • v1.14.3(May 3, 2022)

    Improvements

    • Support polygon annotations with holes (844)
    • New annotations get a default name if they do not have one (843)
    • Explicitly mark vips output as tiled (848)
    • Change how annotations are uploaded from the UI (845)
    Source code(tar.gz)
    Source code(zip)
  • v1.14.2(Apr 27, 2022)

  • v1.14.1(Apr 21, 2022)

  • v1.14.0(Apr 20, 2022)

    Features

    • Vips tile source and tiled file writer (816, 827, 830)

    Improvements

    • Handle file URLs with GDAL (820)
    • Add a hasAlpha flag to image annotations (823)
    • Allow dict for style (817)
    • Support drawing multipolygon regions (832)

    Bug Fixes

    • Fix a range check for pixelmap annotations (815)
    • Harden checking if a PIL Image can be read directly from a file pointer (822)

    Changes

    • Handle PIL deprecations (824)
    Source code(tar.gz)
    Source code(zip)
  • v1.13.0(Mar 31, 2022)

    Features

    • Add support for ellipse and circle annotations (811)
    • Support pickle output of numpy arrays for region, thumbnail, and tile_frames endpoints (812)

    Improvements

    • Improve parsing OME TIFF channel names (806)
    • Improve handling when a file vanishes (807)
    • Add TileSourceXYZRangeError (809)
    Source code(tar.gz)
    Source code(zip)
  • v1.12.0(Mar 21, 2022)

    Features

    • Refactor the nd2 source to use the nd2 library (#797)

    Improvements

    • Add options to threshold near min/max based on the histogram (#798)
    • Mark vsi extensions as being preferred by the bioformats source (#793)
    • Add mouse events to overlay annotations (#794)
    • Use orjson instead of ujson for annotations (#802)
    • Use simplejpeg for jpeg encoding rather than PIL (#800)
    • Use pylibtiff instead of libtiff (#799)

    Bug Fixes

    • Harden annotation ACL migration code (#804)
    Source code(tar.gz)
    Source code(zip)
  • v1.11.2(Mar 4, 2022)

    Improvements

    • Emit events when an overlay annotation layer is created (#787)
    • Minor improvements to setFrameQuad to make it more flexible (#790)
    • Support drawing polygon selection regions (#791)
    • Add some automating options to getTileFramesQuadInfo (#792)

    Changes

    • Change how we do a version check (#785)
    Source code(tar.gz)
    Source code(zip)
  • v1.11.1(Feb 17, 2022)

  • v1.11.0(Feb 10, 2022)

    Features

    • Initial implementation of multi-source tile source (#764)
    • Added pixelmap annotation element (#767, #776)

    Improvements

    • Add more opacity support for image overlays (#761)
    • Make annotation schema more uniform (#763)
    • Improve TileSource class repr (#765)
    • Improve frame slider response with base quads (#771)
    • Default to nearest-neighbor scaling in lossless image conversion (#772)
    • Improve the import time (#775, #777)

    Bug Fixes

    • The tile iterator could return excess tiles with overlap (#773)
    Source code(tar.gz)
    Source code(zip)
  • v1.10.0(Jan 21, 2022)

    Features

    • Added image overlay annotation element (#742, #750)
    • Allow the discrete scheme to be used on all tile sources (#755)

    Improvements

    • Expand user paths (#746)
    • Work with more matplotlib palettes (#760)

    Changes

    • Use importlib rather than pkg_resources internally (#747)

    Bug Fixes

    • Fix expanding a style palette with a single named color (#754)
    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Dec 17, 2021)

    Features

    • Better palette support in styles (#724)
    • Enumerate available palettes (#741)

    Improvements

    • The openjpeg girder source handles uploaded files better (#721)
    • Suppress some warnings on Girder and on bioformats (#727)

    Bug Fixes

    • Harden detecting file-not-found (#726)
    • Fix the pylibmc dependency for windows (#725)
    Source code(tar.gz)
    Source code(zip)
  • v1.8.11(Dec 8, 2021)

  • v1.8.10(Dec 7, 2021)

  • v1.8.9(Dec 6, 2021)

  • v1.8.8(Dec 6, 2021)

  • v1.8.7(Nov 19, 2021)

    Improvements

    • Add the image converter to the extra requires (#677)
    • All file tile sources can take either strings or pathlib.Path values (#683)
    • On Girder with read-only assetstores, return results even if caching fails (#684)
    • Handle geospatial files with no explicit projection (#686)

    Bug Fixes

    • Fix default properties on annotations when emitted as centroids (#687)
    Source code(tar.gz)
    Source code(zip)
  • v1.8.6(Nov 8, 2021)

Owner
Girder
This organization contains repositories related to the Girder project, a data management toolkit developed and maintained by Kitware.
Girder
A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for quickly creating new images from the one assigned to the field.

django-versatileimagefield A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creat

Jonathan Ellenberger 490 Dec 13, 2022
Fuzzware is a project for automated, self-configuring fuzzing of firmware images

Fuzzware Fuzzware is a project for automated, self-configuring fuzzing of firmware images. The idea of this project is to configure the memory ranges

190 Dec 21, 2022
Depix is a tool for recovering passwords from pixelized screenshots.

This implementation works on pixelized images that were created with a linear box filter. In this article I cover background information on pixelization and similar research.

23.1k Jan 04, 2023
Pixel Brush Processing Unit

Pixel Brush Processing Unit The Pixel Brush Processing Unit (PBPU for short) is a simple 4-Bit CPU I designed in Logisim while I was still in school a

Pixel Brush 2 Nov 03, 2022
A simple image-level annotation tool supporting multi-channel images for napari.

napari-labelimg4classification A simple image-level annotation tool supporting multi-channel images for napari. This napari plugin was generated with

4 May 16, 2022
BeeRef — A Simple Reference Image Viewer

BeeRef — A Simple Reference Image Viewer BeeRef lets you quickly arrange your reference images and view them while you create. Its minimal interface i

Rebecca 245 Dec 25, 2022
DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics

DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics.

Frederik Berlaen 344 Jan 06, 2023
impy is an all-in-one image analysis library, equipped with parallel processing, GPU support, GUI based tools and so on.

impy is All You Need in Image Analysis impy is an all-in-one image analysis library, equipped with parallel processing, GPU support, GUI based tools a

24 Dec 20, 2022
a lite weight photo editor written in python for day to day photo editing!

GNU-PhotoShop A lite weight Photo editing Program (currently CLI only) written in python3 for day to day photo editing. Disclaimer : Currently we don'

Kunal Sharma 5 May 30, 2022
starfish is a Python library for processing images of image-based spatial transcriptomics.

starfish: scalable pipelines for image-based transcriptomics starfish is a Python library for processing images of image-based spatial transcriptomics

199 Dec 08, 2022
Easy to use Python module to extract Exif metadata from digital image files.

Easy to use Python module to extract Exif metadata from digital image files.

ianaré sévi 719 Jan 05, 2023
A tool for hiding data inside of images

Stegenography-tool a tool for hiding data inside of images Quick test: do python steg-encode.py test/message.txt test/covid19.png to generate the test

luke 2 Nov 02, 2021
Create a QR-code Generator app using only Python.

QR-code_Generator Create a QR-code Generator app using only Python. This apps generated a QR code for a single link. Libraryes used in this app -- py

Soham P Phasalkar 1 Oct 17, 2021
vsketch is a Python generative art toolkit for plotters

Generative plotter art environment for Python

Antoine Beyeler 380 Dec 29, 2022
A Robust Avatar Generator with a huge number of templates

CoolAvatars Welcome to this repository of CoolAvatars. Using this project, you can generate cool avatars not only from the samples present in my image

RAVI PRAKASH 5 Oct 12, 2021
ImageStrike是一款用于CTF中图片隐写的综合利用工具

🎈 简介 ImageStrike是一款使用PyQT5开发,用于CTF中图片隐写的综合利用工具

zR00t1 133 Dec 27, 2022
A python program to generate ANSI art from images and videos

ANSI Art Generator A python program that creates ASCII art (with true color support if enabled) from images and videos Dependencies The program runs u

Pratyush Kumar 12 Nov 08, 2022
PyPixelArt - A keyboard-centered pixel editor

PyPixelArt - A keyboard-centered pixel editor The idea behind PyPixelArt is uniting: a cmdpxl inspired pixel image editor applied to pixel art. vim 's

Douglas 18 Nov 14, 2022
sK1 2.0 cross-platform vector graphics editor

sK1 2.0 sK1 2.0 is a cross-platform open source vector graphics editor similar to CorelDRAW, Adobe Illustrator, or Freehand. sK1 is oriented for prepr

sK1 Project 238 Dec 04, 2022
MaryJane is a simple MJPEG server written in Python.

MaryJane is a simple MJPEG server written in Python.

bootrino 152 Dec 13, 2022