加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。点击文末“阅读原文”立刻申请入群~

作者:闫霄龙

本文为极市原创,授权转载可联系小助手(Extreme-Vision)

今天想给大家推荐一个非常好用的开源的图像处理工具ImagePy,作者之前有在极市进行过图像处理的分享。

ImagePy是基于Python开发的开源图像处理框架,采用wxpython界面基础,基于

Numpy为核心图像数据结构,pandas为核心表格数据结构,并支持任何基于Numpy,pandas的插件扩展,可以方便的接入scipy.ndimage,scikit-image, simpleitk, opencv等算法库进行插件扩展。

GitHub:https://github.com/Image-Py/imagepy

总览,鼠标测量,几何变换,滤波,分割,计数等

习惯ImageJ的用户可以在Windows > Windows Style进行风格切换

特点:软件具有友好的用户操作界面,能读取,保存多种图像数据格式,支持ROI设定,绘图,测量等鼠标操作。能完成图像滤波,形态学运算等常规操作,可以很好的完成一些分割,区域计数,几何测量,密度分析相关的工作。并可以对分析结果进行数据筛选,过滤,统计等相关工作。(软件功能定位可以理解为ImageJ + SPSS,虽然目前尚未达到)

论文:ImagePy: an open-source,Python-based and platform-independent software package for bioimage analysis

链接:https://academic.oup.com/bioinformatics/article/34/18/3238/4989871

论坛:ImagePy 是forum.image.sc的合作伙伴,任何关于ImagePy的开发及使用上的问题都可以在https://forum.image.sc讨论。

安装过程可能遇到的问题

系统支持:ImagePy支持Python2.7及3.x,但强烈推荐大家使用python3.ImagePy 是一个基于 wxpython 的 ui 框架,wxpython在linux 上不能用 pip 进行安装。你需要从https://extras.wxpython.org/wxPython4/extras/linux下载和你的 linux 系统相匹配的 whl文件。

因为 ImagePy 会编写一些配置信息,因此,在 linux 和 mac 系统上,可能会存在权限问题,所以请从 sudo 命令启动。如果使用 pip 安装,请按照下面的方法来添加用户参数:pip install --user imagepy。

如果在 anaconda 虚拟环境中安装 ImagePy,那么你可能会遇到这样的错误:This program needsaccess to the screen. Please run with a Framework build of python, and onlywhen you are logged in on the main display,如果遇到这个问题,请用pythonw-m imagepy启动。

功能简介:

ImagePy具有非常丰富的功能,而这里,我们仅仅用一个特定的例子,来对ImagePy进行一个初步的认识,我们这里选取scikit-image官方的硬币分割,相比之下,这个例子简单而全面。

图像打开

菜单:File > Local Samples > Coins,打开ImagePy的内置示例图像。ImagePy支持bmp, jpg, png, gif, tif等常见图像类型,支持xls, xlsx,csv表格格式,通过ITK插件,也可以获得dicom,nii等医学数据格式的读取存储功能,而通过OpenCV插件,可以获得wmv,avi等视频格式的读取存储功能。

滤波,分割

菜单:Process > Hydrology > Up And Down Watershed,这里选用一个复合滤波器,对图像进行sobel梯度提取,然后通过上下阈值标定作为mark,在梯度图上进行分水岭分割。滤波,分割是图像处理过程中的核心技巧,是最终测量结果成败的关键,ImagePy支持常见的高斯,均值,中值,梯度,拉普拉斯,差分高斯等滤波,也包含自适应阈值,分水岭等分割方法。

二值运算

菜单:Process > Binary > Binary Fill Holes

经过上述分割,我们得到了相对纯净的掩膜图像,但依然存在一些镂空,以及少许外界杂质,这些会对计数和测量造成干扰,我们对图像进行二值填充。ImagePy支持腐蚀,膨胀,开,闭等二值化基础操作,也支持骨架,中轴线提取,距离变换等操作。

区域过滤

菜单:Analysis > Region Analysis > Geometry Filter,对区域进行过滤,这里可以简单的通过面积进行过滤,ImagePy的几何过滤可以通过面积,周长,拓扑,丰满度,偏心率等指标对区域进行过滤,可以输入复合条件,正数表示选择大于等于,负数表示选择小于,通过过滤的被设定为front color,没通过的设定为back color,back color设定为100可以清楚看到有哪些被滤掉了,如果确认符合要求,back color设定为0,即清除。同时ImagePy也支持灰度密度过滤,颜色过滤,色彩聚类等功能。

区域过滤(这里为了看清效果,area设定的较大,实际只需要过滤碎片)

区域分析

菜单:Process > Region Analysis > Geometry Analysis,对区域进行计数和指标分析,这里我们勾上cov,即对区域进行协方差椭圆拟合。ImagePy支持面积,周长,偏心率,丰满度等指标,其实上一步的过滤正是在这里的分析结果基础上进行的。

区域分析

生成结果表格(这里为了看清椭圆,把区域亮度降低了)

按照面积排序

菜单:Table > Statistic > Table Sort By Key,选择第一主键为area,勾上descend,即按照面积降序排列。表格是图像之外的另外一种重要的数据,某种意义上,很多时候我们都需要在图像上得到需要的信息后,以表格的形式对数据进行后期加工。ImagePy支持表格筛选,截取,统计,排序等功能。

在列头单击右键可以设定文字颜色,小数精度,线条样式等

统计图表

菜单:Table > Chart > Hist Chart,表格数据一个常见的需求是绘制图表,这里我们对面积,周长两列进行直方图统计,得到分布直方图。ImagePy的表格可以绘制折线图,饼状图,柱状图,散点图等常见的图表。图表自带缩放,移动等功能,也可以存储为图片。

统计直方图

三维图

菜单:Kit3D > Viewer 3D > 2D Surface,对图像进行表面重建,这里其实是分别重建了sobel梯度图,高阈值,低阈值三个结果。图上可以清楚的看懂Up And DownWatershed的工作原理,首先计算梯度,然后通过高低阈值标记硬币和背景,最终在dem图上模拟涨水,形成分割。ImagePy可以做图像的三维滤波,三维骨架,三维拓扑分析,也可以对数据进行二维表面重建,以及三维表面可视化。三维视图中可以自由拖动,旋转视角,图片结果也可以输出为stl文件。

三维可视乎

宏录制与执行

菜单:Window > Develop Tool Sute, 打开开发者工具,我们看到宏录制器。以上我们手工完成了一个图像数据分割,假设这些流程非常固定,并且很适合处理这类问题,而一次次的重复点击会让人审美疲劳。这种情况我们可以通过宏录制,来将若干过程捏合成一步。宏录制器类似一个录音机,打开时,我们每一步操作会形成一行记录。而我们可以点暂停键停止录制,点播放键执行。当宏运行是,会依次质心记录下来的命令,从而实现将若干步骤捏合成一步。

我们将宏保存为一个.mc文件,将文件拖放到ImagePy最下方的状态栏,宏会自动被执行,我们还可以将mc文件拷贝到ImagePy文件目录下的menus的子目录下,文件启动时,宏文件会被在对应位置解析成一个菜单项,当我们点击菜单,宏也会执行。

宏录制

工作流

宏是一串固定的命令序列,通过将一系列固定的操作制作成宏,可以提高工作效率,但缺点是缺乏变通性,比如有时候我们的流程基本固定,但是一些细节,或者参数的设定上需要借助人工交互,这时候,工作流就可以很好的满足我们。工作流是一个流程图,分成,章,节,两个层次。章在流程图中对应于一个矩形区域,而节是矩形区域中的一个按钮,也是一条命令,并配有一段图文解释。当鼠标移动到按钮上,右侧的信息窗就会显示对应的功能说明。点击右上角的Detail Document,查看整个流程的文档。

工作流的编写,实际上是一段MarkDown标记语言,但是需要按照规范编写,大致如下:

Title

===

## Chapter1

1. Section1

some coment for section1 ...

2. ...

## Chapter 2

...

工作流

Filter插件

以上我们介绍了宏和工作流,利用宏和工作流可以串联已有的功能,但不能制造新的功能,而这里我们试图为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')]

defrun(self, ips, snap, img, para = None):

returnfeature.canny(snap, para['sigma'], para[low_threshold'],

para['high_threshold'], mask=ips.get_msk())*255

滤波器的作用机制:引入需要的库,往往是第三方的库。

继承Filter。

Title,标题,将作为菜单的名称和参数对话框的标题,也作为宏录制的命令。

Note,指明需要框架为你做什么,是否需要做类型检查,是否支持选区,是否支持撤销等。

Para,参数字典,核心函数需要用到的参数

View,参数视图,指明每个参数对应的交互方式,框架会根据这里的信息自动生成交互对话框。

核心函数,img是当前图像,para参数交互结果,如果note里设定了auto_snap,则img也被复制到snap,我们可以对snap进行处理,将结果存放在img中,如果函数不支持指定输出,我们也可以return处理结果,框架会帮我们将结果拷贝给img并展示。

将文件存储为xxx_plg.py,并拷贝到ImagePy > Menus目录下,重启,会被加载成一个菜单项。

框架帮我们做了什么?

框架将复杂的任务进行了形式上的统一,并且帮我们进行类型检查,如果当前图像类型不符合note中的要求,则终止分析,根据para,view自动生成对话框,检测输入合法性,对图像进行实时预览,自动提供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')]

defrun(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)

Table的作用机制

类比Filter,Table同样有title,note,para,view参数,当插件运行是框架通过para,view解析为对话框,交互完成后,参数和当表格会一起传递给run,run中对表格进行核心处理,data是当前表格对应的pandas.DataFrame对象,tps中存储了其他信息,比如tps.rowmsk,tps.colmsk可以拿到当前表格被选中的行列掩膜。

其他插件类型

上面介绍的Filter和Table是最重要的两种插件,但ImagePy也支持其他一些类型的插件扩展,目前有九种,他们是:

1. Filter:主要用来对图像进行处理

2. Simple:类似于Filter,但侧重与图像的整体特性,比如对ROI的操作,对假彩色的操作,区域测量,或者对整个图像栈进行的三维分析,可视化等。

3. Free:用于不依赖图像的操作,比如打开图像,关闭软件等。

4. Tool:借助鼠标在图上进行交互,将以小图标的形式出现在工具栏上,例如画笔。

5. Table:对表格进行操作,例如统计,排序,出图。

6. Widget:以面板形式展现的功能部件,例如右侧的导航栏,宏录制器等。

7. Markdown:MarkDown标记语言,点击后会弹出独立窗口展示文档。

8. Macros:命令序列文件,用于串联固定的操作流程。

9. Workflow:工作流,宏和MarkDown的结合,用于制作交互式指引流程。

开发意义

Python是一门简单,优雅,强大的语言,并且在科学计算方面有非常丰富的第三方库,并且Numpy制定了良好的规范,建立在Numpy基础上的Scipy,scikit-image,scikit-learn等科学计算库给科研工作带来了极大的便利。另一方面,科学计算,图像处理在生物,材料等科研领域可以高效准确的解决越来越多的问题,然而依然有很多科研工作者编程能力比较薄弱,因此让Numpy系列的科学计算库造福更多科研工作者是一项非常有意义的工作。而ImagePy就是一座桥梁,尽可能的让科学计算工作者隔离自己不擅长的UI和交互设计,着重精力处理算法本身,并且可以快速形成工具甚至产品,而这些工作又可以让更多不擅长编程的科研工作者收益,推广和普及图像处理,统计等科学知识。

python开发图片工具_工具|ImagePy:一款基于Python的高扩展性开源图像处理框架相关推荐

  1. python自动化测试实战 虫师_《Selenium2自动化测试实战--基于Python语言》 --即将面市...

    发展历程: <selenium_webdriver(python)第一版> 将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第二版 ...

  2. 用python编写图片生成器_不到100行代码 Python制作一个九宫格图片生成器,炫酷朋友圈!...

    朋友圈下面的这种图片排列风格,相比大家一定会很熟悉,有关于职位招聘的 Snipaste_2020-08-02_19-48-58.png 祝贺节日的, Snipaste_2020-08-02_19-49 ...

  3. python开发grasshopper插件_在Rhino/Grasshopper中使用Python

    一些基本的信息可以在官方网站(http://wiki.mcneel.com/developer/python)找到. 让人遗憾的是,目前还没有方便有效的方法可以在Rhino/Grasshopper中使 ...

  4. 微软的python开发工具_面向 Python 开发人员的 Azure 工具

    面向 Python 开发人员的 Azure 工具Azure tools for Python developers 08/06/2020 本文内容 Visual Studio CodeVisual S ...

  5. python图片转pdf文件_用python 制作图片转pdf工具

    这篇文章主要介绍了用python 制作图片转pdf工具的思路及代码,非常详细,有需要的小伙伴参考下 最近因为想要看漫画,无奈下载的漫画是jpg的格式,网上的转换器还没一个好用的,于是乎就打算用pyth ...

  6. python开发环境推荐_推荐一款Python开发环境管理神器

    在 Python 开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求.比如: 有多个Python项目,每个项目依赖不同的Python版本. 有一个Python项目,它需要同时 ...

  7. python做一个本地搜索工具_SecretFinder:一款基于Python脚本的JavaScript敏感信息搜索工具...

    SecretFinder工具介绍 SecretFinder是一款基于LinkFinder实现的Python脚本(如需BrupSuite版本,请点击这里),该工具的主要功能是帮助研究人员发现JavaSc ...

  8. wafw00f--一款基于python识别网站WAF的工具

    渗透时候经常会被waf之类的拦截,这时候需要知道目标站点使用了什么防火墙,然后才能根据对应防火墙寻找绕过的姿势.wafw00f就是一款识别网站防火墙的工具. 文章目录 简介 原理 项目地址 命令参数 ...

  9. numpy是python标准库吗_吐血 整理!140种Python标准库、第三方库和外部工具都有了...

    Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连接.数 ...

最新文章

  1. Spring+Hibernate+Struts2整合所需要的Jar包
  2. ADB 无线连接设备
  3. laravel大型项目系列教程(六)之优化、单元测试以及部署
  4. 华北科技学院计算机期末考试,华北科技学院 专业计算机 考试专用
  5. 使用HTML5的Canvas画布来剪裁用户头像
  6. Kelvin云层效果Ps笔刷
  7. ubuntu将一个文件夹下的所有内容复制到另一个文件夹下
  8. mybatis 插件
  9. adb命令自动旋转屏幕
  10. mac电脑投屏到小米盒子_苹果手机搜不到小米盒子怎么办?
  11. 一步一步教你做微博用户画像分析:Python微博爬虫+词云生成
  12. Win10禁止Nvidia显卡驱动程序自动更新
  13. 基于Echarts实现可视化数据大屏大数据可视化
  14. U-Net深度学习灰度图像的彩色化
  15. 4K屏幕/高分辨率屏幕运行VMware虚拟机图标字体太小问题解决方案(linux系统)
  16. 用python画四瓣树叶_使用Python turtle画分形树叶图
  17. 离散数学数理逻辑部分【1】
  18. 00后专访:我是如何初中毕业年仅16岁便踏入北漂码农行业的(一)
  19. 思维模型 元认知(创造)
  20. python编程无师自通pdf_Python编程无师自通:专业程序员的养成 PDF下载

热门文章

  1. 简单了解事件冒泡和阻止事件冒泡
  2. java 错误代码 返回格式_java – 不兼容的类型:lambda表达式中的错误返回类型?...
  3. html2canvas手机黑屏,华为手机使用canvas.getContext('2d')真机黑屏
  4. H3C V7 旁挂防火墙静态路由引流
  5. vsCode 文件保存自动格式化 设置
  6. 数据挖掘--决策树ID3算法(例题)
  7. RobotStudio_2019.5.2最新版安装、试用与示教器操作
  8. Centos7 搭建FTP文件服务器
  9. java 输出学生成绩和成绩等级
  10. P3258 [JLOI2014] 树上差分