开发网站需要时间,下载官方正版百度,广告推广计划,网站建设策划书网站发布与推广目录
1. 边缘检测#xff08;Prewitt#xff09;
2. 边缘检测#xff08;Sobel#xff09;
3. 边缘检测#xff08;Laplacian#xff09;
3. 边缘检测#xff08;Canny#xff09; 边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。
人在图像识别上具有难…
目录
1. 边缘检测Prewitt
2. 边缘检测Sobel
3. 边缘检测Laplacian
3. 边缘检测Canny 边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。
人在图像识别上具有难以置信的能力可以在几毫秒内处理图像确定图像的边缘、图像内物体的位置和标签。研究者让计算机模拟人检测图像的边缘是在图像中找到变化明显的区域也就是像素明显变化的点或区域。
1. 边缘检测Prewitt 接下来用黑白像素值介绍如何获得图像的边缘先建立一个全为 0 的三维数组维度分别为行、列、通道数其中 2 列的值再赋值为 255用以下代码实现效果展示如 1 下黑色与白色的接壤的区域的像素值变化巨大。
从黑色到白色0 到 255的过渡是正斜率而从白色到黑色255 到 0的过渡是负斜率。梯度指向增长率最大的方向其大小是该方向上的斜率可以通过灰度图像的梯度可以找到变化巨大的像素值。 图1黑白图像 不考虑图像通道数的情况下假设图像是二维离散函数 f(x,y)图像梯度是在 x 和 y 方向求导求导之后的公式如图 2 下使用求导公式对一个 3 行 3 列的二维数组求导数组的值是 A 到 I则对应 x 和 y 方向求导如图 3 所示其中常数可以忽略x 方向求导可以看成两个数组相乘如图 4 所示 图2: 梯度计算公式 图3: 梯度计算上 图4梯度计算下 图 4 中的像素值和数字相乘的过程与卷积操作非常像数字类比卷积核此处把这些数字称为模板。接下来用代码实现 x 方向的图像梯度先建立一个模板 dx对应代码中的 kernel 数组其数值是展示在图 5再实现模板与图像像素值的相乘的过程对应代码中的 filter2D 函数代码实现如下最后图 6 展示图像梯度的效果找到了上图 1 中像素值剧烈变化的区域。 图5模板 图6梯度效果 通过比较图像在水平和垂直方向像素值差异找到图像的边缘方法称为 Prewitt 算子水平的算子模板 dx 和垂直的算子模板 dy 如图 7 所示可以使用 OpenCV 中的 filter2D 函数实现 Prewitt 算子代码如下效果如图 8 所示。 图7Prewitt 算子模板 图8边缘检测效果 2. 边缘检测Sobel
在 Prewitt 算子的基础上提高中心点的权重便是 Sobel 算子中心点的权重为 2其模板展示在图 9。 图9Sobel 算子模板
3. 边缘检测Laplacian
通过二阶导数的形式找到图像中的边缘便是 Laplacian 算子图像的二阶导数展示在图10其模板展示在图 11OpenCV 中的 Laplacian 函数实现该算子代码如下效果如图 12 所示。 图10图像二阶导数 图11Laplacian算子模板 图12边缘检测效果 3. 边缘检测Canny
以上的算子是找到图像中像素值变化巨大的区域而这个变化巨大的区域不一定是边缘面对这个不足John.F.Canny 提出一个 Canny 边缘检测算法它具有低错误率检测出的边缘是真正的边缘良好的定位检测出的边缘像素点与真正边缘的像素点距离近对噪声不敏感噪声不应该标注为边缘。Canny边缘检测算法有四个步骤
1. 降低对噪声的影响对图像做高斯滤波或中值滤波过滤噪声。
2. 使用Sobel算子对图像的每个像素点求梯度大小和方向。
3. 使用非极大值抑制算法在一组边缘中选取最好的边缘具体做法是检查每个像素点与附近梯度方向一致的像素点当前像素点梯度最大则保留否则去除。
4. 使用双阈值小阈值, 大阈值确定最终的边缘像素点梯度高于大的阈值则保留像素点低于小的阈值则忽略介于两个阈值之间判断像素点与边缘像素点是否相连。
OpenCV 中 cv2.Canny 函数可以进行 Canny 边缘检测示例代码如下效果展示在图13。 图13边缘检测效果 关注星标【CV算法恩仇录】