目录
概要
一、图像采集
二、图像标注
四、图像几何变换
五、图像边缘检测
Sobel算子
Scharrt算子
Laplacian算子
Canny边缘检测
六、形态学转换
十三、图像去噪
参考书籍:《机器视觉与人工智能应用开发技术》 廖建尚,钟君柳 出版时间:2024-02-01
图像的基本概念
OpenCV视频处理接口:VideoCapture;
图像处理接口:imread、imshow、imwrite
画直线(cv2.line):根据给出的起点和终点绘制两点之间的线条
画矩形(cv2.rectangle):根据矩形的左上角位置坐标和右下角位置坐标绘制矩形
画圆形(cv2.circle):根据给定的圆心和半径绘制圆
画椭圆(cv2.ellipse)
图像旋转(cv2.warpAffine):以图像的中心为原点旋转一定的角度,即将图像上的所有像素都旋转一个相同的角度。图像经过旋转之后,其位置会发生变化,旋转后既可以把转出显示区域的图像截去,也可以扩大显示区域的图像范围以显示图像的全部内容。
图像镜像(cv2.flip):是一种与人们日常生活密切相关的变换,图像镜像是指原始图像相对于某一参照面旋转180°的图像。镜像变换又称为对称变换,分为水平镜像、垂直镜像、对角镜像等。镜像变换后,图像的宽和高不变。
水平镜像:以图像的垂直中轴线为中心,将图像分为左右两部分后进行对称变换。
垂直镜像:以图像的水平中轴线为中心,将图像分为上下两部分后进行对称变换。
对角镜像:将图像以水平中轴线和垂直中轴线的交点为中心进行对称交换,相当于将图像先后进行水平镜像和垂直镜像。
图像缩放(cv2.resize):将指定的图像在x方向和y方向按相同的比例进行缩放,从而获得一幅新的图片,称为全比例缩放。
如果x方向和y方向的缩放比例不同,则图像的比例缩放会改变原始图像像素间的相对位置,产生几何畸变。
在图像缩放过程中,涉及图像数据的删除与增加。若比例缩放所产生的图像中的像素在原始图像中没有相对应的像素时,特别在图像放大时,则需要考虑如何在放大后的空隙中加入新的图像颜色数据,增加颜色数据的方法主要根据周围相邻像素的颜色值进行插值计算。主要有3种插值方法:最近邻插值法、双线性插值方法、三次内插法。
边缘检测是图像处理和计算机视觉中的基本应用,边缘检测的目的是标识数字图像中亮度变化明显的点。
图像属性的显著变化通常反应了属性的重要事件和变化,通过图像边缘检测可以大幅地减少数据量,并剔除不想关的信息,保留了图像重要的结构属性。
经典的图像边缘检测算子有:Sobel算子、Scharr算子、Laplacian算子、Canny算子。
一种离散的微分算子,该算子结合了高斯平滑和微分求导运算,利用局部差分寻找边缘,计算结果是梯度的一个近似值。Sobel算子利用周围邻域8个像素来估计中心像素的梯度,但Sobel算子认为靠近中心的像素应该给予更高的权重。Sobel算子的边缘检测卷积核如下图:
Scharr算子与Sobel算子的运算方式类似,分别计算x方向或y方向的图像差分。可以说,Scharr算子是Sobel算子的改进。Scharr算子运算准确度更高、效果更好。Scharr算子的边缘检测卷积核如下图:
Laplacian算子是图像邻域内像素灰度差分计算的基础,是一种通过二阶微分推导图像邻域增强算法。
Laplacian算子的基本思想是当邻域的中心像素灰度低于它所在邻域内的其他像素的平均灰度时,此中心像素的灰度应该进一步降低;当高于时进一步提高中心像素的灰度,从而实现锐化处理。二阶微分卷积核如下图:
Canny边缘检测是当今最流行的边缘检测方法之一,非常强大和灵活,该方法主要过程如下:
常用的形态学转换有四种:腐蚀、膨胀、开运算、闭运算。
腐蚀(cv2.erode):一种消除边界点,使边界向内部收缩的过程。腐蚀的目的是把目标区域范围“变小”,可以用来消除小且无意义的物体。
膨胀(cv2.dilate):膨胀和腐蚀是一对相反的操作,将与物体接触的所有背景点合并到该物体中,使物体边界向外部扩张。
开运算(cv2.morphologyEx):先腐蚀后膨胀的过程称为开运算,用来消除小物体、在纤细点处分离物体,可以在不明显改变物体表面积的情况下平滑物体的边界。一般会使对象的轮廓变得光滑、断开狭窄的间隙和消除细的突出物。
闭运算(cv2.morphologyEx):先膨胀后腐蚀的过程称为闭运算,用来填充物体内的细小空洞、连接邻近物体,可以在不明显改变物体表面积的情况下平滑物体的边界。
常用的滤波方法有方框滤波、均值滤波、高斯滤波、高斯双边滤波等。
噪声:在图像中,噪声通常是指亮度或颜色信息的随机变化,通常是电子噪声的表现。常见的随机噪声包括高斯噪声、均匀分布噪声、脉冲噪声(椒盐噪声)等。
滤波:滤波是指在信号和图像处理中根据应用环境的不同,选择性地提取图像中某些重要的信息。滤波可以去除或削弱图像中的噪声,提取感兴趣的可视特征。
均值滤波(cv.blur):是最简单的滤波方法,它将滤波器中所有的像素值求和后的平均值作为滤波结果。
方框滤波(cv.boxFilter):是均值滤波的一般形式,也是求滤波器内所有像素值的和,但方框滤波可以选择进行或不进行归一化。若选择归一化,则与均值滤波效果一样;若不选择归一化,将所有像素值的和作为滤波结果。
高斯滤波:是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗地讲,高斯滤波对整幅图像进行加权平均,每一个像素的值都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度去替代模板中心像素的值。
高斯双边滤波(cv.bilateralFilter):是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。之所以能在平滑去噪的同时很好地保存边缘,是由于其滤波器的核由两个函数生成:空间域核(又称定义域核,空间系数或空间域)和值域核(又称像素范围域)。一个函数可以通过几何空间距离决定滤波的空域参数,而另一个函数可以通过像素的差决定滤波的值域参数。
中值滤波(cv.medianBlur):中值滤波把数字图像或数字序列中一点的值用该点的一个邻域中各个点的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。