与大图像更友好的matplotlib交互

ModestImage的Python项目详细描述


#modestimage


*与大图像的matplotlib交互更友好*


*绘制时间(大致)与图像大小无关
*可以可视化大的“numpy.memmap”数组,而无需对整个数组进行
内存复制。这使得
图像的可视化效果变得太大而无法放入内存。



`
将matplotlib.pyplot导入为plt
从适度映像导入适度映像imshow

ax=plt.gca()
imshow(ax,image_array,vmin=0,vmax=10)
plt.show()
````

``imshow``接受matplotlib
函数所做的所有关键字参数。“vmin”和“vmax”关键字不是必需的
,但如果没有提供,则会扫描整个图像以确定最小/最大值。如果数组很大,则速度可能会很慢。


>要直接创建一个谦逊的图像艺术家,请直接:


``````
````

````
``````
artist=modedsimage(data=数组)
`````
``
`````
import matplotplotlib.pyplot plt
import pyfits


```````>
`````````>
`>
x=plt.gca()
_数组=pyfits.open('file_name.fits',memmap=true)[0].data
artist=imshow(ax,巨型数组,vmin=0,vmax=10)
plt.show()
````


这几乎立即打开,内存占用不大。





对于设置颜色映射或数据
数组后的第一个绘制请求,axesimage(默认matplotlib图像类)计算数据数组中每个像素的
rgba值。对于
大图像来说,这是一个很大的工作量,而且如果最终渲染受到屏幕分辨率(通常为100k-1m像素)的限制,而不是图像分辨率(通常要高得多),则通常会过度渲染。


axesimage通过保存这个
缩放的结果来对此进行补偿。这意味着仅更改
位置或缩放级别的后续渲染速度非常快。然而,在交互
的情况下,数据数组或强度刻度经常变化,
axesimage会浪费大量时间计算(潜在较大)数据集中每个像素的rgba值。它还会生成几个临时的
数组,其大小与原始数组相当,从而浪费内存。



modedsimage在每次绘制请求时对图像阵列重新采样,提取
分辨率和范围与屏幕
分辨率匹配的较小图像。因此,rgba缩放步骤要快得多,因为它只对与当前渲染相关的像素进行
放置。


此方案不利用axesimage的缓存,因此移动和缩放操作后的
重绘速度稍慢。然而,
在颜色映射和数据更改之后绘制的速度要快得多,而且大多数
重绘都足够快,可以交互使用。

对于1000x1000像素图像:

```
执行轴图像测试


绘制时间:每次操作186 ms
移动时间:每次操作19 ms
移动时间:每次操作28 ms


执行谦逊图像测试

绘制时间:每次操作25 ms
移动时间:20 ms每次操作的毫秒数
时间移动缩放:每次操作的28毫秒数
```

``时间绘制``是清除缓存后的呈现时间
(例如,在``设置'数据之后``已调用,或颜色映射已被更改。虽然与axesimage竞争的移动和缩放操作(axesimage使用缓存数据)相比,
由于对图像进行降采样的方式,
因此,在像素级别上,modedsimage不会始终生成与axesimage相同的结果。但是,差异很小,如果不进行下采样(即屏幕像素采样<;=1个数据像素),则差异消失

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法