加入python的仙境,并以numpy兼容的方式解码所有图像
redpil的Python项目详细描述
红皮书
加入python的仙境,并在一个兼容numpy的版本中解码所有图像 太好了。
枕头是一个伟大的图像处理库。然而,许多行动失败了 枕头能做什么。因此,许多科学应用需要 图像作为numpy数组可用不过,枕头的记忆系统 在很大程度上与numpy不兼容。imageio在 Numpy和枕头(见下面的基准)。不幸的是,枕头 各种选择仍然令人困惑,要理解它们是如何运作的很有挑战性 一起。此外,代码库相当旧,用c编写,这意味着 扩展现有解码器的功能是很困难的。
对于大型图像,必须了解枕头和臀部的细节是一个严重的瓶颈。 图书馆的目标是以自然的方式读写图像 用户。图像显示为它们保存的值(而不是颜色中的索引 表)允许直接数据分析。
库尽可能地用python编写,允许新的解码 要使用的算法。
位图图像
通常,此库不会加载C-连续数组中的内存相当 内存顺序将主要与磁盘上保存的内容匹配。
位图图像的存储顺序与它们在 猛撞。
支持的文件格式
几乎完全支持读取BMP。写作仍然有限。
- bmp:1、4或8位/像素。Wikipedia
未来的文件格式
- bmp:更多覆盖范围
- JPEG,JPEG2000
- gif
- 巴布亚新几内亚
- SVG
- TIFF
基准
我没有像scikit image或dask那样的标杆服务,但是
下面是与PIL后端相比的基准测试结果。正在运行
在我的ssd上,一个三星960pro,声称它可以以1.8gb/s的速度写。
非常接近redpil
所达到的效果。
8位BMP灰度图像
保存图像:
================ ============ ============ ============
-- mode
---------------- --------------------------------------
shape redpil pillow imageio
================ ============ ============ ============
(128, 128) 93.4±1μs 254±30μs 369±20μs
(1024, 1024) 720±30μs 936±50μs 1.60±0.3ms
(2048, 4096) 5.25±0.7ms 5.20±0.1ms 10.4±2ms
(32768, 32768) 480±10ms 489±5ms 1.34±0.09s
================ ============ ============ ============
读图
================ ============= ============ =============
-- mode
---------------- ----------------------------------------
shape redpil pillow imageio
================ ============= ============ =============
(128, 128) 131±5μs 293±10μs 130±2μs
(1024, 1024) 194±10μs 1.03±0.1ms 192±5μs
(2048, 4096) 1.69±0.05ms 8.55±1ms 1.67±0.03ms
(32768, 32768) 350±3ms 230±5μs 354±10ms
================ ============= ============ =============
注意,枕头拒绝读取1GB的图像,因为它认为这是一个叉形炸弹。
修补图像o
可以看到,imageio/scikit image的团队在阅读方面比其他团队强得多 枕头文件和了解如何有效使用它。他们的 阅读速度实际上与redpil的阅读速度相匹配,尽管它们 使用枕头作为后端。他们甚至处理枕头认为是叉形炸弹的东西。
通过编写这个模块,在imageio中发现了两个影响 保存图像的速度imageio PR #398,以及如何读取图像 imageio PR #399
使用PR 398时,imageio+枕头的保存速度现在与redpil相同。 注意我在运行基准测试时总是使用计算机,所以 一粒盐的数字。
保存
================ ============ ============ ============
-- mode
---------------- --------------------------------------
shape redpil pillow imageio
================ ============ ============ ============
(128, 128) 98.3±4μs 245±7μs 350±4μs
(1024, 1024) 714±20μs 921±30μs 997±20μs
(2048, 4096) 4.83±0.3ms 5.30±0.4ms 5.26±0.2ms
(32768, 32768) 520±40ms 516±30ms 489±9ms
================ ============ ============ ============
阅读
================ ============= ============ =============
-- mode
---------------- ----------------------------------------
shape redpil pillow imageio
================ ============= ============ =============
(128, 128) 129±0.7μs 284±2μs 129±0.7μs
(1024, 1024) 191±2μs 1.12±0.1ms 190±0.9μs
(2048, 4096) 1.62±0.03ms 8.88±1ms 1.63±0.02ms
(32768, 32768) 357±9ms 223±4μs 361±8ms
================ ============= ============ =============
历史记录
0.0.1(2018-09-22)
- pypi上的第一个版本。