Canny边缘检测流程:
去噪 --> 梯度 --> 非极大值抑制 --> 滞后阈值
- 去噪
- 边缘检测容易受到噪声的影响。因此,在进行边缘检测前,通常需要先进行去噪
- 通常采用高斯滤波器去除噪声
- 让临近的像素具有更高的重要性。对周围像素计算加权平均值,较近的像素具有较大的权重值。
- 梯度/角度
- 对平滑后的图像采用sobel算子计算梯度和方向
- 梯度E d g e G r a d i e n t ( G ) = G x 2 + G y 2 Edge_{Gradient(G)}=\sqrt{G_x^2+G_y^2} EdgeGradient(G)?=Gx2?+Gy2? ?
- 角度A n g l e ( θ ) = t a n ? 1 ( G x G y ) Angle(\theta)=tan^{-1}(\frac{G_x}{G_y}) Angle(θ)=tan?1(Gy?Gx??)
- 梯度的方向一般总与边界垂直
- 梯度方向被归为四类:垂直,水平,和两个对角线
- 对平滑后的图像采用sobel算子计算梯度和方向
- 非极大值抑制
- 在获取了梯度和方向后,遍历图像,去除所有不是边界的点
- 实现方法: 逐个遍历像素点,判断当前像素点是否是周围像素点中具有相同方向梯度的最大值
- 滞后阈值
{ 梯 度 值 > m a x V a l 边 界 m a x V a l > 梯 度 值 > m i n V a l 与 边 界 相 连 , 保 留 。 否 则 抛 弃 梯 度 值 < m i n V a l 抛 弃 \begin{cases} 梯度值> maxVal & 边界\\ maxVal> 梯度值> minVal & 与边界相连,保留。否则抛弃\\ 梯度值< minVal & 抛弃 \end{cases} ??????梯度值>maxValmaxVal>梯度值>minVal梯度值
- 函数Canny
edges = cv2.Canny(image, threshold1, threashold2)
- 参数
- image : 原始图像
- threshold1 : 阈值1 (minVal)
- threshold2 : 阈值2 (maxVal)
- 返回值
- edges : 边缘图像
- 参数
import cv2o = cv2.imread("/home/forrest/图片/lena彩图.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imshow("lena", o)r1 = cv2.Canny(o, 100, 200)
cv2.imshow("result1", r1)r2 = cv2.Canny(o, 64, 128)
cv2.imshow("result2", r2)cv2.waitKey()
cv2.destroyAllWindows()
- 原图
文章图片
- 结果1
文章图片
- 结果2
文章图片
推荐阅读
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍