文章目录
- 1 初步
- 2 光斑分析
- 3 插值变换
- 4 形态学处理
- 5 滤波
- 6 opencv初步
- 7 相机校准
- 8 图像分割
- 9 边缘检测
- 10 目标识别
1 初步
- 📷初步
图像的本质就是矩阵,图像处理,也就是矩阵处理。所以,在Python中,numpy和matplotlib可以完全胜任最简单的图像处理工作。本节介绍了图像处理的基础流程:读取图片、灰度映射、展示图片以及图像保存。
2 光斑分析
- 📷光斑分析
光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标截取以及半径拟合等。由于图像是二维数组,有两个可以操作的方向,故而除了全局的质心外,其每一行或每一列均有一个质心,行质心和列质心的交叉点,就是图像的质心,图像如下,左侧为原始光斑,右侧为其行质心和列质心。
3 插值变换
- 📷插值变换
尽管numpy提供了一些矩阵函数,但图像处理是一个十分浩瀚的领域,numpy的体量显然有些不够。相比之下,【scipy】封装了【ndimage】模块,即专用的多维数组处理模块,自然也涵盖了二维图像的处理。ndimage中提供了对数组进行平移、缩放以及旋转操作的函数,分别是shift, zoom, rotate,可以实现下面的变换效果。
4 形态学处理
- 📷形态学处理
最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,【scipy.ndimage】分别实现了二值数组和灰度数组的这四种运算。而针对灰度图像,【scipy.ndimage】还提供了礼帽、黑帽、形态学梯度和拉普拉斯梯度等操作。
5 滤波
- 📷滤波
所谓滤波,在图像处理中往往表示特定模板下的卷积运算,其功能有二,一是用于边缘检测,二是用于数据平滑。图像边缘往往变化比较剧烈,相应地其导数的绝对值也就更大,换言之,对图像进行求导,可以增强边缘处的变化,从而起到边缘检测的效果。
6 opencv初步
- 📷opencv初步
opencv是跨平台图像处理库,为许多编程语言提供了接口,Python自然在列,但在使用pip安装时需要注意install的是【opencv-python】。
作为专业的图像处理库,opencv自然也提供了读取、处理、显示以及保存图片的全流程功能,此外还可以打开摄像头。
7 相机校准
- 📷相机校准
相片是三维世界在二维平面上的投射,故而其深度信息是损失掉了的。但是,如果把拍照看作理想的小孔成像过程,那么相片中的每个像素,都将通过一个锥体与世界中真实的点一一对应,这时如果再来一条参考光线,那么理论上就可以实现二维图像的三维重构了。
8 图像分割
- 📷图像分割
opencv提供了多种二值化分割方案,除了可以指定阈值之外,还支持OTSU算法以及自适应阈值算法。此外,还可以通过距离变换,对图像的前景、背景进行分割。并且提供了连通域函数,可以将前景中联通的目标一一分割出来。
其中,三个主要的函数是【adaptiveThreshold】、【distanceTransform】以及【connectedComponents】。
9 边缘检测
- 📷边缘检测
opencv中提供了多种边缘检测方法,除了经典的Canny算子,还实现了霍夫变换,用于检测直线和圆形的边界。这三个函数分别是【Canny】,【HoughLines】以及【HoughCircles】。
10 目标识别
- 📷目标识别
在Python中实现目标识别任务,最常用的方法是调用dlib模块。其中提供了人脸检测和车辆检测的功能,通过人脸特征点的比对,可以根据特征点的距离完成人脸对比。