频域的拉普拉斯算子

article/2025/8/25 14:45:43

频域的拉普拉斯算子

一、定义:

拉普拉斯算子可以使用如下滤波器在频率域实现:
H ( u , v ) = − 4 ∗ π 2 ( u 2 + v 2 ) H(u,v) = -4*\pi^2 (u^{2} + v^{2}) H(u,v)=4π2(u2+v2)
或者,关于频率矩阵的中心,使用如下滤波器:
H ( u , v ) = − 4 ∗ π 2 ( ( u − P 2 ) 2 + ( v − Q 2 ) 2 ) H(u,v) = -4*\pi^2 ((u - \frac{P}{2})^{2} +( v - \frac{Q}{2})^{2}) H(u,v)=4π2((u2P)2+(v2Q)2)
其中,D(u,v)是上式给出的距离函数。然后,拉普拉斯图像由下式得到:
▽ 2 f ( x , y ) = ∋ − 1 H ( u , v ) ∗ F ( u , v ) \bigtriangledown^{2} f(x,y) = \owns^{-1}{H(u,v)*F(u,v)} 2f(x,y)=1H(u,v)F(u,v)
其中,F(u,v) 是 f(x,y) 的傅里叶变换。可以使用下式进行增强:
g ( x , y ) = f ( x , y ) + c ▽ 2 f ( x , y ) g(x,y) = f(x,y) + c\bigtriangledown^{2} f(x,y) g(x,y)=f(x,y)+c2f(x,y)

二、代码实现:

原始图片:原始图片

代码1:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件        :频率域的拉普拉斯算子.py
@说明        :
@时间        :2021/05/14 20:31:55
@作者        :zt
@版本        :1.0
'''
import cv2
import math
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import rcParamsrcParams['font.family'] = 'simhei'path = r"图片位置"#读取图片,以灰度级的形式
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.title("原始图像")
plt.xticks([]), plt.yticks([])
plt.show()# '''
# 归一化到[0,1]
# '''
# img_max = max(max(row) for row in img)
# img_gui = img/img_maxrows, cols = img.shapeimg_k = np.zeros((2*rows,2*cols)) #用来制作傅里叶变换"""标定"""img_min = np.min(img)
fm = img - img_min
img_max = np.max(fm)
fs = (fm/img_max)img_k[:rows,:cols] = fs
print("扩充后:")
print(img_k.shape)
print(img_k)plt.imshow(img_k, cmap = 'gray', interpolation = 'bicubic')
plt.title("扩充图像")
plt.xticks([]), plt.yticks([])
plt.show()'''
(-1)(x+y)乘以img_k移到其中心
'''
# for i in range(img_k.shape[0]):
#     for j in range(img_k.shape[1]):
#         if (i+j)%2!=0:
#             img_k[i][j] = (-1)*img_k[i][j]crows, ccols =int(rows), int(cols) #得到频率域的中心点坐标print(crows,ccols)'''
构建h(u,v),并求出来
'''
h = np.zeros((2*rows,2*cols))for i in range(rows):for j in range(cols):h[i][j] = 1+4*math.pow(math.pi,2)*(math.pow(i-crows,2)+math.pow(j-ccols,2))print("h(u,v):")
print(h[crows,ccols])ff = np.fft.fft2(img_k) #图片扩充移其中心后的傅里叶变换fshift = np.fft.fftshift(ff)    #将零频率分量移到频谱中心
h_f = np.zeros_like(h)
for i in range(len(h)):for j in range(len(h[0])):h_f[i,j] = h[i,j] * fshift[i,j]ishift = np.fft.ifftshift(h_f) #ishift是一个复数数组
i_img = np.fft.ifft2(ishift) #逆傅里叶变换,得到仍然是一个复数数组
i_img = np.abs(i_img) #取模,与取实部差不多plt.imshow(i_img, cmap = 'gray', interpolation = 'bicubic')
plt.title("nibianhua")
plt.xticks([]), plt.yticks([])
plt.show()c = 1
g = img + c*i_img[:rows,:cols] #总计算公式plt.imshow(g, cmap = 'gray', interpolation = 'bicubic') #绘图
plt.title("频率域拉普拉斯处理后")
plt.xticks([]), plt.yticks([])
plt.show()

效果:
在这里插入图片描述

代码2:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件        :频率域的拉普拉斯算子.py
@说明        :
@时间        :2021/05/14 21:31:50
@作者        :zt
@版本        :1.0
'''import cv2
import math
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import rcParamsrcParams['font.family'] = 'simhei'path = r"图片位置"#读取图片,以灰度级的形式
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
"""值域[0,1]"""
img_min = np.min(img)
fm = img - img_min
img_max = np.max(fm)
fs = (fm/img_max)
rows, cols = img.shapeimg_k = np.zeros((2*rows,2*cols)) #用来制作傅里叶变换
img_k[:rows,:cols] = fsff = np.fft.fft2(img_k) #傅里叶变换fshift = np.fft.fftshift(ff)    #将零频率分量移到频谱中心m,n = fshift.shapeo_x,o_y = int(m/2),int(n/2)a_max = np.max(fshift)img_zero = np.zeros((m,n))  #滤波后的频谱for i in range(m):for j in range(n):h = (-4)*math.pow(math.pi,2)*(math.pow(i-o_x,2)+math.pow(j-o_y,2))/a_max #拉普拉斯滤波器,除以img_f的最大值a_max是为了将H(i,j)标定到[-1,1]的范围内img_zero[i,j] = (1-h)*fshift[i,j]ishift = np.fft.ifftshift(img_zero) #ishift是一个复数数组
i_img = np.fft.ifft2(ishift) #逆傅里叶变换,得到仍然是一个复数数组,不要以为直接得到图像的像素值.
i_img = np.abs(i_img)plt.imshow(i_img[:rows,:cols], cmap = 'gray', interpolation = 'bicubic')
plt.title("频率域拉普拉斯处理后")
plt.xticks([]), plt.yticks([])
plt.show()

效果:
在这里插入图片描述


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

相关文章

matlab拉普拉斯算子锐化,cv-拉普拉斯算子锐化浅析

式(3.7.1)中的二维拉普拉斯数字实现可由这两个分量相加得到: 从而得到拉普拉斯算子 意思同上面的一阶微分算子相同。 这里解释一下微分算子的使用,很简单,如上面这个就是在处理每个像素点的RGB值时,将该像素的RGB三个值乘以4然后减…

拉普拉斯算子Laplace

拉普拉斯算子Laplace 概述二阶差分算子模板应用原理python代码实现opencv代码效果展示 概述 定义:拉普拉斯算子是n维欧几里德空间中的一个二阶微分算子,是用二阶差分来计算图像的边缘。 拉普拉斯算子是一种各向同性微分算子,它具有旋转不变性…

Laplace operator 拉普拉斯算子

一 概要介绍 我们主要关注拉普拉斯算子在图像方面的应用。首先,列出二维拉普拉斯算子的定义: Δ f ∂ 2 f ∂ x 2 ∂ 2 f ∂ y 2 \Delta f \frac{\partial^2f}{\partial x^2} \frac{\partial^2f}{\partial y^2} Δf∂x2∂2f​∂y2∂2f​ 从公式中可…

通俗理解拉普拉斯算子(Laplace)

离散的一阶微分 离散的一阶微分定义为差分,如二维离散函数 f ( x , y ) \ f(x,y) f(x,y) (图像其实就可以看作一种二维离散函数,因为其反映的是不同像素点在x 和 y 轴方向上灰度的变化)在 x 方向上的一阶微分为 : σ f σ x f ( x 1 , y ) − f ( x ,…

拉普拉斯算子

文章目录 哈密尔顿算子梯度散度拉普拉斯算子图像处理——拉普拉斯算子 在介绍拉普拉斯算子概念之前我们先介绍,哈密尔顿算子( ∇ \nabla ∇),梯度,散度等概念 哈密尔顿算子 所谓哈密尔顿算子即为某一物理量在笛卡尔坐…

微信小程序阻止冒泡事件

阻止冒泡事件 当点击清空小图标时还会触发picker框弹出 解决方法: 将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; 对毕设有任何疑问都可以问学长哦! 这两年开始&…