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检测算子的检测结果比较好。
热门推荐
红花籽油富含必需脂肪酸,四类人群食用需谨慎
斯嘉丽·约翰逊的健康秘籍:运动、饮食与多才多艺的完美融合
苏炳添再创佳绩,短跑世界纪录能否再突破?
博尔特9秒58纪录还能撑多久?
从饮食到情志:中医教你轻松应对进食后不适
从饮食到心理:全方位缓解抑郁症患者的饭后不适
最新研究证实:针灸能有效改善餐后不适,调节迷走神经
从生茶到熟茶:冰岛普洱的独特风味与品鉴要点
茶旅融合新样本:临沧冰岛茶小镇的生态蝶变
从普洱到冰岛:云南特有茶品的创新之路
世界青光眼日:这种致盲眼病早期症状不明显,如何预防?
青光眼患者自我管理指南:四大维度助力病情控制
《使命召唤12:黑色行动3》终极通关秘籍🔥
Battery与战争机器:《使命召唤12:黑色行动3》最强组合攻略
冬季感冒频发,这些原因和应对方法要知道
如何管理个人工作文档
不小心删除的文件怎么找回?别急,这里有找回方法!
《和平精英》平板玩家键位设置攻略:六指操作详解
牛腱子肉是哪个部位的牛肉?牛腱子肉怎么做更好吃?
牛腱子肉切片新吃法:凉拌美味,一试难忘!
台州2日自驾:临海古城墙到仙居神仙居,玩转江南山水
南陵县籍山镇:开展“迎新春 送祝福”系列活动
TikTok或被禁,小红书日增百万美国用户登顶下载榜
铁路交通行业经营模式分析
铁老大、电老二、油老三,想进铁路系统端铁饭碗?这些事你得知道
成都都市圈市域铁路规划:打造一小时通勤圈
江苏省消保委调查:家电维修四大陷阱,教你如何维权
掌握这四招,让情侣谈心不再变成争吵
装修后头晕干呕?当心甲醛超标,这些方法才管用
新房装修后多久能住?专家建议3-6个月并检测甲醛