拉普拉斯算子

article/2025/8/25 14:30:54

文章目录

  • 哈密尔顿算子
  • 梯度
  • 散度
  • 拉普拉斯算子
  • 图像处理——拉普拉斯算子

在介绍拉普拉斯算子概念之前我们先介绍,哈密尔顿算子( ∇ \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

拉普拉斯算子从某种程度上看是对某一函数求二阶导数,我们在学数学分析的时候知道一阶导数表示函数某一点的变化量,而二阶导数则表示该点的变化速率,即凹凸性,我们将其放在图像上观察
在这里插入图片描述

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

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

假设一张图片的的某一列值看做函数 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)

表现在图像上如下:
在这里插入图片描述

上右图便是拉普拉斯卷积核,该卷积核只考虑到了某一像素点的上下左右的位置,我们可以将其扩展为考虑到周围像素点的卷积核
在这里插入图片描述

如上图的卷积核,使用在图像上我们可以检测到孤立点。
为了在对图像做拉普拉斯卷积后为了可以更加突出孤立点,我们可以设置一个阈值,大于该阈值的像素点赋值为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 = 255if x < v:x = 0return xLaplacePic = 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')

其输出如下
在这里插入图片描述
可以清晰的看见,我们将图片经过拉普拉斯卷积后,可以显示出图片的轮廓


http://chatgpt.dhexx.cn/article/jm5giSF2.shtml

相关文章

微信小程序阻止冒泡事件

阻止冒泡事件 当点击清空小图标时还会触发picker框弹出 解决方法&#xff1a; 将bindtap改为catchtap

uniapp小程序点击事件阻止冒泡

uniapp开发的小程序使用click.stop发现无法阻止冒泡&#xff0c;找了半天也不知道什么问题 后来把代码改成了 click.stop 去阻止事件冒泡的改成 tap.stop 去阻止事件冒泡 <view class"contents" v-for"(item, index) in data" :key"index&…

阻止冒泡的方法

阻止冒泡 1.标准写法 普通浏览器 e.preventDefault(); 方法&#xff0c; 2、非标准写法 e.cancelBubble true 3.阻止冒泡兼容性方案 4、使用传统的注册方式 // 3. 传统的注册方式a.onclick function(e) {// 普通浏览器 e.preventDefault(); 方法// e.preventDefault(…

JS如何阻止冒泡事件

1、背景 1.1 什么是事件冒泡 当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级&#xff0c;一直到window 。 优点&#xff1a;事件委托可以利用事件冒泡&#xff0c;来达到只指定一个事件处理程序就可以管理某一项类型的所有事件的效果&#xff0c;只添加一个事…

VUE的阻止冒泡事件

VUE的阻止冒泡事件 vue中的阻止冒泡事件可以帮助我们实现当子盒子被点击时&#xff0c;父盒子不被触发对应的点击事件。 1.click.stop()方法 <div class"boxParent" click"Parent($event)"><div class"boxSon" click"son($even…

阻止默认阻止冒泡

阻止默认&阻止冒泡 默认事件冒泡事件 默认事件 什么是默认事件 默认事件是元素默认会触发的事件&#xff0c;比如当你进入网页&#xff0c;右击鼠标会冒出菜单栏 怎么阻止默认事件发生 e.preventDefault(); <!DOCTYPE html> <html lang"en"> <h…

React中阻止冒泡

title: React中阻止冒泡 date: 2022-08-26 22:28:17 tags: React框架阻止冒泡行为 categories:框架React React中阻止冒泡 原因&#xff1a;在制作一个关于日历组件的时候&#xff0c;遇到一个bug&#x1f625;,点击input框让日历显示&#xff0c;点击日历以外的区域日历框隐…

阻止事件冒泡的方法

html结构: <body><form id"form1" runat"server"><div id"divOne" onclick"alert(我是最外层);"><div id"divTwo" onclick"alert(我是中间层&#xff01;)"><aid"hr_three"…

vue 阻止事件冒泡常用的方法

在 Vue 中&#xff0c;阻止事件冒泡有两种常用方法&#xff1a; 1. 使用 event.stopPropagation() 方法&#xff1a; 在事件处理函数中&#xff0c;可以通过调用事件对象的 stopPropagation() 方法来阻止事件冒泡。例如&#xff1a; html <template> <div click"…

大数据行业预测分析

大数据的发展引发了全球范围内深刻的技术与商业变革&#xff0c;已经成为全球发展的趋势以及国家、企业间的竞争焦点。数据作为一种资产的意识不断增强&#xff0c;越来越多的国家将数据定义为国家战略资源&#xff0c;开始抢占信息时代的制高点和竞争力。对于大数据行业的预测…

大数据与机器学习-大数据预测

大数据预测 量化交易 量化交易

你不好奇什么是大数据吗?快点进来看一看

大数据&#xff08;big data&#xff09;是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 //最小的基本单位是bit按顺序给出所有单位…

java代码验证大数据算法在竞猜足球预测分析中准确率

最近闲来无事&#xff0c;出于对足球的热爱&#xff0c;又痴迷于大数据技术&#xff0c;用java建了百来种算法模型&#xff0c;写了一个小软件&#xff0c;用来分析预测竞猜足球的胜平负。或许很多朋友都有疑问&#xff0c;竞猜足球到底怎么分析才能预测准确&#xff1f;竞猜足…

【毕业设计】大数据电商销售预测分析 - python 数据分析

文章目录 1 前言2 开始分析2.1 数据特征2.2 各项投入与销售额之间的关系2.3 建立销售额的预测模型 3 最后 1 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&…

大数据模型预测实践(knn算法+词嵌入)

大数据模型预测实践&#xff08;knn算法词嵌入&#xff09; 前言词嵌入(Word Embedding)KNN算法什么是KNN算法实现代码 前言 此次项目为根据北京大数据网站给出的用户信息和相应用户所游玩的景点&#xff0c;预测后续游客将要游玩的景点 由于数据集中许多标签为文字标签&#…

大数据预测:未来最吸金的领域

到了2020年&#xff0c;世界上每个人每秒将创造7 MB的数据。在过去的几年里&#xff0c;我们已经创造了比人类历史上更多的数据。大数据席卷全球&#xff0c;并且没有放缓的迹象。人们可能会想&#xff0c;“大数据产业从哪里开始?”以下有10个大数据预测可以回答这个有趣的问…

大数据预测未来趋势

数据是近年来备受关注的一门技术&#xff0c;大数据技术的战略意义不在于掌握庞大的数据信息&#xff0c;而在于对这些含有意义的数据进行专业化处理。 换而言之&#xff0c;如果把大数据比作一种产业&#xff0c;那么这种产业实现盈利的关键&#xff0c;在于提高对数据的“加工…

【“工业大数据预测”系列】——第1篇:谈谈工业大数据

前言 笔者在本科毕业设计之时初次接触到了工业大数据&#xff0c;深感其应用前景广阔&#xff0c;同时将来研究生的方向也是大数据预测建模&#xff0c;因此针对毕设以及自己的前期学习先做个阶段性总结&#xff0c;通过这个系列介绍自己的一些认识与心得体会。 由于本人在本科…

大数据的关键思考系列29:数据预测

作者 | 橙子 审核 | gongyouliu 编辑 | gongyouliu 在上次内容中&#xff0c;我们讲到了“大数据与时尚业”&#xff0c;今天我们讨论一下“数据预测”。 从大量数据的收集到找出有用的规律&#xff0c;要预测结果需经得起时间考验&#xff0c;非常不容易。如果不能将预测付诸行…