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

news2024/12/23 22:54:29

原理

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

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

锐化步骤

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

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

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

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

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

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

输出结果

在这里插入图片描述

提示

在这里插入图片描述

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()

结果展示

在这里插入图片描述

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK,发现 虚拟机默认的 200G 空间不足了,因此想增加这个 200G 空间的限制,通过网络上查找了一些方法,加上自己亲自验证,确认 硬盘扩容 正常,方法也比较的容易&a…

微服务-OpenFeign-工程案例

Ribbon 前置知识 是NetFlix的开源项目,主要来提供关于客户端的负载均衡能力。从多个服务提供方,选取一个节点发起调用。 Feign:NetFlix,SpringCloud 的第一代LB(负载均衡)客户端工具包。 OpenFeign:SpringCloud自研&#xff0c…

计算机基础面试题 |03.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

c语言内嵌汇编知识点记录

内容在飞书云文档,点击打开即可。 Docshttps://r0dhfl3ujy9.feishu.cn/docx/EaVIdjGVeoS6fUxiKWkcjAq8nWg?fromfrom_copylink

使用定时器setInterval,在Moment.js 时间格式化插件基础上完成当前时间持续动态变化

1、引入插件 npm install moment --save 2、js配置&#xff1a;当前需要使用的文件中直接引入 import moment from moment; 3、代码实现&#xff1a;定义一个变量进行回显 3.1、dom部分 <span> {{ timeData }} </span> 3.2、js代码 <script> import mo…

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

单片机开发--keil5

一.keil5 Keil uVision5是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于对嵌入式系统中的微控制器进行编程。它是一个软件套件&#xff0c;包括源代码编辑器、项目经理、调试器以及微控制器开发、调试和编程所需的其他工具。Keil uVision5 IDE主要用于对基于A…

python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error

python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error 废话不说&#xff0c;先上代码&#xff0c;根据官网的介绍写的,chatgpt3.5 api简单调用 import os from openai import OpenAI from dotenv import load_dotenv# 加载 .env 文件中的变量 load_…

基于矩阵乘的CUDA编程优化过程

背景&#xff1a;网上很多关于矩阵乘的编程优化思路&#xff0c;本着看理论分析万遍&#xff0c;不如实际代码写一遍的想法&#xff0c;大概过一下优化思路。 矩阵乘的定义如下&#xff0c;约定矩阵的形状及存储方式为: A[M, K], B[K, N], C[M, N]。 CPU篇 朴素实现方法 按照…

阿里云域名外部入库流程

注册商是阿里云&#xff0c;且在阿里云管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是阿里云但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录阿里云获取账号ID。详细的账…

SPSS25软件安装包下载及安装教程

SPSS 25下载链接&#xff1a;https://docs.qq.com/doc/DUlFFZ0dpWVhUZFpW 1.选中下载好的安装包&#xff0c;鼠标右键解压到“SPSS 25 64bit”文件夹 2.选中”SPPS 25 64bit.exe“鼠标右击选择以管理员身份运行 3.点击“下一步” 4.选择“我接受许可协议中的全部条款”&#x…

Hive06_基础查询

HIVE 查询语句 1 查询语句语法&#xff1a; SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMI…

YOLOv8改进:IoU系列篇 | Shape-IoU关注边界框本身的形状和尺度来计算损失 | 2023年12月最新IoU改进

🚀🚀🚀本文改进: 提出了一种新颖的Shape-IoU,小目标检测实现涨点,更加关注边界框本身的形状和尺度来计算损失 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Shape-IoU原理介绍 论文:https://ar…

window下载安装Mongodb数据库

我们先要访问他的官网 https://www.mongodb.com/zh-cn 然后顶部导航栏 选择 (Products/产品) 下的 (Community Edition/社区版) 进入界面后 找到 MongoDB Community Server Download 点击下面的按钮 Select package 然后会弹到这个位置 第一个版本 用系统默认选择的就好 第二…

第三百四十一回

文章目录 1. 概念介绍2. 使用方法与主要功能2.1 使用方法2.2 主要功能 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取App自身信息"相关的内容&#xff0c;本章回中将介绍一个三方包:open_setting.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念…

mysql报错:can‘t create more than max_prepared_stmt_count statements

max_prepared_stmt_count 参数控制了一个 MySQL 实例能够准备的最大预处理语句&#xff08;prepared statements&#xff09;的数量。 预处理语句是一种优化技术&#xff0c;可以在应用程序发送sql语句到数据库之前先将其编译和缓存起来&#xff0c;以提高sql的执行效率以及防…

【Amazon Bedrock】体验 Bedrock 的基本功能,为构建强大安全的LLM应用而准备

文章目录 一、什么是Amazon Bedrock&#xff1f;二、为什么选择 Amazon Bedrock三、访问Amazon Bedrock UI四、与Amazon Bedrock 聊天五、对比Amazon Bedrock 不同基础模型的返回结果六、让Amazon Bedrock处理文本七、利用Amazon Bedrock生成图片八、参考链接 一、什么是Amazon…

CMake入门教程【基础篇】打印(message)

文章目录 1. 基本用法示例 2. 打印变量的值示例 3. 打印列表的值示例 4. 打印生成器表达式的值示例 5.总结 #mermaid-svg-pXC2tr41PvHonKJa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pXC2tr41PvHonKJa .error-…

解决Golang WriteHeader设置后,Content-Type失效的问题

场景 最近笔者在研究web框架过程中&#xff0c;发现了一个响应类型的问题&#xff0c;困扰许久&#xff0c;原因就是设置了响应状态码后&#xff0c;然后设置响应类型为application/json。在实际请求后&#xff0c;响应类型变成了text/plain; charsetutf-8格式。 问题解决&…

redis安装与配置(Ubuntu)

目录 1. 切换到 root 用户 2. 搜索安装包 3. 安装 redis 4. 查看 redis 是否正常存在 5. 修改ip 6. 重新启动服务器 7. 连接服务器 1. 切换到 root 用户 通过 su 命令切换到 root 用户。 2. 搜索安装包 apt search redis 这里安装的是下面的版本&#xff1a; 3. 安装 …