1. 图像基础
黑白图像用一个二维矩阵表示,灰度用0-1之间的数值表示。
彩色图像分通道表示,如下图,每个通道是0-255之间的整数。注意数值越大越白,越小越黑。不管是RGB还是BGR,都是高度×宽度×通道数,H×W×C的表达方式,而在深度学习中,因为要对不同通道应用卷积,所以用的是另一种方式:C×H×W。使用numpy的transpose函数可以进行转换。
基于python脚本语言开发的数字图片处理包,比如PIL,Pillow, opencv, scikit-image等。 PIL和Pillow只提供最基础的数字图像处理,功能有限;opencv有不少功能,但是实际上是一个c++库,只是提供了python接口。scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,一些基本的数字图像处理功能非常容易使用。
2. skimage
主要子模块列表如下:
2.1. io,读写
- imread,读取图片为3维numpy格式,灰度图片设置as_grey=True维2维numpy数组。
- imshow,将numpy数据显示为图片,RGB通道。
- imsave(fname,arr),保存图片
- ImageCollection(src,load_func),批量操作图片
- concatenate_images,将集合中的图片组合成一个更高维的数组
2.2. data,数据
skimage程序自带了一些示例图片,如果我们不想从外部读取图片,就可以直接使用这些示例图片,比如data.coffee():
2.3. transform,变形
resize,rescale,pyramid_gaussian,rotate
2.4. exposure,对比度和亮度
adjust_gamma,adjust_log,rescale_intensity,histogram,equalize_hist(直方图均衡化)
2.5. filters,图像滤波
高通滤波器:提升亮度差值,用于边缘检测。
低通滤波器:当亮度差值低于一定的阈值时,平滑该像素的亮度,用于模糊和去噪。
边缘检测:sobel,roberts,scharr,prewitt,gabor_filter;canny算子在feature中
平滑滤波:gaussian_filter(image, sigma),median(img,morphology)
阈值分割:threshold_otsu,threshold_yen,threshold_li,threshold_adaptive(直接返回图像,其他返回阈值)
2.6. morphology,形态学(很有用)
dilation,erosion,openning(先腐蚀再膨胀,可以消除杂点),closing(消除孔洞),white-tophat(留下斑点),black-tophat(留下孔洞)
convex_hull_image:凸包
2.7. rank,高级滤波
autolevel,bottomhat,tophat,enhance_contrast,entropy,equalize,gradient
2.8. measure,测量
label(连通),regionprops(连通区域),remove_small_objects,
3. 常用组合
边缘检测:一般需要先进行模糊处理,比如blur(简单的算术平均),medianBlur(对数字化视频噪声比较有效),GaussianBlur……然后进行边缘检测,比如Laplacian(会产生明显的边缘线条),Sobel和Scharr,canny(高斯滤波去噪、计算梯度、在边缘使用非最大抑制、边缘使用双阈值去除假阳性)