二阶检测算子
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}G∇2G的表达式,执行如下微分:
∇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)=∂x2∂G(x,y)+∂y2∂2G(x,