边缘检测算法总结及其python实现——二阶检测算子

二阶检测算子
Laplacian算子,Marr-Hildreth(LOG),高斯差分DoG。
1.Laplacian边缘检测
拉普拉斯算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度(▽f)的散度(▽·f)。拉普拉斯算子也是最简单的各向同性微分算子,具有旋转不变性,即将原图像旋转后进行滤波处理给出的结果与先对图像滤波然后再旋转的结果相同。一个二维图像的拉普拉斯算子定义为:
在这里插入图片描述
因为任意阶微分都是线性操作,所以拉普拉斯变换也是一个线性算子。为了以离散形式描述这一公式,在x方向将公式描述成:
在这里插入图片描述
同理,在y方向将公式描述成:
在这里插入图片描述
遵循这三个公式,两个变量的离散拉普拉斯算子为:
在这里插入图片描述
Laplacian常用的算子模板:
4邻域:
在这里插入图片描述
8邻域:
在这里插入图片描述

代码:

import numpy as np
from skimage import data,color,filters
import matplotlib.pyplot as plt

original_img=data.chelsea()
gray_img=color.rgb2gray(original_img)

#using system function
edeg_img=filters.laplace(gray_img,ksize=3)

#self codes
w,h = gray_img.shape
ori_pad = np.pad(gray_img,((1,1),(1,1)),'constant')  #在灰度图像的四周填充一行/一列0

lap4_filter = np.array([[0,1,0],[1,-4,1],[0,1,0]])  #4邻域laplacian算子
lap8_filter = np.array([[0,1,0],[1,-8,1],[0,1,0]])  #8邻域laplacian算子

#4邻域
edge4_img = np.zeros((w,h))
for i in range(w-2):
    for j in range(h-2):
        edge4_img[i,j]=np.sum(ori_pad[i:i+3,j:j+3]*lap4_filter)
        if edge4_img[i,j] < 0:
            edge4_img[i,j] = 0  #把所有负值修剪为0

#8邻域
edge8_img = np.zeros((w,h))
for i in range(w-2):
    for j in range(h-2):
        edge8_img[i,j]=np.sum(ori_pad[i:i+3,j:j+3]*lap8_filter)
        if edge8_img[i,j] < 0:
            edge8_img[i,j] = 0

figure=plt.figure()
plt.subplot(231).set_title('original_img')
plt.imshow(original_img)
plt.subplot(232).set_title('gray_image')
plt.imshow(gray_img)
plt.subplot(233).set_title('edge_image')
plt.imshow(edeg_img)
plt.subplot(234).set_title('edge4_image')
plt.imshow(edge4_img)
plt.subplot(235).set_title('edge8_image')
plt.imshow(edge8_img)
plt.show()

结果(用封装的函数求出来的结果可能存在一些问题,会继续找问题的所在):
在这里插入图片描述
2.Log边缘检测
拉普拉斯边缘检测算子没有对图像做平滑处理,所以对噪声很敏感。因此可以想到先对图像进行高斯平滑处理,然后再与Laplacian算子进行卷积。这就是高斯拉普拉斯算子(laplacian of gaussian)。

下式中G为标准差为σ\sigmaσ(有时σ\sigmaσ也称为空间常数)的二维高斯函数(省略了常数)
在这里插入图片描述
为求∇2G\nabla ^{2}G2G的表达式,执行如下微分:
∇2G(x,y)=∂G(x,y)∂x2+∂2G(x,y)∂y2=∂∂x[−xσ2e−x2+y22σ2]+∂∂y[−yσ2e−x2+y22σ2]=[x2σ4−x2σ2]e−x2+y22σ2+[y2σ4−1σ2]e−x2+y22σ2\begin{aligned}\nabla ^{2}G\left( x,y\right) =\dfrac {\partial G\left( x,y\right) }{\partial x^{2}}+\dfrac {\partial ^{2}G\left( x,y\right) }{\partial y^{2}}=\dfrac {\partial }{\partial x} \left[ \dfrac {-x}{\sigma^{2}} e^{-\dfrac {x^{2}+y^{2}}{2\sigma^{2}}}\right] +\dfrac {\partial }{\partial y} \left[ \dfrac{-y}{\sigma^{2}}e^{-\dfrac {x^{2}+y^{2}}{2\sigma^{2}}}\right] \\=\left[ \dfrac {x^{2}}{\sigma^{4}}-\dfrac {x^{2}}{\sigma^{2}}\right]e^{-\dfrac {x^{2}+y^{2}}{2\sigma^{2}}}+\left[ \dfrac {y^{2}}{\sigma^{4}}-\dfrac {1}{\sigma^{2}}\right]e^{-\dfrac {x^{2}+y^{2}}{2\sigma^{2}}}\end{aligned}2G(x,y)=x2G(x,y)+y22G(x,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值