图像处理与分类
Python有很多的数字图像处理相关的包,像PIL
, Pillow
, OpenCV
, scikit-image
等等。
其中PIL
和Pillow
只提供最基础的数字图像处理,功能有限。
OpenCV实际上是一个c++库,只是提供了Python接口。
scikit-image
是基于SciPy的一款图像处理包,它将图片作为NumPy数组进行处理,与matlab处理方法类似**。(对图像的简单处理如截取、擦除、改变RGB某一通道的值或者拼接只需要对对应的数组进行操作即可)**
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——通用函数。
(1)读取图像文件
skimage.io.imread(fname, as_gray=False, plugin=None, flatten=None, **plugin_args)
其中fname接收字符串,表示文件名称或URL.
读取到的图像文件储存为一个三维数组,第三维依次表示R、G、B通道。
该方法返回ndarray.
(2)显示图像
skimage.io.imshow(arr, plugin=None, **plugin_args)
arr接收数组或字符串,表示要显示的图像数据或图像文件的名字。
(3)显示搁置图像
skimage.io.show()
显示搁置的图像,常与imshow()配合使用,如在一个循环体中用imshow()方法要显示多幅图像,在循环体内这些图像将暂时搁置,在循环体外使用show()方法将它们显示。
(4)保存图像
skimage.io.imsave(fname, arr, plugin=None, check_contrast=True, **plugin_args)
fname接收字符串,表示要保存的图像的目标名字。arr接收数组,表示图像数据。
5)缩放图像
skimage.transform.rescale(image, scale, order=1, mode='reflect', cval=0, clip=True, preserve_range=False, multichannel=None, anti_aliasing=True, anti_aliasing_sigma=None)
image接收数组,表示输入的图像数据。scale接收浮点数,或浮点数元组,表示缩放比例。
(6)改变图像的大小
skimage.transform.resize(image, output_shape, order=1, mode='reflect', cval=0, clip=True, preserve_range=False, anti_aliasing=True, anti_aliasing_sigma=None)
image接收数组,表示输入的图像数据。output_shape接收元组或数组,表示要将图像改变至的大小。
(7)旋转图像
skimage.transform.rotate(image, angle, resize=False, center=None, order=1, mode='constant', cval=0, clip=True, preserve_range=False)
image接收数组,表示输入的图像数据。angle接收浮点数,表示沿逆时针方向旋转的角度。
(8)RGB图像转灰度图像
skimage.color.rgb2gray(rgb)
rgb接收RGB格式图像数据。返回灰度图像数据。
#例15-1 读取图像文件,读取格式信息,显示图像 |
单幅图像的特征聚类
对图像的特征进行聚类,能够发现图像中的具有相似之处的特征和不同的特征,便于图像分析和识别。
- 以灰度图像的行为样本进行聚类
- 提取将灰度值作为样本进行聚类
- 对原始图像进行聚类
#例15-13 以灰度图像的行(每行256个灰度值)为样本聚类 |
图像分类
汉字手写体的识别
在对汉字图像进行分类时,需要先将图像转换为灰度图,将每一个图像作为样本。
#例15-16 读取图像,存储为文本文件,读取文本文件,使用SVM分类 |