Laplace算子

 

基本概念

拉普拉斯算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度(▽f)的散度(▽·f)。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义为:

其中xy代表 x-y 平面上的笛卡儿坐标:

Laplace 算子是一个二阶微分算子,它实际上是一个  x  方向的二阶导数和  y  方向的二阶导数之和的近似微分。该算子比较适合应用于只关心边缘位置而不考虑其周围像素灰度差值的图像边缘检测场景。

为了更适用于数字图像处理,可将 Laplace 算子表示为如下离散形式:

本文用了一种常用的离散laplace算子,和其扩展算子,读者可以比较发现扩展算子的图像噪声的影响更小。

#算子和图像矩阵处理模块
import numpy as np
#色彩映射模块
import matplotlib.cm as cm
#数据可视化处理模块
import matplotlib.pyplot as plt
#图像导入模块
from PIL import Image
#卷积运算的函数
import scipy.signal as signal

#定义拉普拉斯算子
operator_1 = ([[0,1,0],
               [1,-4,1],
               [0,1,0]])
#定义laplace扩展算子
operator_2 = ([[1,1,1],
               [1,-8,1],
               [1,1,1]])

#打开原图并且做灰度化处理
image = Image.open(r"C:\Users\86159\PycharmProjects\pythonProject2\test.jpg.jpg").convert('L')

#得到图像的矩阵
image_array =np.array(image)

#卷积计算后的图像矩阵
image_1 = signal.convolve2d(image_array,operator_1,mode='same')
image_2 = signal.convolve2d(image_array,operator_2,mode='same')

#归一化处理
image_1 = (image_1/float(image_2.max()))*255
image_2 = (image_2/float(image_2.max()))*255

#将大于灰度平均值的灰度值变成255,便于观察边缘
image_1[image_1>image_1.mean()]=255
image_2[image_2>image_2.mean()]=255

#显示边缘检测结果
plt.subplot(2,2,1)
plt.imshow(image_array,cmap=cm.gray)
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(image_1,cmap=cm.gray)
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(image_2,cmap=cm.gray)
plt.axis('off')
plt.show()

 结果是显而易见的,但是本文并没有对图像先进行平滑处理,读者可以在其中添加一段模糊平滑处理的代码用以抵消由Laplace算子的二阶导数引起的逐渐增加的噪声影响。(可以用高斯滤波的办法作平滑处理)。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yolo_Mick

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值