拉普拉斯算子

这篇具有很好参考价值的文章主要介绍了拉普拉斯算子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在介绍拉普拉斯算子概念之前我们先介绍,哈密尔顿算子( ∇ \nabla ),梯度,散度等概念

哈密尔顿算子

所谓哈密尔顿算子即为某一物理量在笛卡尔坐标系下的偏导数的矢量和,其运算符号为: ∇ \nabla ,定义如下:
∇ = δ δ x i + δ δ y j + δ δ z k \nabla={\frac{\delta}{\delta x}}\pmb{i}+{\frac{\delta}{\delta y}}\pmb{j}+{\frac{\delta}{\delta z}}\pmb{k} =δxδiii+δyδjjj+δzδkkk

梯度

当哈密尔顿算子 ∇ {\nabla} 作用于一个标量,比如函数 f f f时,既可以表示为该标量在该空间上的梯度
简而言之,梯度即为 ∇ {\nabla} 作用于某一标量的结果,其表示如下:

g r a d f = ∇ f = δ f δ x i = δ f δ x i + δ f δ y j + δ f δ z k {{grad} f}={\nabla}{f}=\frac{\delta f}{\delta x_i}=\frac{\delta f}{\delta x}\pmb{i}+{\frac{\delta f}{\delta y}}\pmb{j}+{\frac{\delta f}{\delta z}}\pmb{k} gradf=f=δxiδf=δxδfiii+δyδfjjj+δzδfkkk

从上式不难发现,一个标量的梯度是一个矢量,它表示 f f f在空间中某一点沿着某一方向的变化量,如果想要得到 f f f在某一特定的方向 v v v(即不是笛卡尔标系的方向)的梯度,即方向导数。
方向导数可以根据梯度与该方向 v v v的点乘得到,其中 d t {dt} dt表示沿着 v \pmb{v} vvv方向的步长:

d f v d t = v ⋅ ∇ f = ∥ ∇ f ∥ cos ⁡ ( ∇ f , v ) {\frac{df_v}{dt}}={\pmb{v}\cdot{\nabla f}}={\lVert{\nabla f}\rVert}{\cos({\nabla f},\pmb{v})} dtdfv=vvvf=fcos(f,vvv)

由上式可得,当 cos ⁡ ( ∇ f , v ) = 1 {\cos({\nabla f},\pmb{v})}=1 cos(f,vvv)=1时,即空间上的某一方向与梯度方向一致时,表示沿该方向上有最大梯度,这也正符合我们所熟知的在空间上任一点的梯度为该点在空间上变化量最大的方向

散度

根据矢量的运算规则,当 ∇ \nabla 与一个矢量相乘时,其结果是一个标量,它代表着该矢量的散度:

d i v V = ∇ ⋅ V = δ u δ x i = δ u δ x + δ v δ y + δ w δ z {div{V}}={\nabla}{\cdot}{V}=\frac{\delta u}{\delta x_i}=\frac{\delta u}{\delta x}+\frac{\delta v}{\delta y}+\frac{\delta w}{\delta z} divV=V=δxiδu=δxδu+δyδv+δzδw

其中 V = u + v + w {V}=u+v+w V=u+v+w表示一个矢量

关于散度大小定义:

d i v = { > 0 , 向 外 发 散 < 0 , 向 内 聚 合 = 0 , 该 点 无 源 div=\left\{ \begin{matrix}>0,{向外发散}\\ <0, {向内聚合}\\ =0,{该点无源} \end{matrix} \right. div=>0,<0,=0,

拉普拉斯算子

我们已经只带散度是由 ∇ \nabla 与一个矢量相乘时得到的,因此梯度作为一个矢量我们可以对其继续求散度,从而引入拉普拉斯算子 ∇ 2 \nabla^2 2

∇ ⋅ ∇ f = ∇ 2 f = δ 2 f δ x 2 + δ 2 f δ y 2 + δ 2 f δ z 2 {\nabla}{\cdot}{{\nabla}{f}}={{\nabla^2}f}=\frac{\delta^2 f}{\delta x^2}+{\frac{\delta^2 f}{\delta y^2}}+{\frac{\delta^2 f}{\delta z^2}} f=2f=δx2δ2f+δy2δ2f+δz2δ2f

拉普拉斯算子从某种程度上看是对某一函数求二阶导数,我们在学数学分析的时候知道一阶导数表示函数某一点的变化量,而二阶导数则表示该点的变化速率,即凹凸性,我们将其放在图像上观察
拉普拉斯算子,图像处理,python,人工智能,图像处理,算法

右图图为左图的向量场,即由梯度组成的向量场,我们不难发现,向量场箭头汇聚的地方正好对应着三维图中凸点,向外发散的地方对应着凹点。

图像处理——拉普拉斯算子

假设一张图片的的某一列值看做函数 f ( x ) f(x) f(x),我们对其进行泰勒展开可以得到:

f ( x + Δ x ) = f ( x ) + Δ x δ f ( x ) δ x + ( Δ x ) 2 2 ! δ 2 f ( x ) δ x 2 + ( Δ x ) 3 3 ! δ 3 f ( x ) δ x 3 + ⋯ = ∑ n = 0 ∞ ( Δ x ) n n ! δ n f ( x ) δ x n f(x+\Delta x)=f(x)+{\Delta x}{\frac{\delta f(x)}{\delta x}}+{\frac{(\Delta x)^2}{2!}{\frac{\delta^2 f(x)}{\delta x^2}}}+{\frac{(\Delta x)^3}{3!}{\frac{\delta^3 f(x)}{\delta x^3}}}+\cdots=\sum_{n = 0}^{\infty}{\frac{(\Delta x)^n}{n!}}{\frac{\delta^n f(x)}{\delta x^n}} f(x+Δx)=f(x)+Δxδxδf(x)+2!(Δx)2δx2δ2f(x)+3!(Δx)3δx3δ3f(x)+=n=0n!(Δx)nδxnδnf(x)

上式中, Δ x \Delta x Δx f f f取样间隔。由于我们是对图像进行处理,所以这个间隔的单位是像素。所以我们对 x x x前面取样有 Δ x = 1 \Delta x=1 Δx=1,对 x x x后面取样有 Δ x = − 1 \Delta x=-1 Δx=1,当 Δ x = 1 \Delta x=1 Δx=1时,上式可化为:

f ( x + 1 ) = f ( x ) + δ f ( x ) δ x + 1 2 ! δ 2 f ( x ) δ x 2 + 1 3 ! δ 3 f ( x ) δ x 3 + ⋯ = ∑ n = 0 ∞ 1 n ! δ n f ( x ) δ x n f(x+1)=f(x)+{\frac{\delta f(x)}{\delta x}}+{\frac{1}{2!}{\frac{\delta^2 f(x)}{\delta x^2}}}+{\frac{1}{3!}{\frac{\delta^3 f(x)}{\delta x^3}}}+\cdots=\sum_{n = 0}^{\infty}{\frac{1}{n!}}{\frac{\delta^n f(x)}{\delta x^n}} f(x+1)=f(x)+δxδf(x)+2!1δx2δ2f(x)+3!1δx3δ3f(x)+=n=0n!1δxnδnf(x)

同样当 Δ x = − 1 \Delta x=-1 Δx=1时有:
f ( x − 1 ) = f ( x ) − δ f ( x ) δ x + 1 2 ! δ 2 f ( x ) δ x 2 − 1 3 ! δ 3 f ( x ) δ x 3 + ⋯ = ∑ n = 0 ∞ ( − 1 ) n n ! δ n f ( x ) δ x n f(x-1)=f(x)-{\frac{\delta f(x)}{\delta x}}+{\frac{1}{2!}{\frac{\delta^2 f(x)}{\delta x^2}}}-{\frac{1}{3!}{\frac{\delta^3 f(x)}{\delta x^3}}}+\cdots=\sum_{n = 0}^{\infty}{\frac{(-1)^n}{n!}}{\frac{\delta^n f(x)}{\delta x^n}} f(x1)=f(x)δxδf(x)+2!1δx2δ2f(x)3!1δx3δ3f(x)+=n=0n!(1)nδxnδnf(x)

对于一阶导数,我们只使用线性项,向前差分可以得到:
δ f ( x ) δ x = f ′ ( x ) = f ( x + 1 ) − f ( x ) \frac{\delta f(x)}{\delta x}=f^\prime(x)=f(x+1)-f(x) δxδf(x)=f(x)=f(x+1)f(x)

向后差分可以得到:
δ f ( x ) δ x = f ′ ( x ) = f ( x ) − f ( x − 1 ) \frac{\delta f(x)}{\delta x}=f^\prime(x)=f(x)-f(x-1) δxδf(x)=f(x)=f(x)f(x1)

中心差分可的得到:
δ f ( x ) δ x = f ′ ( x ) = f ( x + 1 ) − f ( x − 1 ) 2 \frac{\delta f(x)}{\delta x}=f^\prime(x)=\frac{f(x+1)-f(x-1)}{2} δxδf(x)=f(x)=2f(x+1)f(x1)

我们仅仅使用一阶导数展开,一般来说,用来表示导数的泰勒级数的项越多,近似就越精确。包含更多的项意味着在近似中使用更多的点,产生更小的误差。然而,对于相同数量的点来说,已经证明中心差分的误差较小。因此导数通常表示为中心差分。

基于中心差分的二阶导数 δ 2 f ( x ) δ x 2 \frac{\delta^2 f(x)}{\delta x^2} δx2δ2f(x)可以由上面的 f ( x + 1 ) f(x+1) f(x+1)泰勒展开与 f ( x − 1 ) f(x-1) f(x1)泰勒展开相加得到:

δ 2 f ( x ) δ x 2 = ( f ′ ( x ) ) ′ = f ( x + 1 ) − 2 f ( x ) + f ( x − 1 ) \frac{\delta^2 f(x)}{\delta x^2}=(f^\prime (x))^\prime=f(x+1)-2f(x)+f(x-1) δx2δ2f(x)=(f(x))=f(x+1)2f(x)+f(x1)

上述只是一维上的二阶导数,而图像往往是二维坐标,我们可以写出双变量形式的一阶导与二阶导:

δ 2 f ( x , y ) δ x 2 = f ( x + 1 , y ) − 2 f ( x , y ) + f ( x − 1 , y ) \frac{\delta^2 f(x,y)}{\delta x^2}=f(x+1,y)-2f(x,y)+f(x-1,y) δx2δ2f(x,y)=f(x+1,y)2f(x,y)+f(x1,y)
δ 2 f ( x , y ) δ y 2 = f ( x , y + 1 ) − 2 f ( x , y ) + f ( x , y − 1 ) \frac{\delta^2 f(x,y)}{\delta y^2}=f(x,y+1)-2f(x,y)+f(x,y-1) δy2δ2f(x,y)=f(x,y+1)2f(x,y)+f(x,y1)

不难想到拉普拉斯算子应用到图像上的形式为:

∇ 2 f ( x , y ) = δ 2 f δ x 2 + δ 2 f δ y 2 = f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) − 4 f ( x , y ) \nabla^2 f(x,y)=\frac{\delta^2 f}{\delta x^2}+\frac{\delta^2 f}{\delta y^2}=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y) 2f(x,y)=δx2δ2f+δy2δ2f=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)

表现在图像上如下:
拉普拉斯算子,图像处理,python,人工智能,图像处理,算法

上右图便是拉普拉斯卷积核,该卷积核只考虑到了某一像素点的上下左右的位置,我们可以将其扩展为考虑到周围像素点的卷积核
拉普拉斯算子,图像处理,python,人工智能,图像处理,算法

如上图的卷积核,使用在图像上我们可以检测到孤立点。
为了在对图像做拉普拉斯卷积后为了可以更加突出孤立点,我们可以设置一个阈值,大于该阈值的像素点赋值为1,小于阈值的赋值为0.

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
imgfile = "./ImageProcessAndPractice/images/cameraman.jpg"
OriginalPic = np.array(Image.open(imgfile).convert('L'), dtype=np.int)
img = np.zeros((OriginalPic.shape[0]+2, OriginalPic.shape[1]+2), np.int)
# im = mpimg.imread(imgfile)
# print(im)
# plt.imshow(im)
########  制造遍历图像  ###################
for i in range(1, img.shape[0]-1):
    for j in range(1, img.shape[1]-1):
        img[i][j] = OriginalPic[i-1][j-1]

# 定义阈值函数
def threshold(x,v):
    if x > v:
        x = 255
    if x < v:
        x = 0
    return x

LaplacePic = np.zeros((OriginalPic.shape[0], OriginalPic.shape[1]), dtype=np.uint8)
kernel = [[1, 1, 1], [1, -8, 1], [1, 1, 1]]
for i in range(0, LaplacePic.shape[0]):
    for j in range(0, LaplacePic.shape[1]):
        LaplacePic[i][j] = threshold(abs(np.sum(np.multiply(kernel, img[i:i+3, j:j+3]))), 200)
fig = plt.figure(figsize=(12, 6))
plt.subplot(1,2,1)
plt.imshow(OriginalPic, cmap='gray')
plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(LaplacePic, cmap='gray')
plt.axis('off')

其输出如下
拉普拉斯算子,图像处理,python,人工智能,图像处理,算法
可以清晰的看见,我们将图片经过拉普拉斯卷积后,可以显示出图片的轮廓文章来源地址https://www.toymoban.com/news/detail-696887.html

到了这里,关于拉普拉斯算子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV—拉普拉斯算子(Laplacian)边缘检测:原理与实现

    目录 介绍 拉普拉斯算子的作用 拉普拉斯算子的原理 使用OpenCV实现拉普拉斯算子 完整代码展示 结论 拉普拉斯算子是一种常用于图像处理的边缘检测技术,它有助于识别图像中的边缘和纹理特征。本文将深入探讨拉普拉斯算子的原理,以及如何使用OpenCV实现它。        

    2024年02月04日
    浏览(35)
  • 图像金字塔、高斯金字塔、拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码

    图像金字塔是对图像进行多分辨率表示的一种有效且简单的结构。 一个图像金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像。图像金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率表示。 图像金字塔有什么作用? 图像金字塔常用于图像缩放、图像重

    2024年02月04日
    浏览(39)
  • 基于拉普拉斯金字塔的图像融合

    仅为笔记,供自己使用。 读入两幅大小相同的图像 img1 img2; 构建 img1 img2的 高斯金字塔,层数根据需要设定(本实验为7层); 根据高斯金字塔和拉普拉斯金字塔的关系,推出拉普拉斯金字塔的Li(也为7层,第一层大小和原图相同); 在 两组拉普拉斯图层 的每一层进行图像

    2024年02月11日
    浏览(31)
  • 机器视觉技术与应用实战(平均、高斯、水平prewitt、垂直prewitt、水平Sobel、垂直Sobel、拉普拉斯算子、锐化、中值滤波)

         扯一点题外话,这一个月经历了太多,接连感染了甲流、乙流,人都快烧没了,乙流最为严重,烧了一个星期的38-39度,咳嗽咳到虚脱。还是需要保护好身体,感觉身体扛不住几次连续发烧!(甲流乙流是病毒,提前准备好奥司他韦,这个是阻断病毒复制的药,48小时内

    2024年01月21日
    浏览(43)
  • Opencv 图像金字塔----高斯和拉普拉斯

    原文:图像金字塔----高斯和拉普拉斯 图像金字塔 是图像中多尺度表达的一种,最初用于机器视觉和图像压缩,最主要用于图像的分割、融合。 高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像。最下面的图像分辨率最高,越往上图像分辨率越低。 高斯

    2024年02月09日
    浏览(24)
  • 学习笔记:Opencv实现拉普拉斯图像锐化算法

    2023.8.19 为了在暑假内实现深度学习的进阶学习,Copy大神的代码,记录学习日常 图像锐化的百科: 图像锐化算法-sharpen_lemonHe_的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-contrib-python Code and lena.png:注意你是否在data下由lena.png   附上lena.png  效果所示(解读):

    2024年02月12日
    浏览(30)
  • 使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

    工作中遇到,简单整理 人脸识别中,对于模糊程度较高的图像数据,识别率低,错误率高。 虽然使用 AdaFace 模型,对 低质量人脸 表现尤为突出。 但是还是需要对 模糊程度高的图像进行丢弃处理 当前通过 阈值分类 ,符合要求的进行特性提取 实际应用中,可以维护一个 质

    2024年02月15日
    浏览(52)
  • 拉普拉斯锐化[原理及Python实现](含拉氏标定、拉普拉斯标定)

    [原理及Python实现](含拉氏标定、拉普拉斯标定) 原创文章;转载请注明出处:©️ Sylvan Ding 锐化处理的主要目的是突出灰度的过度部分。图像锐化的用途多种多样,应用范围从电子印刷和医学成像到工业检测和军事系统的制导等。利用图像微分可以增强边缘和其他突变(如

    2023年04月10日
    浏览(33)
  • opencv基础46-图像金字塔02-拉普拉斯金字塔

    前面我们介绍了高斯金字塔,高斯金字塔是通过对一幅图像一系列的向下采样所产生的。有时,我们希望通过对金字塔中的小图像进行向上采样以获取完整的大尺寸高分辨率图像,这时就需要用到拉普拉斯金字塔 前面我们已经介绍过,一幅图像在经过向下采样后,再对其进行

    2024年02月13日
    浏览(29)
  • 拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

          在SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一) 一文中我们曾经描述过基于几种高频融合法则的拉普拉斯金字塔融合算法,那里是主要针对2副图像的。实际的应用中,我们可能会遇到多帧图像的融合过程(图

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包