Skip to content

Commit a9bb03d

Browse files
committed
release: publish version 0.5.0
This major release introduces computer vision features, advanced image filtering, architectural improvements, and performance optimizations. Python bindings gain matrix, PCA, and enhanced image API. BREAKING CHANGE: Several API changes in core and Python bindings. Refer to CHANGELOG.md and bindings/python/CHANGELOG.md for details.
1 parent 4a6d518 commit a9bb03d

File tree

5 files changed

+152
-5
lines changed

5 files changed

+152
-5
lines changed

CHANGELOG.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,71 @@
11
# Changelog
22

3+
## [0.5.0] - 2025-09-02
4+
5+
### Major Features
6+
7+
#### Computer Vision & Feature Detection
8+
- **ORB Feature Detection**: Complete ORB (Oriented FAST and Rotated BRIEF) implementation
9+
- FAST corner detection with non-maximal suppression
10+
- Binary descriptor extraction with rotation invariance
11+
- Feature matching with Hamming distance
12+
- KeyPoint structure with orientation and scale support
13+
- **Hungarian Algorithm**: Optimal assignment problem solver for feature matching
14+
- **Image Pyramid**: Multi-scale image representation for feature detection
15+
16+
#### Advanced Image Filtering
17+
- **Convolution Framework**: Generic convolution with customizable kernels
18+
- Gaussian blur with configurable sigma
19+
- Difference of Gaussians (DoG) for edge detection
20+
- Sobel edge detection with gradient magnitude
21+
- **Motion Blur Effects**: Linear and radial motion blur with SIMD optimization
22+
23+
#### Image Processing Enhancements
24+
- **Advanced Blending**: 12 blend modes (normal, multiply, screen, overlay, soft light, etc.)
25+
- **Image Transforms**: Extraction, insertion, warping, and perspective transforms with interpolation
26+
- **Channel Operations**: Generic operations on individual color channels
27+
- **PSNR Calculation**: Peak Signal-to-Noise Ratio for quality assessment
28+
- **Border Handling**: Set borders, extract rectangles, and handle edge modes
29+
30+
### Architecture Improvements
31+
- **Refactored Image Module**: Separated into logical sub-modules
32+
- Core image operations in `image.zig`
33+
- Filtering operations in `image/filtering.zig`
34+
- Transform operations in `image/transforms.zig`
35+
- Channel operations in `image/channel_ops.zig`
36+
- **Dynamic SVD**: Separated static and dynamic SVD implementations
37+
- **Enhanced PCA**: Runtime dimension support with batch operations
38+
- **Font System Overhaul**: Dynamic Unicode support with full 8x8 character set
39+
40+
### Performance Optimizations
41+
- SIMD-optimized motion blur and convolution operations
42+
- Channel-separated processing for improved cache locality
43+
- Optimized integral image computation
44+
- Fast paths for axis-aligned image extraction
45+
- Vectorized filtering with boundary handling
46+
47+
### API Changes
48+
- **Breaking**: Renamed enums for consistency
49+
- `InterpolationMethod``Interpolation`
50+
- `BlendMode``Blending`
51+
- ANSI display modes renamed to SGR
52+
- **Breaking**: Rectangle bounds are now exclusive (was inclusive)
53+
- **Breaking**: Image constructors renamed for clarity
54+
- `initBlank``init`
55+
- `initFromSlice``fromSlice`
56+
- **Breaking**: `isView` renamed to `isContiguous`
57+
- Blur methods renamed: `boxBlur``blurBox`, added `blurGaussian`
58+
59+
### JPEG Enhancements
60+
- Support for 4:4:4, 4:2:2, and 4:1:1 chroma subsampling
61+
- Improved component detection and color space handling
62+
63+
### Bug Fixes
64+
- Fixed filter operations on non-contiguous image views
65+
- Corrected integral image boundary access
66+
- Fixed Sobel gradient magnitude scaling
67+
- Improved arc antialiasing in canvas drawing
68+
369
## [0.4.1] - 2025-08-06
470

571
### Fixed

bindings/python/CHANGELOG.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,86 @@
11
# Python Bindings Changelog
22

3+
## [0.5.0] - TBD
4+
5+
### Major Features
6+
7+
#### Scientific Computing
8+
- **Matrix Class**: Full-featured matrix operations with NumPy interoperability
9+
- Zero-copy NumPy conversion
10+
- Runtime dimension support
11+
- More matrix methods to come
12+
- **PCA (Principal Component Analysis)**: Complete PCA implementation
13+
- Fit, transform, and inverse transform
14+
- Batch operations support
15+
- Configurable components and centering
16+
- **Optimization Module**: Hungarian algorithm for assignment problems
17+
18+
#### Advanced Image Processing
19+
- **Motion Blur**: Linear and spin blur effects
20+
- Configurable angle, distance, and strength
21+
- SIMD-optimized performance
22+
- **Convolution & Filtering**:
23+
- Gaussian blur with sigma control
24+
- Sobel edge detection
25+
- Sharpen filter
26+
- **Image Transforms**: Warp, rotate, and perspective transforms
27+
- With multiple interpolation methods
28+
29+
#### Enhanced Image API
30+
- **Image**: Generic storage (Rgba, Rgb, Grayscale)
31+
- **Pixel-Level Access**: Direct pixel component assignment
32+
- `image[y, x].r = 255` syntax support
33+
- Color conversion on pixel proxies
34+
- Blend operations at pixel level
35+
- **NumPy Integration**: Improved strided image support
36+
- Handles non-contiguous arrays
37+
- Preserves memory layout
38+
- **Image Operations**:
39+
- `copy()`, `dupe()`, `fill()` methods
40+
- `view()`, `is_view` property
41+
- `crop()`, `extract()`, `insert()` methods
42+
- `flip_horizontal()`, `flip_vertical()`, `rotate()`
43+
- `set_border()`, `get_rectangle()`
44+
- PSNR calculation
45+
46+
#### Drawing Enhancements
47+
- **Arc Drawing**: Circle arcs with fill support
48+
- Start/end angles in degrees
49+
- Antialiased rendering
50+
- **Advanced Blending**: 12 blend modes for compositing
51+
- Per-pixel and whole-image blending
52+
- Mode selection via Blending enum
53+
54+
### API Improvements
55+
- **Type Annotations**: Modern Python type hints
56+
- Uses `T | None` syntax
57+
- Comprehensive stub files (.pyi)
58+
- Better IDE autocomplete
59+
- **Iteration Support**: Images are now iterable
60+
- Row-by-row iteration
61+
- Pixel iterator access
62+
- **Comparison Operators**: Color types support equality comparison
63+
- **Rectangle Enhancements**:
64+
- IoU (Intersection over Union) calculation
65+
- Overlap detection
66+
- Tuple support for intersection
67+
68+
### Breaking Changes
69+
- **Canvas.draw_text**: Parameter order changed
70+
- Old: `draw_text(x, y, text, font, color)`
71+
- New: `draw_text(x, y, text, color, font)`
72+
73+
### Bug Fixes
74+
- Fixed RGBA object detection in Image color initialization
75+
- Corrected alpha blending in Canvas.fill_rectangle SOFT mode
76+
- Improved error messages with file paths
77+
- Fixed None handling in Image.set_border
78+
79+
### Performance
80+
- SIMD-optimized filtering operations
81+
- Efficient memory management for views
82+
- Zero-copy operations where possible
83+
384
## [0.4.1] - 2025-08-06
485

586
### Fixed

bindings/python/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "zignal-processing"
7-
version = "0.5.0.dev110"
7+
version = "0.5.0"
88
description = "Zero-dependency image processing library"
99
readme = "README.md"
1010
authors = [{name = "zignal contributors"}]

build.zig.zon

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
.{
22
.name = .zignal,
3-
.version = "0.5.0-dev",
3+
.version = "0.5.0",
44
.fingerprint = 0x5303c43db377b63a,
5-
.minimum_zig_version = "0.15.0-dev.1519+dd4e25cf4",
5+
.minimum_zig_version = "0.15.1",
66
.dependencies = .{},
77
.paths = .{
88
"build.zig",

examples/build.zig.zon

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
.name = .zignal_examples,
33
.version = "0.0.0",
44
.fingerprint = 0xcf70e6a9b7002db6,
5-
.minimum_zig_version = "0.15.0-dev.1519+dd4e25cf4",
5+
.minimum_zig_version = "0.15.1",
66
.dependencies = .{
77
.zignal = .{
88
.path = "../",
@@ -12,6 +12,6 @@
1212
"build.zig",
1313
"build.zig.zon",
1414
"src",
15-
"lib",
15+
"web",
1616
},
1717
}

0 commit comments

Comments
 (0)