Multichannel Image Benchmark Results
Single-threaded CPU benchmark for 9-channel image augmentation. Tests how well each library handles non-standard channel counts — common in satellite imagery, medical imaging, and scientific data.
Why multichannel matters
Standard image libraries are optimized for 3-channel RGB. Many real-world applications use more channels: satellite imagery (RGB + NIR + thermal), hyperspectral cameras, medical scans (CT slices as channels), and custom sensor fusion. This benchmark uses 9-channel images to test how each library handles arbitrary channel counts on a single CPU thread.
Pairwise Summary
Generated automatically from benchmark JSON at build time (median speedup midpoint with IQR).
Albumentationsx vs Kornia
Wins: 33 / 41 · Median: 2.47x · IQR: 1.21x-8.79x
Albumentationsx vs Torchvision
Wins: 15 / 23 · Median: 1.59x · IQR: 0.65x-3.40x
Speedup Distribution
How many transforms fall into each speedup range (Albumentationsx vs best competitor). 42 transforms with head-to-head comparison.
Results
Click any column header to sort · Transform names link to interactive demos
| Transform | Speedup Albx / best | albumentationsx 2.2.6 | kornia 0.8.2 | torchvision 0.26.0 |
|---|---|---|---|---|
| RandomGamma | 50-64x | 5465 ± 672 | 97 ± 0 | — |
| MedianBlur | ≥41x | 419 ± 5 | ≤10 | — |
| Elastic | ≥33x | 335 ± 3 | ≤10 | ≤10 |
| RandomJigsaw | 18-19x | 5609 ± 44 | 302 ± 2 | — |
| MotionBlur | 10-11x | 1342 ± 65 | 126 ± 0 | — |
| Solarize | 9.0-11x | 5615 ± 502 | 503 ± 1 | 567 ± 2 |
| Blur | 8.4-9.1x | 2567 ± 100 | 292 ± 0 | — |
| Rotate | 7.0-7.3x | 1772 ± 31 | 249 ± 1 | 246 ± 2 |
| RandomRotate90 | 5.6-5.9x | 1478 ± 24 | 259 ± 2 | — |
| PlasmaBrightness | 3.7-3.9x | 151 ± 3 | 40 ± 0 | — |
| Perspective | 3.3-3.5x | 602 ± 17 | 172 ± 0 | 176 ± 0 |
| Erasing | 2.4-4.0x | 19946 ± 4338 | 593 ± 1 | 6362 ± 227 |
| RandomResizedCrop | 2.9-3.0x | 986 ± 22 | 335 ± 2 | 335 ± 2 |
| Sharpen | 2.6-2.8x | 770 ± 11 | 202 ± 1 | 286 ± 4 |
| GaussianBlur | 2.6-2.7x | 802 ± 12 | 299 ± 0 | 121 ± 1 |
| Affine | 2.5-2.6x | 670 ± 11 | 260 ± 0 | 198 ± 2 |
| ChannelDropout | 2.2-2.7x | 9472 ± 959 | 3840 ± 4 | — |
| SmallestMaxSize | 2.3-2.5x | 603 ± 18 | 250 ± 1 | — |
| Shear | 2.2x | 662 ± 7 | 300 ± 0 | — |
| LongestMaxSize | 2.1x | 858 ± 16 | 410 ± 0 | — |
| PlasmaContrast | 2.0x | 85 ± 0 | 42 ± 0 | — |
| RandomCrop128 | 1.4-1.8x | 47302 ± 2384 | 2929 ± 88 | 29917 ± 1842 |
| GaussianNoise | 1.5-1.6x | 109 ± 3 | 72 ± 0 | — |
| OpticalDistortion | 1.5x | 290 ± 7 | 193 ± 0 | — |
| ChannelShuffle | 1.3-1.5x | 2641 ± 106 | 1411 ± 2 | 1892 ± 6 |
| CenterCrop128 | 1.4x | 51003 ± 217 | 4628 ± 21 | 36610 ± 143 |
| ThinPlateSpline | 1.2x | 85 ± 1 | 70 ± 0 | — |
| Contrast | 1.0-1.1x | 3052 ± 99 | 2898 ± 4 | 572 ± 4 |
| Brightness | 0.9-1.1x | 3013 ± 284 | 2906 ± 6 | 985 ± 3 |
| Posterize | 0.8-1.3x | 23588 ± 5135 | 487 ± 9 | 23074 ± 276 |
| CornerIllumination | 0.9-1.0x | 289 ± 16 | 302 ± 0 | — |
| PlasmaShadow | 0.9x | 253 ± 4 | 288 ± 2 | — |
| GaussianIllumination | 0.8x | 295 ± 9 | 362 ± 1 | — |
| Invert | 0.5-0.8x | 16207 ± 3388 | 5325 ± 28 | 23672 ± 108 |
| JpegCompression | 0.6x | 160 ± 0 | 73 ± 0 | 258 ± 1 |
| AutoContrast | 0.5-0.6x | 437 ± 15 | 540 ± 1 | 780 ± 2 |
| Pad | 0.5x | 8066 ± 88 | — | 15071 ± 103 |
| VerticalFlip | 0.3-0.6x | 9190 ± 2941 | 3810 ± 14 | 19143 ± 130 |
| Normalize | 0.4-0.5x | 1311 ± 54 | 2957 ± 4 | 1375 ± 1 |
| Grayscale | 0.3x | 392 ± 3 | 1241 ± 5 | 1491 ± 7 |
| LinearIllumination | 0.2x | 206 ± 3 | 1009 ± 3 | — |
| HorizontalFlip | 0.1-0.2x | 2630 ± 73 | 4069 ± 9 | 18238 ± 318 |
Methodology
Test Environment
- Platform
- macOS arm64 (Apple M-series)
- CPU threads
- 1 (forced single-thread)
- Image channels
- 9
- Images per run
- 2000
- Runs per transform
- 5
- Last run
- April 29, 2026
Library Versions
- Albumentationsx
- 2.2.6
- Kornia
- 0.8.2
- Torchvision
- 0.26.0
- NumPy
- 2.4.4
- OpenCV
- 4.13.0.92
Metric: Median throughput in images/second across 5 runs. Higher is better.
Channel handling: All libraries process the same9-channel uint8 images. Libraries that don't support arbitrary channel counts show — for those transforms.
Thread control: OMP, OpenBLAS, MKL, and OpenCV threads all forced to 1 to ensure fair single-thread comparison.
Speedup column: Range computed from throughput error bars: speedup_from to speedup_to, where each bound uses median +/- std. Green = 2x+ conservative bound, yellow = 1x-2x, gray = slower.
Want to verify the results on your own hardware or check that the comparison is fair? The benchmark code is open source on GitHub.