Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.8.1] - 2025-10-24

Fixed

  • The C/C++ reference in the docs is now included correctly.

  • The documentation’s live demo has been fixed.

[0.8.0] - 2025-10-22

Added

  • sdk: HSImage method stream added - it starts a concurrent stream with a full slice.

  • sdk: Initial experimental support for qamlib-rs (internal use only).

  • c-ffi: Debug format functions added for most types.

  • c-ffi: hv_ensure_dtype method added.

  • c-ffi: You can now edit/get extra metadata in the header with the hv_hsi_header_get/hv_hsi_header_set methods.

  • python: The python API now supports the stream method and the HSIStream type. Support is still experimental.

  • apps: New cli application hv for performing basic operations. Currently, the application can just show file information.

  • docs: New unified API documentation and guides. Includes a wasm-based demo of the Python API.

Changed

  • sdk: HSImage method slice_iter changed to stream_slice.

  • sdk: HSImage method slice_array changed to array_slice.

  • sdk: HSImage method plane_axis changed to array_plane.

  • sdk: HSImage method full changed to array_full.

  • sdk: HSImage method plane_axis_crop changed to array_plane_crop.

Deprecated

  • sdk: HSImage method array_plane_crop is deprecated. Instead, use slice followed by array_plane.

Removed

  • apps: Old unused applications (hsi-viewer).

Fixed

  • A critical bug in the camera API that prevented the camera from streaming.

[0.7.3] - 2025-09-27

Added

  • Scalar operations for images (both left and right hand side)

  • HSIStream now provides a synchronous mode. This is useful for applying lightweight operations. Most simple operations, including as_dtype, nan_to_num, etc. now use this mode.

  • The C and Python APIs support the added scalar operations.

[0.7.2] - 2025-08-19

Added

  • C bindings for the entire SDK.

  • Doxygen documentation for the C bindings.

[0.7.1] - 2025-08-18

Added

  • Small PCA/projection sample program.

  • A rust write function similar to the one implemented for the Python API.

Fixed

  • A bug in InterleaveChangeOperation where the shape was not correctly updated, resulting in broadcasting errors in many cases.

[0.7.0] - 2025-08-10

This update introduces infinite data streams and integration with the HyperVision 1700 camera.

Added

  • Initial generic HyperVision camera API.

  • Interface layer for the quark-backend REST API.

  • Image-backed camera type that can simulate a real camera.

  • Initial integration between cameras and the HSImage/HSImageOps API.

  • Initial Python API reflecting the Rust camera APIs.

  • An open function in the Rust API that detects file extension and header/data file for ENVI files. It is an improvement to the Python API version and the Python function now just calls the Rust function internally.

Changed

  • The framework uses a new ShapeMeta type to allow for infinite streams of hsi data.

  • The Python calibration routines now support setting a target interleave and uses the rust-based ensure_dtype method.

  • Fixed a bug in the PAM header writing code when calculating the PAM shape.

  • The documentation is now published to qtec-mono.

  • The image-tiff fork has been rebased onto the latest main branch (version 0.10)

  • The HSIReader trait has been removed completely. Having individual open methods makes it easier to account for file type differences.

Fixed

  • A bug in MeanAxisOp, where it would not work correctly in certain instances.

  • A bug in InterleaveChange, where the shape was not calculated correctly for BSQ output.

  • A deprecated use of PyTuple became a bug when updating the pyo3 version.

  • A bug in the PAM header writing code where the shape calculation would be wrong.

  • An issue with the ENVI header parser not working correctly for files with CRLF endings. A new test has been added to check for these special cases.

[0.6.3] - 2025-06-09

Added

  • NanToNum operation that replaces NaN values with a specified value.

Changed

  • predictor in the Python API now replaces nan values with 0 before calling the model’s predict function.

[0.6.2] - 2025-06-01

Added

  • Operation decorator for easy adaptation of Python functions into the SDK.

  • Predictor function wrapper for easily integrating scikit-learn models into the framework.

  • Pca-model function wrapper for efficient integration of projection models.

  • Documentation has been updated with new information.

Fixed

  • The ufunc (VectorizedUnaryOp) operator did not correctly adjust the slice for the source image.

[0.6.1] - 2025-05-23

Added

  • New Binning operation.

Changed

  • Combining slices now skips single indexes, which is more efficient.

  • Streams now return Result for each element, which makes proper error handling possible.

  • Array reconstruction now prints channel-related errors to stderr for easier debugging.

Fixed

  • Bug in interleave change that caused slices not to be correctly calculated.

  • Added an extra GIL lock to VectorizedUnaryOp which caused segfaults.

[0.6.0] - 2025-05-02

Added

  • Data processing is now performed using the HSIStream type which uses Rayon and crossbeam to asynchronously execute pipelines.

  • Slicing is now done using the new SliceElem and SliceDescriptor types that are based specifically on HSI terminology.

  • Slicing shapes are now validated and returns an appropriate error when relevant.

  • Added a mask selection operation, which uses a boolean mask array to select spatial pixels.

Changed

  • The HSIError::ShapeError variant now has a backtrace. This may be added to other errors in the future.

  • Switched to the nightly compiler.

  • Debug symbols have been removed from the release build.

[0.5.6] - 2025-03-13

Changed

  • Package/library name is now qtec-hv-sdk. This prevents naming clashes and increases clarity. The Python import is still hsi.

[0.5.5] - 2025-03-12

Changed

  • Now using a manylinux_2_28 based image to build the binary packages.

  • The public package upload now only publishes the binary packages.

[0.5.4] - 2025-03-10

Changed

[0.5.3] - 2025-03-03

Changed

  • Dynarray version bumped to 0.5.3 to make it equivalent to the rest of the packages. Since they are updated together, this makes versions much simpler to understand.

Fixed

  • Updated CI to fix Windows build.

[0.5.2] - 2025-02-25

Added

  • Interleave change operation

Changed

  • Select operation now uses Array2 instead of a vector of tuples.

  • The Python API for select now automatically converts Numpy arrays, list of lists, and lists of tuples to Array2 internally.

Fixed

  • Blas inclusion did not work properly on windows. It has now been made optional and is not used in the automated builds. The current impact on performance is negligible.

  • Modified CI to correctly build for linux/windows distributions and added a source distribution for easy local compilation.

  • Some doc pages didn’t build correctly due to a missing dependency.

[0.5.1] - 2025-01-28

Added

  • Select operation that allows passing a list of arbitrary line/sample coordinates to select a spectral subset of an image. Useful for subsampling patterns.

  • random_sample utility function for the Python extension to easily generate random samples (currently with repetition).

Changed

  • Tiff default interleave is now BSQ, which is the most intuitive format when viewing the files in regular image editors.

Fixed

  • A few errors in the documentation (recipes section).

[0.5.0] - 2024-11-06

Added

  • Matrix-vector and Matrix-matrix product support.

  • Basic tiff support added.

  • Documentation of operations and missing basic types in the Python docs.

  • Header modification operation (will likely change since it is cumbersome to use).

  • Added blas support.

Changed

  • Mean now uses a memory efficient approach for BSQ. This should be adapted to other reductions.

Fixed

  • Interleave bugs everywhere

  • Slicing bugs in many places.

[0.4.0] - 2024-08-02

Added

  • HSImage trait for a unified interface for image types and operations.

  • HSImageOps trait for arithmetic operations (addition, subtraction, multiplication, division) as well as type changes, numeric clamping, and axis reduction functions (mean, std, var, sum).

  • Lazy slicing through slice_iter for building compound operations.

  • InMemoryCube can now be created directly from an array.

  • (python) Preprocessing module with SNV and reflectance calibration functions.

  • (python) Magic methods implemented for arithmetic operations.

  • (python) Index magic method implemented as lazy slicing.

  • (python) Can create new HSImages from NumPy arrays.

Changed

  • HSIFile and InMemoryCube now work through the unified HSImage trait.

  • (python) Writing now works directly on HSImage objects.

Fixed

  • Multiple bugs related to slicing and indexing.

Deprecated

  • (python) HSIFile is no longer used in the python API.

[0.3.0] - 2024-06-03

Added

  • Read individual planes of HSI files.

  • Added in-memory HSI type. The interface is likely to change.

Changed

  • Refactored crate into several sub-crates for each specific area of functionality.

Fixed

  • Bug in hsi-cli where the header would not be updated.

  • Bug where files would be read incorrectly.

[0.2.0]

Added

  • Conversion between PAM, ENVI, and yaml hyperspectral file formats.

  • Conversion between HSI interleave formats.

  • Memory efficient implementation only reads and processes small chunks of a file at a time.

  • Iterator implementations for processing hyperspectral data.

  • (cli) A simple tool for converting between file formats and interleaves.