- 前言
- 形态学操作
- 膨胀与腐蚀:
- 开运算与闭运算:
- 礼帽和黑帽:
- 图像平滑
- 灰度直方图
- 直方图均衡化:
- 边缘检测
- Ref
- OpenCV工具完成对图像数据的处理(类比机器学习里面的数据的预处理和特征工程,只不过这里处理的数据都是图像。)
- 操作的对象一般是二值图。
- 连通性:
- 邻域:4邻域、D邻域、8邻域。
- 确定连通性的意义:用于确定图像中像素点之间的连通性,来确定图片中对应事物的边界和区域。
- 腐蚀:使用对应的核结构依次对原图像进行与操作得到对应的像素值表示,操作后的结果是对高亮区域进行蚕食。
- cv.erode()
- 膨胀:使用对应的核结构依次对原图像进行与操作得到对应的像素值表示,操作后的结果是对高亮区域进行扩张。
- cv.dilate()
- 创建核结构:
- 十字形核结构:cv.getStructuringElement(cv.MORPH_CROSS, (5, 5))
- 开运算:先对图像进行腐蚀再膨胀,能够在不影响原图中物体的情况下消除噪声。
- cv.morphologyEx(close, cv.MORPH_OPEN, kenel)
- 闭运算:先对原图进行膨胀再腐蚀,能够在不影响原图中物体的情况下消除孔洞。
- cv.morphologyEx(close, cv.MORPH_CLOSE, kenel)
-
礼帽(顶帽):使用原图像和原图像的开运算的结果之差,表示分离背景中的一些亮的噪声点。
cvOpen = cv.morphologyEx(img1,cv.MORPH_TOPHAT,kernel)
-
黑帽:使用原图像的闭运算和原图像结果的差,表示分离离物体近的一些暗的斑块。
cvOpen = cv.morphologyEx(img1,cv.MORPH_BLACKHAT,kernel)
- 常见噪声的表示:
- 椒盐噪声:包含随机的黑白噪声点。
- 高斯噪声:包含符合正态分布(高斯分布)的各种颜色的噪声点。
- 均值滤波:
- 计算简单,但是效果不好,对图像进行了模糊操作。
- cv.blur()
- 计算简单,但是效果不好,对图像进行了模糊操作。
- 高斯滤波:
- 通过高斯分布计算要高斯模糊处理的像素点对应的像素值的权重大小,离它越远的像素点的权重越小,反之越大。
- cv.GaussianBlur()
- 通过高斯分布计算要高斯模糊处理的像素点对应的像素值的权重大小,离它越远的像素点的权重越小,反之越大。
- 中值滤波:
- 通过计算像素点和其邻域内所有像素点的像素值的中值,来替换该像素点的像素值,受异常值的影响较小,对于椒盐噪声的处理效果较好。
- cv.medianBlur()
- 通过计算像素点和其邻域内所有像素点的像素值的中值,来替换该像素点的像素值,受异常值的影响较小,对于椒盐噪声的处理效果较好。
-
目的:用来统计图像中对应的像素值在连续区间上的分布状况,观察图像的对比度情况。
-
cv.calcHist()
-
掩膜mask:
- 作用:提取感兴趣的区域、或者屏蔽不需要的区域,或者提取对应区域的指定特征。
- 制作掩膜一般用只包含0或者1的数组来表示。
-
目的:提高图片的对比度,让一些细节特征更加突出,更容易辨别。
- cv.equalizeHist()
-
自适应直方图均衡化:
-
目的:解决普通的直方图均衡化全局操作后的一些缺陷,导致原图部分的局部特征更加模糊。
-
操作过程:
- 1、将整张图片进行分块(8*8);
- 2、将每一张分块的图片计算直方图,然后根据指定的对比度阈值来做均衡化;
- 3、通过插值方法对处在块边缘的像素点的像素值进行求解;
- 4、将每一块均衡化后的块进行拼接。
-
cv.createCLAHE(clipLimit, tileGridSize)
-
-
基于对原图像进行求导,然后根据导数的极大值判断最大的梯度和方向,让后根据这样的特性确定边界。
-
常用方法:
- 基于搜索(一阶导):sobel算子、Scharr算子
- 基于零穿越(二阶导):Laplacian算子
-
sobel算子:
- 利用在x方向的一阶导和y方向的一阶导进行合成,最终通过显示对应的梯度值的一个分布状况,显示原图中的对应的边界和边缘信息。
- 当卷积核大小为3时,可以将sobel算子演化成Scharr算子,Scharr算子在精度上比一般的sobel算子更精确。
-
canny算子:
-
1、对图像进行高斯滤波处理,去除噪声;
-
2、将去除噪声后的图像进行梯度计算,使用sobel算子分别计算x方向和y方向的梯度,然后合成,最后计算梯度的方向;
-
3、利用非极大值抑制,获取边界中的极大值,形成最初的细边界;
-
4、利用指定的滞后阈值,设置最大梯度值和最小梯度值,如果对应像素点求出的梯度值大于最大值,则被判断成边界点,如果小于最小值,则被舍弃,如果介于最大值和最小值之间,那就判断此像素点是否和边界点相连,如果是,则被判断成边界点,否则不是,进行舍弃。
-
cv.Canny(image, threshold1, threshold2)
-
canny算子相比于sobel算子来说精度更高,但是效率相比之下更低,sobel算子计算量相对较小,但是精度相比之下不够。
-
itcast Ai7期系列课程



