(七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch

本文介绍了拉普拉斯、Sobel、Roberts、Prewitt等多种经典的边缘检测算法,并提供了详细的OpenCV实现示例。

1.拉普拉斯(Laplacian)算子

1.1基础介绍

最简单的各向同性导数算子是拉普赖斯算子,其具有旋转不变性,对于两个变量的函数 f ( x , y ) f(x,y) f(x,y),其定义为
▽ 2 f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \triangledown^2f=\frac{\partial ^2f}{\partial x ^2} + \frac{\partial ^2f}{\partial y ^2} 2f=x22f+y22f,以离散形式表示上述公式为:
<br/>x方向有:$\frac{\partial ^2f}{\partial x ^2} = f(x+1, y) + f(x-1, y) - 2f(x,y) = (f(x+1, y) -f(x,y)) - (f(x,y)-f(x-1,y))
‘ < b r / > ‘ y 方 向 有 `<br/>`y方向有 <br/>y\frac{\partial ^2f}{\partial y ^2} = f(x, y+1) + f(x, y-1) - 2f(x,y)$
由上面的公式,离散形式的拉普拉斯变换为:

▽ 2 f ( x , y ) = f ( x , y + 1 ) + f ( x , y − 1 ) + f ( x + 1 , y ) + f ( x − 1 , y ) − 4 f ( x , y ) \triangledown ^2f(x,y) = f(x, y+1) + f(x, y-1)+f(x+1, y) + f(x-1, y) - 4f(x,y) 2f(x,y)=f(x,y+1)+f(x,y1)+f(x+1,y)+f(x1,y)4f(x,y

使用卷积核的形式可表示为:
[ 0 1 0 1 − 4 1 0 1 0 ] \begin{bmatrix} 0& 1 & 0\\ 1& -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} 010141010

拉普拉斯算子是图像的二阶梯度算子,在灰度恒定区域其结果为0,在像素均匀变化区域其结果也为0,在像素变化速率变化较大区域其值也会变大,因此可将拉普拉斯算子应用到图像锐化边缘检测

应用到图像锐化时,应用拉普拉斯算子后的结果丢失了恒定像素区域的信息,因此将其与原图相加可求得锐化后的图像。(负中心就减正中心就加)

1.2OpenCV API

LaplacianOpenCV文档

void cv::Laplacian(
    InputArray 	src,
    OutputArray 	dst,
    int 	ddepth,
    int 	ksize = 1,
    double 	scale = 1,
    double 	delta = 0,
    int 	borderType = BORDER_DEFAULT 
)
  • src原图
  • dst结果,与原图同shape
  • ddepthDesired depth目标图像的深度
  • ksize卷积核的大小,正奇数
  • scale可选的计算拉普拉斯值时的缩放因子
  • delta可选的计算拉普拉斯值时需加的值
  • borderType像素外推方法,不支持BORDER_WRAP

1.3 示例

void laplacianOperator(cv::Mat &img) 
{
   
   
    int kernel_size = 1;
    int scale = 1;
    int delta = 0;
    int ddepth = CV_16S;
    const char* window_name = "Laplace Demo";

    cv::GaussianBlur(img, img, cv::Size(3, 3), 0, 0, cv::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值