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: 32 / 35 · Median: 3.73x · IQR: 2.17x-6.12x
Albumentationsx vs Torchvision
Wins: 11 / 18 · Median: 2.26x · IQR: 0.61x-6.03x
Speedup Distribution
How many transforms fall into each speedup range (Albumentationsx vs best competitor). 37 transforms with head-to-head comparison.
Results
Click any column header to sort · Transform names link to interactive demos
| Transform | albumentationsx 2.1.1 CPU · macOS arm64 | kornia 0.8.2 CPU · macOS arm64 | torchvision 0.25.0 CPU · macOS arm64 | Speedup Albx / best other (range) |
|---|---|---|---|---|
| RandomGamma | 6328 ± 72 | 83 ± 0 | — | 75-78x |
| MotionBlur | 1978 ± 126 | 63 ± 1 | — | 29-34x |
| Blur | 3165 ± 31 | 186 ± 3 | — | 17-17x |
| Rotate | 2833 ± 141 | 172 ± 1 | 152 ± 10 | 16-17x |
| Solarize | 5822 ± 780 | 339 ± 4 | 456 ± 11 | 11-15x |
| Sharpen | 969 ± 17 | 140 ± 6 | — | 6.5-7.4x |
| Perspective | 788 ± 10 | 149 ± 1 | 129 ± 2 | 5.2-5.4x |
| GaussianBlur | 981 ± 19 | 188 ± 2 | 49 ± 6 | 5.1-5.4x |
| PlasmaBrightness | 126 ± 2 | 24 ± 1 | — | 4.9-5.5x |
| Brightness | 5682 ± 138 | 1350 ± 40 | — | 4.0-4.4x |
| OpticalDistortion | 653 ± 14 | 157 ± 4 | — | 4.0-4.3x |
| Contrast | 5576 ± 631 | 1346 ± 31 | — | 3.6-4.7x |
| Affine | 880 ± 20 | 228 ± 3 | 143 ± 3 | 3.7-4.0x |
| Shear | 931 ± 19 | 250 ± 2 | 163 ± 6 | 3.6-3.8x |
| PlasmaContrast | 89 ± 1 | 24 ± 1 | — | 3.6-3.8x |
| RandomResizedCrop | 969 ± 109 | 309 ± 2 | 297 ± 3 | 2.8-3.5x |
| SmallestMaxSize | 585 ± 5 | 187 ± 3 | — | 3.1-3.2x |
| ChannelDropout | 6556 ± 830 | 2179 ± 95 | — | 2.5-3.5x |
| Resize | 802 ± 14 | 297 ± 3 | 194 ± 1 | 2.6-2.8x |
| Erasing | 10944 ± 368 | 426 ± 10 | 4321 ± 384 | 2.2-2.9x |
| LongestMaxSize | 879 ± 12 | 376 ± 2 | — | 2.3-2.4x |
| GaussianNoise | 131 ± 7 | 65 ± 0 | — | 1.9-2.1x |
| ChannelShuffle | 3117 ± 212 | 929 ± 25 | 1600 ± 41 | 1.8-2.1x |
| AutoContrast | 662 ± 19 | 374 ± 3 | — | 1.7-1.8x |
| ThinPlateSpline | 97 ± 1 | 62 ± 0 | — | 1.5-1.6x |
| CornerIllumination | 275 ± 9 | 181 ± 3 | — | 1.4-1.6x |
| GaussianIllumination | 296 ± 11 | 212 ± 15 | — | 1.3-1.6x |
| Pad | 9499 ± 1173 | — | 9112 ± 704 | 0.8-1.3x |
| PlasmaShadow | 177 ± 4 | 224 ± 2 | — | 0.8-0.8x |
| VerticalFlip | 11827 ± 1427 | 2296 ± 118 | 15409 ± 890 | 0.6-0.9x |
| Invert | 9115 ± 1441 | 2774 ± 169 | 15806 ± 3070 | 0.4-0.8x |
| RandomCrop128 | 62467 ± 7734 | 2566 ± 75 | 124539 ± 2345 | 0.4-0.6x |
| LinearIllumination | 247 ± 5 | 491 ± 12 | — | 0.5-0.5x |
| Posterize | 5500 ± 485 | 317 ± 16 | 12018 ± 1989 | 0.4-0.6x |
| Normalize | 477 ± 46 | 1402 ± 64 | 795 ± 22 | 0.3-0.4x |
| CenterCrop128 | 74581 ± 12008 | — | 223574 ± 5049 | 0.3-0.4x |
| HorizontalFlip | 3155 ± 71 | 2286 ± 557 | 15102 ± 3640 | 0.2-0.3x |
| AdditiveNoise | 112 ± 1 | — | — | — |
| AdvancedBlur | 818 ± 305 | — | — | — |
| CoarseDropout | 9047 ± 339 | — | — | — |
| ConstrainedCoarseDropout | 119167 ± 26242 | — | — | — |
| CropAndPad | 868 ± 10 | — | — | — |
| Defocus | 52 ± 0 | — | — | — |
| Downscale | 3916 ± 136 | — | — | — |
| Elastic | — | 1 ± 0 | 4 ± 0 | — |
| ElasticTransform | 418 ± 7 | — | — | — |
| Emboss | 1205 ± 14 | — | — | — |
| Grayscale | 515 ± 4 | — | — | — |
| GridDistortion | 810 ± 9 | — | — | — |
| GridDropout | 81 ± 78 | — | — | — |
| JpegCompression | 205 ± 3 | — | — | — |
| MedianBlur | 546 ± 15 | — | — | — |
| Morphological | 6610 ± 429 | — | — | — |
| MultiplicativeNoise | 2089 ± 71 | — | — | — |
| PadIfNeeded | 8504 ± 352 | — | — | — |
| PiecewiseAffine | 189 ± 3 | — | — | — |
| PixelDropout | 371 ± 7 | — | — | — |
| RandomGridShuffle | 4668 ± 657 | — | — | — |
| RandomRotate90 | 2137 ± 1277 | — | — | — |
| RandomScale | 882 ± 32 | — | — | — |
| RandomSizedCrop | 828 ± 37 | — | — | — |
| RingingOvershoot | 61 ± 32 | — | — | — |
| SafeRotate | 983 ± 76 | — | — | — |
| SaltAndPepper | 530 ± 9 | — | — | — |
| ShiftScaleRotate | 926 ± 44 | — | — | — |
| SquareSymmetry | 2325 ± 1080 | — | — | — |
| Transpose | 2081 ± 88 | — | — | — |
| UnsharpMask | 143 ± 5 | — | — | — |
Methodology
Test Environment
- Platform
- macOS arm64 (Apple M-series)
- CPU threads
- 1 (forced single-thread)
- Image channels
- 9
- Images per run
- 5
- Runs per transform
- 5
- Last run
- March 27, 2026
Library Versions
- Albumentationsx
- 2.1.1
- Kornia
- 0.8.2
- Torchvision
- 0.25.0
- NumPy
- 2.4.3
- 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.