Sobel边缘检测,Canny边缘检测,Susan角点检测,Harris角点检测
创作时间:
作者:
@小白创作中心
Sobel边缘检测,Canny边缘检测,Susan角点检测,Harris角点检测
引用
CSDN
1.
https://blog.csdn.net/qq_64455589/article/details/139233166
1. Sobel边缘检测
Sobel边缘检测是一种经典的图像处理方法,用于检测图像中的边缘。它通过计算图像中每个像素的梯度来确定边缘的位置和方向。
原理:
Sobel算子使用两个3x3的卷积核,分别检测水平方向和垂直方向的边缘。通过将这两个方向的梯度幅值结合,可以得到边缘的整体强度。
优缺点:
- 优点: 实现简单,计算速度快。
- 缺点: 对噪声敏感,检测效果较粗糙,难以检测斜向边缘。
2. Canny边缘检测
Canny边缘检测是一种多阶段的边缘检测算法,广泛应用于计算机视觉领域。它通过一系列步骤,精确地检测图像中的边缘。
原理:
Canny算法主要包括以下步骤:
- 高斯滤波:平滑图像,减少噪声。
- 计算梯度:使用Sobel算子计算图像的梯度幅值和方向。
- 非极大值抑制:细化边缘,去除非边缘点。
- 双阈值处理:使用高低阈值确定强边缘和弱边缘。
- 边缘连接:通过连接弱边缘和强边缘,形成最终的边缘图。
优缺点:
- 优点: 能够检测出细致的边缘,对噪声有较强的鲁棒性,能检测多方向边缘。
- 缺点: 参数选择较复杂,计算复杂度较高。
3. Harris角点检测
Harris角点检测是一种角点检测算法,用于在图像中检测出具有显著变化的区域,如拐角或角点。
原理:
Harris角点检测通过计算图像的自相关矩阵,分析图像中每个像素的局部邻域的梯度变化。通过检测梯度变化较大的区域,确定角点的位置。
优缺点:
- 优点: 对旋转不变,检测稳定,适合实时应用。
- 缺点: 对噪声敏感,难以检测不同尺度下的角点。
4. Susan角点检测
Susan角点检测是一种基于局部邻域亮度变化的角点检测算法,能够同时检测出图像中的边缘和角点。
原理:
Susan算法通过比较图像中每个像素的局部邻域与中心像素的亮度差异,计算出一个响应值。响应值较高的像素被认为是角点或边缘点。
优缺点:
- 优点: 多功能性,能够同时检测边缘和角点,对噪声有较好的鲁棒性。
- 缺点: 实现较复杂,计算时间较长,对不同形状的角点检测效果可能不理想。
结论
不同的边缘检测和角点检测算法在处理图像细节和噪声方面各有优缺点。选择合适的算法需要根据具体应用场景和需求进行权衡和选择。Sobel和Canny适用于边缘检测,而Harris和Susan适用于角点检测。理解这些算法的特点和适用场景,可以帮助我们在实际应用中更好地选择合适的图像处理方法。
实现代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图片并进行预处理
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
image = cv2.GaussianBlur(image, (5, 5), 0) # 高斯模糊,减少噪声
# Sobel边缘检测
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel = cv2.magnitude(sobel_x, sobel_y) # 计算梯度幅值
sobel = cv2.convertScaleAbs(sobel) # 转换为8位图像
# Canny边缘检测
canny = cv2.Canny(image, 50, 150) # 调整阈值,更灵敏的边缘检测
# Harris角点检测
harris = cv2.cornerHarris(image, 2, 3, 0.04)
harris = cv2.dilate(harris, None) # 膨胀角点检测结果
image_harris = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
image_harris[harris > 0.01 * harris.max()] = [0, 0, 255] # 标记角点
# Susan角点检测 (简化版)
def susan_corner_detection(img, t=27, g=7):
img = img.astype(np.float32)
susan = np.zeros(img.shape)
for y in range(1, img.shape[0] - 1):
for x in range(1, img.shape[1] - 1):
region = img[y-1:y+2, x-1:x+2] # 3x3区域
diff = np.abs(region - img[y, x])
mask = diff < t # 比较阈值
if np.sum(mask) < g:
susan[y, x] = 1
return susan
susan = susan_corner_detection(image)
image_susan = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
image_susan[susan > 0] = [0, 255, 0] # 标记角点
# 显示结果
plt.figure(figsize=(12, 10))
plt.subplot(2, 2, 1)
plt.title('Sobel Edge Detection')
plt.imshow(sobel, cmap='gray')
plt.axis('off')
plt.subplot(2, 2, 2)
plt.title('Canny Edge Detection')
plt.imshow(canny, cmap='gray')
plt.axis('off')
plt.subplot(2, 2, 3)
plt.title('Harris Corner Detection')
plt.imshow(image_harris)
plt.axis('off')
plt.subplot(2, 2, 4)
plt.title('Susan Corner Detection')
plt.imshow(image_susan)
plt.axis('off')
plt.tight_layout()
plt.show()
注意:需要提前安装好相关的库!
结果图
可以看出,Sobel检测算子的检测结果比较好。
热门推荐
如何在线查询美国公司营业信息:全方位指南
2025年区块链游戏(链游)趋势研究分析
汽车座椅加热、通风、按摩功能中,哪个更实用?
Windows CMD下三种IP端口扫描方法详解:telnet、nc与nmap
机制烧烤炭检测指南:从燃烧性能到环保安全的全方位解析
长曝拍摄秘籍:掌握参数,捕捉夜景与星空的流动之美
总是想太多?高敏感族群14种特征及相处之道
海外仓FBA转运补仓业务详解:优势、实施步骤及常见问题解答
银行单位结算账户开户审批流程详解
掌握日语谐音法:让学习之旅妙趣横生
打工人最爱的帆布包,为啥都没有拉链?
深入浅出,循环冗余校验(CRC)的原理与应用
湛江至重庆完整旅行路线指南:涵盖交通方式、行程规划与实用攻略
【日本樱花】2025年最新!日本全国最佳赏樱时间、春天必去樱花景点推荐指南
量化交易新手必读:如何避免回测中的"未来函数"陷阱
退休员工出现工伤怎么赔偿
企业人事档案管理制度的作用与优化策略
危害和可操作性分析(HAZOP):概念、步骤与国家标准
中国企业再次组团出海寻路汽车业共赢
媒体报道!武汉轻工大学是一本吗?什么专业好?人才教育国际化!
国旗象征着什么?十大国旗的由来和象征意义
柔焦摄影技巧,如何为你的照片添加柔焦效果?
什么是景深?拍摄时如何正确运用?
同是肺动脉高压靶向药——安立生坦和马昔腾坦该怎么选?
曹操真实容貌揭秘:历史记载与传说之间的差异
如何合理布置家里电线?布置家里电线的要点有哪些?
电子应用设计方案82:智能 AI 椅子系统设计
河北黄骅:非遗课堂开讲 促进民俗文化传承
上海乐高乐园悟空小侠已就位:外商加码布局中国“快乐经济”
2015与2024年中国不同年龄段人口占比对比分析