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蛇年新春祝福语大比拼:谁最会说?
2025“祝福·绍兴古城过大年”:非遗文化点亮新春盛宴
鲁迅笔下绍兴春节习俗探秘
春节里的吉祥文化大揭秘
国潮来袭!传统吉祥图案玩转现代设计
西甲:马竞攻防俱佳,比利亚雷抢分无望?马竞VS比利亚雷
朵朵教你如何提升孩子走亲戚时的语言表达能力
过年不怕走亲戚,《害羞的香蕉》来帮忙!
春节走亲戚攻略:让孩子爱上这项传统!
火龙果:从外观到寓意,解密这颗“吉祥果”的多重价值
福建协和医院心血管专家彭亚飞:医术精湛获患者点赞
怎么做到均衡膳食
用巴金的笔触讲解《鸟的天堂》
借款用途是什么?如何合法合理利用借款?
抑郁症患者服用护肝片?医生建议来了!
科学运动减肥食谱:一周瘦出平坦小腹!
《中国居民膳食指南》推荐:健康减肥的合理饮食法
春节餐桌上的五种“吉祥果”,你都知道吗?
春节必备:这些吉祥水果助你新年好运来!
新年摆上这三种吉祥果,寓意十全十美!
古风拜年,新年高级祝福语大集合!
探秘上古神兽:究竟谁能位居榜首?
彭祖教你如何养生,活到天荒地老!
彭祖养生法:古人的健康密码
希望杯二年级数学竞赛100题解析(下)
研究进展 | 人参活性成分与人类健康关系探讨
《漂流》:小黑猫的奇幻漂流,人类文明的深刻反思