My project goal was to add DICOM file support to caMicroscope, a Whole Slide Image viewer. The viewer backend (OpenSlide) didn't support DICOM, so we needed a second backend. Surprisingly, before the coding period started, OpenSlide did get DICOM file support and this gave me the opportunity to tackle the bigger challenge of integrating BioFormats into caMicroscope. This would be extraordinary, as BioFormats is a Java library with no C wrappers available online.
I started by refactoring caMicroscope code to use a single base Dockerfile which compiled OpenSlide. Then I made a Java wrapper and prepared its corresponding C caller. For this, I had chosen GraalVM C API, but once I found out about its level of performance and its requirement to achieve high code covergage first (for metadata collection), I rewrote it for Java JNI. To make it available to the two derivatives of our base image, I refactored this to be a separate project. We also needed to make this available to our Python image metadata server, so I wrote a wrapper in Python using cffi. I also made modifications for caMicroscope to provide basic support for multifile formats.
- New docs: How does my new BioFormats wrapper work Steps to update it caMicroscope Docker inheritance
- New repository: https://github.com/camicroscope/image-decoders contains build scripts for caMicroscope, which is the new, common base image
- Updating OpenSlide: camicroscope/iipImage#17 camicroscope/caMicroscope#647
- New repository: https://github.com/camicroscope/BFBridge contains the BioFormats wrapper in C and in Python
- Adding BioFormats: image server: camicroscope/iipImage#18 metadata server: camicroscope/SlideLoader#68 camicroscope/SlideLoader#72 camicroscope/SlideLoader#78 camicroscope/SlideLoader#79 frontend: camicroscope/caMicroscope#653
- Initial subdirectory support: camicroscope/caMicroscope#655 camicroscope/SlideLoader#82
caMicroscope:
- Fix building: camicroscope/Caracal#156 camicroscope/SlideLoader#62 (unmerged as similar patches were already on a dev branch)
- Fix downloading images: camicroscope/SlideLoader#64
- Faster rebuilding: camicroscope/Caracal#158 camicroscope/SlideLoader#69
- Fix for filenames with special characters camicroscope/caMicroscope#640 camicroscope/SlideLoader#65
- Improve image server reader selection: camicroscope/iipImage#16
- Fix layer count camicroscope/SlideLoader#67
- Fix no limits for thumbnail size camicroscope/SlideLoader#70
- Fix wrong mimetypes camicroscope/SlideLoader#76
- Fix deprecation camicroscope/SlideLoader#77
OpenSlide:
- Tested the new DICOM reader and reported a bug which was then fixed openslide/openslide#468 and I reported another openslide/openslide#494
BioFormats:
- Remove causes for false positive error messages ome/bioformats#4051 ome/ome-common-java#83
- Shared library loading improvements: ome/bioformats#4041 ome/bioformats#4042 ome/bioformats#4044 ome/bioformats#4090
- Improve BioFormats conversion for caMicroscope ome/bioformats#4059 ome/bioformats#4061
- Use my new BioFormats wrapper in C to add support for more languages to BioFormats
- Modify my BioFormats wrapper in Python to dedicate a thread for JVM calls
- Modify caMicroscope/iipimage to support indexed image files (false color/must-read color profiles) and an arbitrary number of channels
- Modify caMicroscope frontend to support switching among z and t dimensions.
- Modify caMicroscope slideloader to detect flat BioFormats images and convert their series 0 to ometiff and use the current pyramid-conversion to convert it to tiff
- Modify make_pil_image to allow single-channel images
- Bfbridge C code needsd dirent.h equivalent for windows