一提到数字图像处理编程,可能大多数人就会想到 matlab
,但 matlab
也有自身的缺点:
不开源,价格贵
软件容量大。一般3G以上,高版本甚至达5G以上。
只能做研究,不易转化成软件。
因此,我们这里使用python脚本语言来进行数字图像处理。
要使用python,必须先安装python,一般是2.7版本以上,不管是在windows系统,还是linux系统,安装都是非常简单的。
要使用python进行各种开发和科学计算,还需要安装对应的包。
这和 matlab
非常相似,只是 matlab
里面叫工具箱(toolbox),而python里面叫库或包。
基于python脚本语言开发的数字图片处理包,其实很多,比如 PIL
, Pillow
, opencv
, scikit-image
等。
对比这些包,PIL
和 Pillow
只提供最基础的数字图像处理,功能有限;
opencv
实际上是一个c++库,只是提供了python接口,更新速度非常慢。
到现在python都发展到了3.5版本,而 opencv
只支持到python 2.7版本;
scikit-image
是基于 scipy
的一款图像处理包,
它将图片作为 numpy
数组进行处理,正好与 matlab
一样,
因此,我们最终选择 scikit-image
进行数字图像处理。
需要的安装包
因为 scikit-image
是基于 scipy
进行运算的,因此需要安装 numpy
和 scipy
。
要进行图片的显示,还需要安装 matplotlib
包,综合起来,需要的包有:
Python
Numpy
Cython
Six
SciPy
Matplotlib
NetworkX
Pillow
dask[array]
Windows下的安装
scikit-image
需要的包比较多,安装起来非常费事,尤其是 scipy
,在windows上基本安装不上。
但是不用怕,我们选择一款集成安装环境就行了。
如果在 Windows 下,推荐使用 Anaconda
,它把以上需要的包都集成在了一起,
因此我们实际上从头到尾只需要安装 Anaconda
软件就行了,其它什么都不用装。
Linux 下的安装
推荐使用 Linux 发行版 Debian, 及其一系列衍生版本(包括 Ubuntu )。
这个发行版非常好地打包了一系列 Python 工具。 安装 scikit-image
非常简单。
使用下面的命令:
$ sudo apt install python3-skimage
%matplotlib inline
from skimage import io
img=io.imread('/data/demo/foo1_x29d.jpeg')
io.imshow(img)
/tmp/ipykernel_45/296563949.py:5: FutureWarning: `imshow` is deprecated since version 0.25 and will be removed in version 0.27. Please use `matplotlib`, `napari`, etc. to visualize images. io.imshow(img)
<matplotlib.image.AxesImage at 0x7f6f4cb87fe0>
然后点击上面工具栏里的绿色三角进行运行。
如果右下角“ Ipython console” 能显示出图片,说明我们的运行环境安装成功。
我们可以选择右上角的 ” variable explorer” 来查看图片信息。
我们可以把这个程序保存起来,注意python脚本文件的后缀名为 py
。
skimage包的子模块
skimage
包的全称是scikit-image SciKit (toolkit for SciPy) ,它对 scipy.ndimage
进行了扩展,
提供了更多的图片处理功能。它是由python语言编写的,由 scipy 社区开发和维护。
skimage
包由许多的子模块组成,各个子模块提供不同的功能。主要子模块列表如下:
子模块名称 | 主要实现功能 |
---|---|
io |
读取、保存和显示图片或视频 |
data |
提供一些测试图片和样本数据 |
color |
颜色空间变换 |
filters |
图像增强、边缘检测、排序滤波器、自动阈值等 |
draw |
操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等 |
transform |
几何变换或其它变换,如旋转、拉伸和拉东变换等 |
morphology |
形态学操作,如开闭运算、骨架提取等 |
exposure |
图片强度调整,如亮度调整、直方图均衡等 |
feature |
特征检测与提取等 |
measure |
图像属性的测量,如相似性或等高线等 |
segmentation |
图像分割 |
restoration |
图像恢复 |
util |
通用函数 |
用到一些图片处理的操作函数时,需要导入对应的子模块,如果需要导入多个子模块,则用逗号隔开,如:
from skimage import io,data,color