ImagePy开发文档 —— 图像封装类

ImagePy 是一款基于 Python 的可扩展图像处理框架,可谓是 Python 版的 ImageJ,但设计更为精简,可以轻松接入 scipy, scikit-image, opencv 等任何基于 numpy 的图像处理库。

Github地址:下载地址 主页:imagepy.org/

ImagePlus

ImagePy 采用 Numpy 数组作为图像数据结构,Numpy 非常强大,但是要让它能够支持我们的全部特性(索引色支持,撤销,选区支持,多通道支持,图像栈支持),还需要一些其他的数据给予必要的辅助,因而我们有了ImagePlus类

结构图

我们可以看出,ImagePlus 确切说是一个 Numpy的容器,它装载了若干张图片,一张缓冲图,一个选区,一个掩膜,以及一个标记。

  • 图像序列与当前图像

    我们知道,ImagePlus 能够存储一系列的图片,然而时刻我们只能展示其中一张,这样就有了游标和当前图像的概念。我们可以获取图像列表,也可以获取当前图像。
  • look up table

    索引色是存放在 ImagePlus 中的,如果是单通道图像,那么在图像被绘制在 Canvas 上时,会自动套用索引。

  • snapshot

    ImagePlus 为我们准备了一个缓冲图像,最直观的看,它可以实现一步撤销功能。其实更重要的是,在一些滤波器运算中,我们必须有一张缓冲副本,才能够实施算法。有了snap的存在,可以节省不必要的内存开支,经济高效的完成一些任务。

  • reset

    帮助我们利用快照恢复当前图像,如果有掩膜存在,则只恢复掩膜内的像素。
  • swap

    交换快照与当前图像,这就是ImagePy撤销的实现,由于之缓存了一张,因此多次撤销只能两附图来回切换。
  • roi 与 mask

    roi 是通过交互完成的选区,而 mask 则是一张二值的标记图像。(很多时候,ImagePy自动用roi绘制mask)
  • mark

    之和显示相关,在图像上展示必要的提示信息。
    这些额外的信息能够帮助我们完成很多事情,比如 roi>mask + snap + reset选取外的内容,这样就实现了只对选区内的像素做处理的功能。本质上是整副图像都已经处理过,随后利用镜像回复选区以外的内容,看起来就像,之处理了选区内的像素。

类总览

成员

imgs:所持有的图像序列,(即便只有一张,也是作为序列)
imgtype:图像类型,他们有’8-bit’,’16-bit’,’rgb’,’float’
title:图像的标题
snap:图像快照
roi:与之相关的选区
mark:与之相关的标记
msk:掩膜(多是由选区自动生成)
lut:索引表

方法

设定属性

set_imgs:设定图像序列
set_cur:设定当前帧
set_title:设定图像标题

获取属性

get_img:获取当前图像
get_imgtype:获取图像类型
get_nslices:获取图像列表总数
get_nchannels:获取图像通道数
get_msk:获取掩膜

像素辅助操作

snapshot:对图像进行快照
reset:用快照恢复
swap:交换快照和前景

图像和图像栈

ImagePlus 的构造是或设定图像时需要传入图像序列 imgs,本质上是一个图像容器,可以装一张,也可以装多张。但是注意有如下区别

  • 单图

    单图的传入,也需要构造一个序列:[img]
  • 多图

    对于多图,有两种形式,离散列表和连续栈。
    1.离散列表 [img1, img2, img3…]
    2.连续栈 3d/4d Numpy array
    其中离散列表内存不连续,因而可以随时插入或删除切片,而连续栈在计算机中占据连续内存,这为一些计算提供了方便,但却不能动态的添加或删除切片。
  • 混淆

    如果现在有一张三通道的彩色图片,注意如下两种构造的区别:
    1.[rgb] 表示一个离散列表,里面装有一张彩色图像。
    2.rgb 则表示是一个连续栈,里面装有三张图像。

如希望阅读更多关于ImagePy的内容,请 回到 ImagePy 文档目录

编辑于 2017-02-28

文章被以下专栏收录

    ImagePy 是我的开源项目,本专栏为软件的普及和推广服务,介绍软件的用法,以及各种常用的基础图像处理算法,并结合案例,介绍各种实用技巧。