边缘检测之Sobel算子&&Prewitt算子

本文介绍了Sobel和Prewitt边缘检测算子,阐述了两者的关系,Sobel算子作为Prewitt算子的改进版,通过权值2增强了中心点的重要性。内容包括算子的原理、梯度幅值的三种表达式,并展示了算法实现后的效果,指出在某些案例中,平方和方法表现更优。同时提到了Prewitt算子的实现,只需更改掩膜即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Sobel和 Prewitt算子思想
    之所以把这个两个算子拿出来一起说,是因为Sobel算子可以看做是Prewitt的改进版本,向对于Prewitt算子,Sobel算子的模板使用的权值2,可以增加中心点的重要性,在某种程度上实现平滑效果。
    Sobel(Prewiit算子亦是如此)边缘检测算子用两个3*3的模板来近似计算图像在某点(i,j)对x和y的偏导数Gx,Gy。而梯度幅值往往有三种表达式:
    G = |Gx| + |Gy|
    G = pow(Gx,2) + pow(Gy,2)
    G = max(Gx,Gy)
    这里我们三种情况都试一下。在计算完幅值后,设定一个合适的阈值T,G > T则 为255(认为该点是阈值点),否则为0.

  • 算法实现

import numpy as np
import  cv2
from matplotlib import pyplot as plt

#定义掩膜
m1 = np.array([[-1,-2,-1],[0,0,0],[1,2,1]]) #Gx
m2 = np.array([[-1,0,1],[-2,0,2],[-1,0,1]]) #Gy

img = cv2.imread("lena_1.tiff",0)

#边缘扩充

image = cv2.copyMakeBorder(img, 1, 1, 1, 1, borderType=cv2.BORDER_REPLICATE)
rows = image.shape[0]
cols = image.shape[1]

temp = list(range(2))
image1 = np.zeros(image.shape)
image2 = np.zeros(imag
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值