使用拉普拉斯算子的图像锐化的python代码实现——数字图像处理

原理

拉普拉斯算子是一个二阶导数算子,用于图像处理中的边缘检测。它通过计算图像亮度的二阶空间导数来工作,能够突出显示图像中的快速变化区域,如边缘。
图像锐化的原理:
图像锐化是指增强图像中的边缘和细节,使图像看起来更清晰。
拉普拉斯算子在图像锐化中的作用是通过强调图像中的高频部分(如边缘和纹理)来实现。
锐化过程:
应用拉普拉斯算子到图像上,得到一个包含边缘和高频细节的图像。
然后,这个得到的图像会与原始图像结合。通常,这是通过将拉普拉斯算子处理后的图像加到原始图像上来实现的。这种加法操作强化了原始图像中的边缘和纹理,从而提高了图像的清晰度和对比度。

注意事项:
拉普拉斯算子对噪声非常敏感,因此在进行锐化之前,可能需要对图像进行平滑处理以降低噪声。
锐化的程度需要适中,过度锐化可能会导致图像中出现不自然的边缘和噪声。

锐化步骤

使用拉普拉斯算子进行图像锐化的原理基于图像的二阶导数,主要用于突出图像中的边缘和细节。这个过程分为几个步骤:

边缘检测:拉普拉斯算子能够检测到图像中的边缘区域,即像素强度变化明显的区域。这是因为边缘通常对应于像素值的快速变化。

计算二阶导数:拉普拉斯算子实质上是计算图像的二阶导数。二阶导数是指函数(在此处指像素强度)变化率的变化率。当二阶导数的值大时,意味着该处的像素值变化剧烈,通常对应于边缘或细节。

强调边缘:通过将拉普拉斯算子的输出(边缘信息)与原始图像结合,可以增强图像的边缘和细节。这通常通过将拉普拉斯算子的结果加到原始图像上来实现,从而提高边缘区域的对比度,使图像看起来更加锐利。

处理结果:经过拉普拉斯算子处理后的图像,其边缘和细节部分会更加明显,从而使整个图像看起来更清晰。

噪声考虑:值得注意的是,由于拉普拉斯算子对噪声较为敏感,因此在应用之前可能需要对图像进行去噪处理,以避免噪声被过度放大。
拉普拉斯算子在图像锐化中的应用强调了图像中的高频细节,如边缘和纹理,使图像看起来更加清晰和定义明确。

输出结果

在这里插入图片描述

提示

在这里插入图片描述

python代码实现

import cv2
import numpy as np
from matplotlib import pyplot as plt


def correl2d(img, window):
    m = window.shape[0]
    n = window.shape[1]

    # 图像边界填0扩展
    img_border = np.zeros((img.shape[0] + m - 1, img.shape[1] + n - 1))
    img_border[(m - 1) // 2:img.shape[0] + (m - 1) // 2, (n - 1) // 2:img.shape[1] + (n - 1) // 2] = img
    img_result = np.zeros(img.shape)
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            temp = img_border[i:i + m, j:j + n]
            img_result[i, j] = np.sum(np.multiply(temp, window))
    return img_result


img = cv2.imread('Fig0338.tif', 0)

img_list = [img]
# 拉普拉斯滤波器模板
window1 = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
# 带有对角项的拉普拉斯滤波器模板
window2 = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])

img_result = correl2d(img, window1)

# # 对拉普拉斯的结果做标定
img_lap = 255*(img_result-img_result.min())/(img_result.max()-img_result.min())
img_list.append(img_lap)

# 将原图加上拉普拉斯滤波的结果图得到最终的锐化结果
img_sharpened = img - img_result
img_list.append(img_sharpened)

# 对window2再执行一遍锐化操作
img_result = correl2d(img, window2)
img_sharpened = img - img_result
img_list.append(img_sharpened)

_, axs = plt.subplots(2, 2)

for i in range(2):
    for j in range(2):
        axs[i, j].imshow(img_list[i * 2 + j], vmin=0, vmax=255, cmap='gray')
        axs[i, j].axis('off')

plt.savefig('sharpen.jpg')
plt.show()

结果展示

在这里插入图片描述

总结

在图像增强中,平滑是为了消除图像中噪声的干扰,或者降低对比度,与之相反,有时为了强调图像的边缘和细节,需要对图像进行锐化,提高对比度,所以图像锐化还是非常重要的,拉普拉斯锐化图像是根据图像某个像素的周围像素到此像素的突变程度有关,也就是说它的依据是图像像素的变化程度。一个函数的一阶微分描述了函数图像是朝哪里变化的,即增长或者降低;而二阶微分描述的则是图像变化的速度,急剧增长下降还是平缓的增长下降。那么据此可以猜测出依据二阶微分能够找到图像的色素的过渡程度,例如白色到黑色的过渡就是比较急剧的。或者用官方点的话说:当邻域中心像素灰度低于它所在的领域内其它像素的平均灰度时,此中心像素的灰度应被进一步降低,当邻域中心像素灰度高于它所在的邻域内其它像素的平均灰度时,此中心像素的灰度应被进一步提高,以此实现图像的锐化处理。
应用:运用拉普拉斯可以增强图像的细节,找到图像的边缘。但是有时候会把噪音也给增强了,那么可以在锐化前对图像进行平滑处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础知识:整理1 使用函数实现银行ATM操作

定义一个全局变量: money, 用来记录银行卡余额(默认为5000000) 定义一个全局变量: name, 用来记录客户姓名(启动程序时输入) 定义如下函数: 查询余额的函数; 存款函数; 取…

blender mix节点和它的混合模式

Mix 节点是一种用于混合两个颜色或者两个图像的节点,它有以下几个输入和输出: Color1:用于接收第一个颜色或者图像,也就是基色。Color2:用于接收第二个颜色或者图像,也就是混合色。Fac:用于控制…

第六节、项目支付功能实战-保证金支付、支付回调

摘要 上一节中,我们申请了商户的证书、APIv3密钥,以及编写了微信平台证书的下载的相关代码,并以微信平台证书下载和微信下单接口为例分析了sdkapi的使用、sdk是如何封装加签和验签的流程的。这一节我们将结合实际保证金支付业务来实现整个支付的功能。 功能实现 1、实现小…

RDS快速入门

目录 实例创建 设置白名单 RDS(Relational Database Service)是一种托管式的关系型数据库服务,它为用户提供了一种简单、可靠、安全的方式来部署、操作和扩展数据库。具有安全可靠、解决运维烦恼、有效降低成本和自研增加等四大特性&#x…

chromium通信系统-ipcz系统(九)-ipcz系统代码实现-跨Node通信-代理和代理消除

chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-基础通信 一文我们分析了跨Node的基础通信过程。 a进程和b进程通信的过程。 但在程序中a进程将自己打开的一对portal中的一个portal传递给了b进程。由于篇幅问题这个过程我们并没有分析,这篇文章我们就来…

学习MySQL(5.7)第二战:四大引擎、账号管理以及建库(干货满满)

目录 前言: 一.数据库存储引擎 1.存储引擎简介 存储引擎查看 support字段说明 2.四大引擎详细介绍 InnoDB MylSAM MEMORY Archive 二.数据库管理 1.元数据库简介 2.元数据库分类 infomation_schema mysql performance_schema ​编辑3.数据库…

协议基础笔记

Android串口使用方法_android-serialport的使用-CSDN博客 安卓与串口通信-基础篇_安卓串口通信-CSDN博客 串口简介 串口通信是Android智能硬件开发所必须具备的能力,市面上类型众多的外设基本都是通过串口进行数据传输的,所以说不会串口通信根本就做不…

亚马逊鲲鹏系统给我带来的真实体验感

我想分享一下我对亚马逊鲲鹏系统的使用体验。我一直在寻找一个方便且高效的方法来批量注册亚马逊买家账号,而亚马逊鲲鹏系统给了我一个理想的解决方案。 使用亚马逊鲲鹏系统进行批量注册是非常简便的。系统内置了全自动化的操作功能,只要提前准备好所需的…

华为交换机入门(六):VLAN的配置

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。 VLAN 主要用来解决如何…

Java-执行系统命令进程-实践篇

1 需求 2 接口 3 示例 import java.io.IOException;/*** 现象:1输出后马上输出2* 原因:子进程如果没有调用waitFor(),不会阻塞主进程*/ public class Test {public static void main(String[] args) {System.out.println(1);try {Runtime.ge…

全局异常和自定义异常处理

全局异常GlobalException.java,basePackages:controller层所在的包全路径 import com.guet.score_management_system.common.domian.AjaxResult; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bi…

CMake是什么?为什么学习CMake

文章目录 1.CMake简介2.为什么要学习CMake3.什么样的项目需要用CMake3.1大型或复杂项目3.2跨平台项目3.3需要高度定制化构建的项目3.4 研究和开源项目3.5小型或简单项目 4.CMake的作用5.支持的编译器5.1Windows平台5.2Unix/Linux平台5.3macOS平台5.4其他编译器5.5支持的平台 CM…

“AI+低代码”推动高等教育变革:腾讯云携手同济大学共探数智化

引言 近年来,数字化转型已成为各行各业提高运营效率和生产力的重要手段。而对于高校来说,转型已成为建设高质量教育体系的重要策略。但相较于迈出较早一步的企业群体,本身缺乏技术基因和运营成本的学校在数字化的转型上还较为滞后。 如何改变…

图神经网络——图学习

图学习 0. 前言1. 图2. 图学习3. 图神经网络小结 0. 前言 近年来,从社交网络到分子生物学等各个领域,数据的图表示越来越普遍。图神经网络 (Graph Neural Network, GNN) 是专为处理图结构数据而设计的,要充分挖掘图表示的潜力,深…

软件测试/测试开发丨接口测试学习笔记分享

一、Mock 测试 1、Mock 测试的场景 前后端数据交互第三方系统数据交互硬件设备解耦 2、Mock 测试的价值与意义 不依赖第三方数据节省工作量节省联调 3、Mock 核心要素 匹配规则:mock的接口,改哪些接口,接口哪里的数据模拟响应 4、mock实…

DevC++ easyx实现视口编辑--像素绘图板与贴图系统

到了最终成果阶段了,虽然中间有一些代码讲起来没有意思,纯靠debug,1-1解决贴图网格不重合问题,这次是一个分支结束。 想着就是把瓦片贴进大地图里。 延续这几篇帖子,开发时间也从2023年的4月16到了6月2号,80小时基本…

【Linux】进程控制深度了解

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握Linux下的进程控制 > 毒鸡汤&#xff…

Spring Boot快速搭建一个简易商城项目【四,优化购物车篇】

在之前的基础上继续将购物车进行完善:全选,删除,加减购物车数量 效果: 全选: 计算价格: //计算总价function jisuan(){let total 0;$(".th").each((i,el)>{//each遍历 i下标 el指的是当前的…

Goole上架年度总结(2023年)

今天来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改动 2023 年 2 月 22 日 生效日期&#xff1…

普中STM32-PZ6806L开发板(HAL库函数实现-TIM5捕获上升沿, 获取输入频率)

简介 通过TIM5_CH1捕获上升沿电平, 两个上升沿的计数值计算频率;电路原理图 连接图 将 PC7 与 PA0使用跳线进行连接 其他知识 APIs /* Blocking mode: Polling */ HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); // 堵塞捕获开启 HAL_St…