|
1 | 1 | # Changelog |
2 | 2 |
|
3 | | -## [Unreleased] |
| 3 | +## [0.6.0] - 2025-09-30 |
| 4 | + |
| 5 | +### Major Features |
| 6 | + |
| 7 | +#### Image Processing |
| 8 | +- **Binary Image Operations**: Complete thresholding and morphology suite |
| 9 | + - Otsu and adaptive mean thresholding |
| 10 | + - Morphological operations: erosion, dilation, opening, closing |
| 11 | +- **Order-Statistic Filters**: Median, minimum, maximum blur filters |
| 12 | + - Edge-preserving noise reduction with configurable kernel sizes |
| 13 | +- **Image Enhancement**: Histogram equalization and autocontrast |
| 14 | + - Adaptive contrast enhancement for improved visibility |
| 15 | +- **Edge Detection**: Advanced edge detection algorithms |
| 16 | + - **Canny Edge Detection**: Classic multi-stage edge detector with Gaussian smoothing, Sobel gradients, non-maximum suppression, and hysteresis thresholding |
| 17 | + - **Shen-Castan**: Edge detection with ISEF smoothing and adaptive gradient computation |
| 18 | +- **Canvas Drawing**: Added `drawImage` method for image compositing |
| 19 | + - Support for blending modes during insertion |
| 20 | + |
| 21 | +#### Format Support |
| 22 | +- **JPEG Encoder**: Complete baseline JPEG encoding implementation |
| 23 | + - DCT-based compression with quality control |
| 24 | + - Support for grayscale and RGB images |
| 25 | + - Optimized encoding performance |
| 26 | + |
| 27 | +#### Compression |
| 28 | +- **Deflate/Zlib/Gzip**: Full compression implementation |
| 29 | + - Multiple compression levels and strategies |
| 30 | + - Dynamic Huffman encoding |
| 31 | + - LZ77 hash-based compression |
| 32 | + - Compatible with standard zlib format |
| 33 | + |
| 34 | +#### Matrix Improvements |
| 35 | +- **Chainable Operations API**: Simplified matrix operations |
| 36 | + - Direct method chaining: `matrix.transpose().inverse().eval()` |
| 37 | + - Deferred error checking at terminal operations |
| 38 | + - Added `dupe()` method for explicit copying |
4 | 39 |
|
5 | 40 | ### Breaking Changes |
6 | | -- **Matrix API Refactoring**: Removed `OpsBuilder` and merged all functionality directly into `Matrix` |
7 | | - - Operations are now chainable directly on Matrix: `matrix.transpose().inverse().eval()` |
8 | | - - Errors are deferred and checked at terminal operation (`.eval()`) |
9 | | - - For operation chains, use `ArenaAllocator` to manage intermediate allocations |
10 | | - - All SIMD optimizations preserved, including optimized GEMM operations |
11 | | - - Added `Matrix.dupe(allocator)` to explicitly copy before in-place chains and avoid aliasing/double-free issues. |
| 41 | +- **Image Processing**: Removed `differenceOfGaussians`, easy to do manually |
| 42 | +- **Matrix API**: Removed `OpsBuilder`, merged functionality into `Matrix` |
| 43 | + - Use `ArenaAllocator` for managing intermediate allocations in chains |
| 44 | + - All SIMD optimizations preserved |
| 45 | +- **YCbCr Color Space**: Components now use `u8` type instead of other numeric types |
| 46 | +- **Alpha Compositing**: Corrected blend mode compositing behavior |
| 47 | + |
| 48 | +### Architecture Improvements |
| 49 | +- **Image Module Reorganization**: Separated into focused sub-modules |
| 50 | + - `image/binary.zig` - Binary operations and morphology |
| 51 | + - `image/convolution.zig` - Convolution framework |
| 52 | + - `image/edges.zig` - Edge detection algorithms |
| 53 | + - `image/enhancement.zig` - Histogram and contrast operations |
| 54 | + - `image/histogram.zig` - Histogram computation |
| 55 | + - `image/integral.zig` - Integral image operations |
| 56 | + - `image/motion_blur.zig` - Motion blur effects |
| 57 | + - `image/order_statistic_blur.zig` - Order-statistic filters |
| 58 | +- **Compression Modules**: Modular compression implementation |
| 59 | + - Separate modules for deflate, zlib, gzip, huffman, and LZ77 |
| 60 | +- **ORB Feature Detection**: Improved with learned BRIEF patterns |
12 | 61 |
|
13 | 62 | ### Python Bindings |
14 | | -- Consolidated CPython type registration in `bindings/python/src/main.zig` via a compile‑time table + loop. |
15 | | -- Added `py_utils.kw(...)` helper to build CPython kwlists; adopted across transforms, canvas (including macro‑generated methods), filtering, matrix, PCA, motion blur, pixel proxy, rectangle. |
16 | | -- Introduced numeric validators in `py_utils.zig` and normalized error messages: |
17 | | - - `validatePositive`, `validateNonNegative`, `validateRange` used for consistent ValueError messages. |
18 | | - - Standardized tuple messages to "size/shape must be a 2‑tuple of (rows, cols)". |
19 | | -- Unified enum registration/parsing using `enum_utils.zig` (DrawMode, Blending, Interpolation, OptimizationPolicy). |
20 | | -- Reduced boilerplate for returning new images with `moveImageToPython`. |
21 | | -- All Python tests pass (`uv run pytest`), stubs generate successfully. |
| 63 | +- Standardized argument parsing with `py_utils.kw()` helper |
| 64 | +- Numeric validators for consistent error messages |
| 65 | +- Unified enum registration system via `enum_utils.zig` |
| 66 | +- Consolidated type registration with compile-time tables |
| 67 | +- Reduced boilerplate with `moveImageToPython` helper |
| 68 | + |
| 69 | +### Performance Optimizations |
| 70 | +- SIMD-optimized f32 separable convolution |
| 71 | +- Vectorized DoG and Gaussian blur calculations |
| 72 | +- Optimized JPEG encoding with fast DCT |
| 73 | +- Improved PNG compression configuration |
| 74 | + |
| 75 | +### Bug Fixes |
| 76 | +- Fixed alpha compositing for blend modes |
| 77 | +- Corrected JPEG restart marker handling and partial MCU decoding |
| 78 | +- Improved PNG filter selection alignment with spec |
| 79 | +- Fixed DoG filter output with offset handling |
| 80 | +- Better memory management for convolution operations |
22 | 81 |
|
23 | 82 | ## [0.5.1] - 2025-09-03 |
24 | 83 |
|
|
0 commit comments