数据分析与算法设计-作业2-拉普拉斯算子空间滤波和增强

作业2

题目

对Flower.dat图像(1024×1024,np.uint8)用如下拉普拉斯算子进行空间滤波和增强:np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]]),图像边缘采用复制填充方式,不使用其他第三方库,使用numpy库完成数组操作。

思路

拉普拉斯算子进行空间滤波的主要作用是检测图像中的边缘和细节。它是一种二阶导数算子,通过计算图像中像素值的二阶导数来突出图像中的边缘和细节。滤波后的图像主要包含图像中的边缘和细节信息。通过将拉普拉斯滤波后的图像与原图像相加,可以增强图像的边缘和细节,从而使图像看起来更加锐利。

  1. 读取图像数据:使用 np.fromfile读取 mermaid flowchater.dat文件中的图像数据,并将其重塑为 1024×1024 的二维数组。
  2. 定义拉普拉斯算子:使用给定的 3×3 拉普拉斯算子。
  3. 图像边缘填充:使用 np.pad函数对图像进行边缘填充,填充值为边缘像素的复制。确保填充后的图像 padded_image的形状正确,仍然是二维数组,从而避免 IndexError
  4. 应用拉普拉斯算子:通过遍历图像中的每个像素点,提取其周围的 3×3 区域,应用拉普拉斯算子进行卷积操作,计算每个像素点的拉普拉斯滤波值,并将结果存储在 filtered_image 中。
    for i in range(1, padded_image.shape[0] - 1):
     for j in range(1, padded_image.shape[1] - 1):
         region = padded_image[i-1:i+2, j-1:j+2]
         filtered_image[i-1, j-1] = np.sum(region * laplacian_kernel)
         # filtered_image 没有填充边缘,所以索引需要减去 1。
    
    两层循环遍历图像中的每个像素点。i 和 j 分别表示图像的行和列索引。由于图像进行了边缘填充,循环从 1 开始,到 padded_image.shape[0] - 1padded_image.shape[1] - 1结束,以避免访问填充的边缘。
  5. 增强图像:将滤波后的图像与原图像相加,得到增强后的图像,并使用 np.clip将像素值裁剪到有效范围(0-255)。
  6. 显示和保存结果:使用 matplotlib显示原图,滤波结果和增强后的图像,并将增强后的图像保存为 Enhanced_Flower.dat文件。

结果

在这里插入图片描述
效果并不理想,因为原图是一幅uint8类图像,输出结果仍为uint8类,所有像素均为正值,而拉普拉斯滤波模板中存在负值,变换结果中的所有负值被截掉了。

改进

由于拉普拉斯滤波会产生负值,需要在增强图像之前处理这些负值。可以将滤波结果转换为 int16 类型,以便保留负值信息,具体改动如下:

  1. 初始化输出图像,使用 int16 类型:在初始化 filtered_image 时,使用 int16 类型以保留负值。
  2. 增强图像,使用 int16 类型:在增强图像时,将原图像转换为 int16 类型,以便与 filtered_image 相加时保留负值。
  3. 将增强后的图像裁剪到有效范围:使用 np.clip 将像素值裁剪到有效范围(0-255)。

得到改进后的结果,Filtered Image可以较为有效地提取Flower图像的边缘,增强图像中的细节:

在这里插入图片描述

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

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

相关文章

SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当下这个高速发展的时代,网络科技正以令人惊叹的速度不断迭代更新。从 5G …

基于SpringBoot的二手交易系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当今社会,随着电子商务的蓬勃发展和人们消费观念的转变,二手物品交易逐渐成为了一种新的生活方式。人们越来越倾向于将不再需要的物品进行二次交易,以实现资源的有效利用和环保理念的实践。…

vscode无法预览Markdown在线图片链接

问题:在VSCode中,打开MarkDown文件,存在在线图片链接, 但是在预览时却无法显示。 原因:因为Visual Studio Code中的MarkDown默认配置中只允许载入安全内容 解决方法: 1、输入快捷键 Ctrl Shift P 打开…

Power Query M函数

文章目录 三、PQ高阶技能:M函数3.1 M函数基本概念3.1.1 表达式和值3.1.2 计算3.1.3 运算符3.1.4 函数3.1.5 元数据3.1.6 Let 表达式3.1.6 If 表达式3.1.7 Error 3.2 自定义M函数3.2.1 语法3.2.2 调用定义好的自定义函数3.2.3 直接调用自定义函数3.2.4 自定义函数&am…

election靶机渗透测试

发现靶机ip地址 使用nmap进行扫描端口发现详细信息nmap -T4 -sV -sC -p- 192.168.52.142 用dirsearch扫一下网站的目录 看到一个phpinfo 一个phpmyadmin的登录页面 robots.txt文件 看一下这个election目录下并没有发现什么 继续进行目录扫描,这时候看到一个admin的l…

为AI聊天工具添加一个知识系统 之119 详细设计之60 圣灵三角形和Checker 之2

本文要点 要点回顾 我们回顾一下本题目的讨论内容。 我的想法是, 将Substance 作为 面向服务的架构的起点并基于差异来自下而上地分类 实体--目的是实体职责单一化,将Object作为面向对象的语义差异的系统原点 并沿着差异继承的路径来至上而下地划分对…

安全生产月安全知识竞赛主持稿串词

女:尊敬的各位领导、各位来宾 男:各位参赛选手、观众朋友们 合:大家好~ 女:安全是天,有了这一份天,我们的员工就会多一份幸福, 我们的企业就会多一丝光彩。 男:安全是地,有了这一片地,我们的员工就多了一…

五、Three.js顶点UV坐标、纹理贴图

一部分来自1. 创建纹理贴图 | Three.js中文网 ,一部分是自己的总结。 一、创建纹理贴图 注意:把一张图片贴在模型上就是纹理贴图 1、纹理加载器TextureLoader 注意:将图片加载到加载器中 通过纹理贴图加载器TextureLoader的load()方法加…

Deepin(Linux)安装MySQL指南

1.下载 地址:https://downloads.mysql.com/archives/community/ 2.将文件解压到 /usr/local 目录下 先cd到安装文件所在目录再解压,本机是cd /home/lu01/Downloads sudo tar -xvJf mysql-9.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local3.创建软链…

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址:[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码:GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …

Aseprite绘画流程案例(1)——画相机图标

原图: 步骤一:打开需要参照的图标 步骤二:将参照的图片拖放到右边,作为参考 步骤三:新建24x24的画布,背景为白色的画布 步骤四:点击菜单栏——视图——显示——像素网格(如果画布已经…

计算机毕业设计SpringBoot+Vue.js母婴商城(源码+LW文档+PPT+讲解+开题报告)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本: 2. springboot项目搭建 可以集成在自己的项目里,也可以到 spring.io 生成一个项目 生成的话,如下…

Android输入事件传递流程系统源码级解析

1. 硬件层到Linux内核 设备节点:触摸事件由内核驱动捕获,写入/dev/input/eventX。关键结构体:input_event(包含时间戳、类型、代码、值)。 2. Native层处理(system_server进程) 2.1 EventHub …

贪心算法

int a[1000], b5, c8; swap(b, c); // 交换操作 memset(a, 0, sizeof(a)); // 初始化为0或-1 引导问题 为一个小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆,第i个房间有J[i] 磅的五香豆&#xf…

HDFS Java 客户端 API

一、基本调用 Configuration 配置对象类&#xff0c;用于加载或设置参数属性 FileSystem 文件系统对象基类。针对不同文件系统有不同具体实现。该类封装了文件系统的相关操作方法。 1. maven依赖pom.xml文件 <dependency><groupId>org.apache.hadoop</groupId&g…

Scrum方法论指导下的Deepseek R1医疗AI部署开发

一、引言 1.1 研究背景与意义 在当今数智化时代&#xff0c;软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论&#xff0c;以其迭代式开发、快速反馈和高效协作的特点&#xff0c;在软件开发领域占据了重要地位。自 20 世纪 90 …

网络工程知识笔记

1. 什么是网络&#xff1f; 网络是由多个节点&#xff08;如计算机、打印机、路由器等&#xff09;通过物理或逻辑连接组成的系统&#xff0c;用于数据的传输和共享。这些节点可以通过有线&#xff08;如以太网&#xff09;或无线&#xff08;如 Wi-Fi&#xff09;方式进行连接…

qt项目配置部署

Test项目: 子项目testFileHelper 1.新建一个test项目的子项目:取名testFileHelper 2.编写测试用例 3.pro文件中引入qosbrowser 4.引入测试对象的cpp和头文件 2.在项目中引入资源文件testfile.txt,在其中输入abc 实现thrid目录复用 移动thrid 将thrild目录统一放在章…

1.1 go环境搭建及基本使用

golang下载地址&#xff1a; Download and install - The Go Programming Language (google.cn) 验证安装是否成功&#xff1a; go version 查看go环境 go env 注意&#xff1a;Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目&#xff0c;也不需要把项目放到GO…