雷锋网 AI 科技评论按, ImagePy 是一款 python 开源图像处理框架, 其 UI 界面支持开放插件. 在 GitHub: https://github.com/Image-Py/imagepy 上, 不仅有关于这款图像处理软件的详细介绍, 还有一些使用示例, 雷锋网 (公众号: 雷锋网) AI 科技评论接下来将详细介绍这一开源图像处理框架.
ImagePy 是一款基于 imagej 等插件的图像处理框架, 它可以与 scipy.ndimage,scikit-image,opencv,simpleitk,mayavi 以及任何基于 numpy 的库进行组合使用, 其地址为 http://imagepy.org/ .
简介
ImagePy 是用 python 编写的开源图像处理框架. 它的 UI 接口, 图像数据结构和表数据结构分别是基于 wxpython,numpy 和 pandas 的. 此外, 它支持任何基于 numpy 和 pandas 的插件, 这些插件可以轻松地在 scipy.ndimage,scikit-image,simpleitk,opencv 和其他图像处理库之间进行通信.
概览, 鼠标测量, 几何变换, 过滤, 分割, 计数等
如果你更喜欢 IJ 样式, 请尝试使用「 Windows -> Windows Style 」来切换
ImagePy:
具有用户友好的界面;
可以读取 / 保存各种格式的图像数据;
支持 ROI 设置, 绘图, 测量和其他鼠标操作;
可以执行图像滤波, 形态学操作和其他常规操作;
可以进行图像分割, 区域计数, 几何测量和密度分析;
能够对从图像中提取的参数进行相关的数据分析, 滤波, 统计分析等.
这个项目的长期目标是成为 ImageJ 和 SPSS 的联合体.
地址:
安装:
支持的系统: 带有 python2.7 和 python3 及以上版本的 Windows,Linux,Mac 系统.
ImagePy 是一个基于 wxpython 的 ui 框架, 它不能在 Linux 上用 pip 进行安装. 你需要下载和你的 Linux 系统相匹配的 whl 文件.
因为 ImagePy 会编写一些配置信息, 因此, 在 Linux 和 Mac 系统上, 可能会存在权限问题, 所以请从 sudo 命令开始. 如果使用 pip 安装, 请按照下面的方法来添加用户参数: pipsinstall--user imagepy.
如果在 anaconda 虚拟环境中安装 ImagePy, 那么你可能会遇到这样的错误: 这个程序需要屏幕访问权限. 请使用 python 构建的框架来运行, 并且只有在你已经登录到主显示器上时才这样做, 如果遇到这个问题, 请从 pythonw-m 镜像开始.
基本操作:
ImagePy 有一组非常丰富的特性, 在这里, 我们使用一个具体的示例向你展示 ImagePy 的这些特性. 我们选择官方使用 scikit-image 来分割硬币的例子, 因为这个例子简单而全面.
打开图像
菜单打开: file -> local samples -> coins, 来打开 ImagePy 中的示例图像. ps:ImagePy 支持 bmp,jpg,PNG,gif,tif 和其他常用的文件格式. 通过安装 ITK 插件, 还可以读取 / 保存 dicom,nii 和其他格式的医学图像. 如果安装了 opencv, 还可以读 / 写 wmv,avi 和其他格式的视频.
硬币
过滤与分割
选择一个复合滤波器对图像进行 sobel 梯度提取, 然后使用上下阈值作为标记, 最后在梯度图上进行 watersheds 分割. 滤波和分割是图像处理工具包中的关键技术, 也是最终测量成败的关键. 还支持诸如自适应阈值, watersheds 等分割方法.
Up And Down Watershed 分割
掩模
二值化
菜单打开: process -> binary -> binary fill holes
分割后得到的掩模图像比较干净, 但仍存在一些空洞和杂质, 干扰了计数和测量. ImagePy 支持二进制操作, 如腐蚀, 膨胀, 开环和闭环, 以及轮廓提取, 中心轴提取和距离转换.
填洞
几何滤波
菜单打开: analysis -> region analysis -> geometry filter
ImagePy 可以根据面积, 周长, 拓扑, 稳定性和离心率等参数进行几何滤波. 还可以使用多个条件进行筛选. 每个数字可以是正的 (或者负的), 这表示所保存的对象的相应参数分别大于(或者小于) 相对值. 保存的对象将被设置为前色, 拒绝的对象将被设置为背景色. 在这个演示中, 背景颜色设置为 100, 以便查看有哪些对象被过滤掉了. 一旦对结果满意, 就将背景色设置为 0. 此外, ImagePy 还支持灰度密度滤波, 颜色滤波, 颜色聚类等功能.
几何滤波
几何分析
菜单打开: process -> region analysis -> geometry analysis count, 计算面积并分析参数. 通过选择 cov 选项, ImagePy 使用通过协方差计算的椭圆拟合每个区域. 这里计算前面步骤中所示的参数, 如面积, 周长, 离心率和稳定性. 事实上, 前一步的滤波正是对这一步的准备.
几何分析
生成结果表(背景是黑色, 以强调椭圆)
按区域对表进行排序
菜单打开: table -> statistic -> table sort by key
选择主键作为区域, 并选择 descend, 表将按面积的降序排序. 表是除了图像之外的另一项重要数据. 从某种意义上来说, 很多时候我们需要获得图像的相关信息, 然后以表的形式对数据进行后续处理. ImagePy 支持表 I/O(xls,xlsx,CSV), 过滤, 切片, 统计分析, 排序等等(右键单击列标题来设置文本颜色, 小数精度, 行样式等).
表
图表
菜单打开: table -> chart -> hist chart
我们经常需要利用表格数据来绘制一个图表. 这里, 我们绘制了某个区域和其周边列的直方图. ImagePy 的表可以用于绘制常见的图表, 如柱状图, 饼图, 直方图和散点图(基于 matplotlib). 该图表带有缩放, 移动和其他功能, 并可以保存为图像.
直方图
3D 表格
菜单打开: kit3d -> viewer 3d -> 2d surface
图像的表面重建. 这幅图像显示了三种方式的重建结果, 包括: sobel 梯度图, 高阈值和低阈值. 它显示了 Up And Down Watershed 是如何工作的:
计算梯度;
通过高低阈值标记硬币和背景;
在 dem 图表上模拟上升 water 来形成分割线.
ImagePy 可以完成图像的 3d 滤波, 3d 轮廓构建, 3d 拓扑分析, 2d 表面重建和 3d 表面可视化. 3d 视图可以被自由拖动, 旋转, 其结果可以保存为. stl 文件.
3d 可视化
宏记录和执行
菜单打开: Windows -> develop tool suite
宏记录器显示在开发工具面板中. 我们已经手动完成了一个图像的分割. 然而, 用这种方式一下子处理超过 10 幅图像是非常乏味的. 因此, 假设在处理这些问题的时候, 这些步骤具有高度的可重复性和健壮性, 我们可以记录一个宏, 以便将几个处理过程组合成一个单击程序. 宏记录器与无线电记录器相似. 打开后, 它将记录操作的每个步骤. 我们可以点击暂停按钮停止录制, 也可以点击播放按钮开始录制. 当宏运行时, 所记录的命令将按照顺序执行, 因此它具有简单性和可再现性.
宏被保存到 .mc 文件中. 将文件拖放到 ImagePy 底部的状态栏中, 宏将自动执行. 我们还可以将 .mc 文件复制到 ImagePy 文件目录下的菜单的子菜单中. 当启动 ImagePy 时, 宏文件将被解析为相应位置的菜单项. 通过单击菜单, 宏将被执行.
宏记录
Workflow
宏是一系列预定义的命令. 通过将一系列固定操作记录到宏中, 可以提高工作效率. 然而, 宏缺乏灵活性. 例如, 有时主要步骤是固定的, 但是参数调优需要人工参与. 在这种情况下, workflow 就可以解决这个问题. ImagePy 中的 workflow 是可视化的流程图, 分为两个层次: 章节和部分. 本章对应于 workflow 中的矩形区域, 并且该部分是矩形区域中的按钮, 也是命令, 并附有图形说明. 右边的消息窗口将显示相应的功能描述, 同时鼠标悬停在上面. 单击右上角的 "详细文档", 查看整个过程的说明文档.
workflow 实际上是用 Markdown(一种标记语言)编写的, 但是在编写时你需要遵守以下规范:
- Title
- =====
- ## Chapter1
- 1.
- Section1
some coment for section1 ...
- 2. ...
- ## Chapter 2 ...
workflow
滤波器插件
在最后一节中, 我们介绍了宏和 workflow, 使用宏和 workflow 连接现有功能很方便. 但有时我们需要创建新的特性. 在本节中, 我们将尝试向 ImagePy 添加一个新特性. ImagePy 可以轻松访问任何基于 numpy 的函数. 让我们以 scikit-image 的 canny 操作符为例.
示例代码如下:
- from skimage import feature
- from imagepy.core.engine import Filter
- class Plugin( Filter ):
- title = 'Canny'
- note = [ 'all' , 'auto_msk' , 'auto_snap' , 'preview' ] para = {
- 'sigma' : 1.0 , 'low_threshold' : 10 , 'high_threshold' : 20
- }
- view = [ ( float , 'sigma' , ( 0 , 10 ) , 1 , 'sigma' , 'pix' ) ,
- ( 'slide' , 'low_threshold' , ( 0, 50 ) , 4 , 'low_threshold' ) ,
- ('slide' , 'high_threshold' , ( 0 , 50 ) , 4 , 'high_threshold' ) ]
- def run ( self , ips , snap , img , para = None ) :
- return feature.canny (snap , para[ 'sigma' ] , para[ 'low_threshold' ] ,
- para[ 'high_threshold' ] , mask = ips.get_msk () ) * 255
Canny 滤波器示例
创建自己的滤波器的步骤:
导入对应的库, 通常是第三方库.
继承 filter 类.
标题将用作菜单的名称和参数对话框的标题, 也用作宏记录的命令.
在 note 中告诉框架它需要为你做什么, 是否进行类型检查, 是否支持选择, 是否支持 UNDO 等等.
para 是一个参数字典, 包含函数所需的参数.
为视图中的每个参数定义交互方法, 框架将通过读取这些信息自动生成用于参数调优的对话框.
编写主函数 run.img 是当前图像, para 是用户的输入参数. 如果在 note 中设置了 auto_snap,snap 将是 img 的一个副本. 我们可以处理这个副本, 将结果存储在 img 中. 如果函数不支持指定的输出, 我们还可以返回结果, 框架将帮助我们将结果复制到 img 并显示它.
将文件保存为 xxx_plg.py, 然后复制到菜单文件夹, 重新启动 ImagePy. 它将被作为菜单项加载.
这个框架为我们做了什么?
该框架以正式的方式把复杂的任务融合在一起, 并帮助我们执行了:
类型检查. 如果当前图像类型不满足注释中的要求, 则终止分析;
根据参数, 自动生成对话框以并检测输入的合法性;
实时预览;
自动 ROI 支持;
撤消支持;
并行化支持;
图像堆栈支持;
其它.
表
如前所述, 表是除了图像之外的另一种非常重要的数据类型. 类似地, ImagePy 也支持表的扩展. 这里我们给出在前面描述中使用的按键排序的示例.
代码为:
- from imagepy.core.engine import Table
- import pandas as pd
- class
- Plugin( Table ) :
- title = 'Table Sort By Key'
- para = {
- 'major':None , 'minor' : None , 'descend' : False
- } view = [ ( 'field' , 'major' , 'major' , 'key' ) ,
- ( 'field' , 'minor' , 'minor' , 'key' ) ,
- ( bool , 'descend' , 'descend' ) ]
- def
- run( self , tps , data , snap , para = None ) :
- by = [ para[ 'major' ] , para[ 'minor' ] ]
- data.sort_values( by = [ i for i in by if i ! = 'None' ],
- axis = 0 , ascending = not para[ 'descend' ] , inplace = True )
表排序示例
表是如何工作的
与滤波器相同, 表中还有标题 (title), 注释(note), 参数(para), 视图(view) 等参数. 当插件运行时, 框架将根据和视图生成一个对话框. 在选择 para 之后, 将它们与当前表一起传递给 run 函数处理. 表数据是当前表中的一个 pandas.DataFrame 对象, 存储在 tps 中. 还可以从 tps 检索其他信息, 例如 tps.rowmsk,tps.colmsk, 以获得当前选定表的行和列掩码.
其他类型的插件
上述的滤波器和表是两个最重要的插件, 但是 ImagePy 也支持一些其他类型的插件扩展. 目前它支持的插件有九个, 它们是:
滤波器: 主要用于图像处理;
simple: 类似于滤波器, 但关注图像的整体特性, 如 ROI 的操作, 假彩色的操作, 面积的测量, 或整个图像的三维分析, 可视化等;
free: 独立于图像的操作. 用于打开图像, 关闭软件等;
tool: 使用鼠标在图表上进行交互, 并在工具栏上显示小图标, 如画笔;
table: 对表进行操作, 如统计分析, 排序, 绘图等;
widget: 显示在面板中的小部件, 如右侧的导航栏, 宏记录器等;
Markdown: 标记语言, 单击时, 将弹出一个单独的窗口来显示文档;
macros: 用于串行固定操作过程的命令序列文件;
workflow: 结合宏和 Markdown 创建交互式指导过程.
动机与目标
python 是一种简单, 优雅, 强大的语言, 并且具有非常丰富的科学计算相关的第三方库. 一方面, 基于通用矩阵结构和相应的规则, 基于 numpy 的 scipy,scikit-image,scikit-learning 等科学计算库给科学研究带来了极大的便利. 另一方面, 通过科学计算, 图像处理, 可以高效准确地解决生物学, 材料科学等科学研究中越来越多的问题.
然而, 仍然有许多研究人员缺乏编程技巧. 因此, 让更多的研究人员能够使用基于 numpy 的科学计算库是至关重要的. ImagePy 使不是程序员研究人员也能使用计算机进行科学计算, 因此他们不需要关注 UI 和交互设计, 只需要关注算法本身, 最终加速开源工具构建甚至商业产品的孵化. 同时, 这些工具可以让更多不善于编程的人获取, 推广和普及图像处理, 统计学等科学知识.
来源: http://www.tuicool.com/articles/6BVz2mF