数字图像处理:实验六
uu们!大家好,2025年的新年就要到来,咸鱼哥在这里祝大家在2025年每天开心快乐,天天挣大钱,自由自在,健健康康,万事如意!(要是咸鱼哥嘴笨的话,还望大家多多包涵!因为咸鱼哥不太机灵。。。没办法(单纯就是不太会表达自己的意思,所以过年不太讨喜emmm...))在本章,咸鱼哥主要是针对于锐化空间滤波的概念和方法来进行实验的操作和代码的讲解,uu们!我们开始本章实验吧!
一、基础知识
1.拉普拉斯变换(算子):

在数字图像处理中:


(实际上这个算式很好理解,在3*3的蒙板中,我们的中心为(x,y),而算式中的前四个就是和(x,y)四邻接的四个方块的值,实际上就是十字上的处中心的值相加,然后再减去中心(x,y)的4倍值就可以计算出来了。)
注:这个蒙板只是一个例子,并不是规定中心一定为负数,还有以下的形式,包括中心点为正,还有和不为零等情况。

增强方法:


2、sobel变换(算子):


二、具体要求
1、依据拉普拉斯算子,选用模板1~8对自选图(不能选图例1)进行锐化处理;依据Sobel算子选用模板9~10对自选图(不能选图例2)进行边缘检测。
2、应用拉普拉斯算子时,每种模板的对应输出图包 含“原图”、“依据模板X(X代表模板数)滤波后”、“拉普拉斯锐化后”3个子图,因此对于拉普拉斯锐化有8 个输出图,一共24个子图,每个子图都要有上述对 应的3个子图名。 应用Soble算子时,为1张输出图,包含3个子图:“原图”、“行检测”、“列检测”。
三、应用编程
输入透射CT(全身或局部)图像,设计一个算法流程, 进行层次化的图像增强,得到增强效果更好的结果图像。
要求如下:
1. 使用高斯滤波进行预处理,减少noise;
2. 使用拉普拉斯滤波进行细节增强;
3. 使用Sobel 边缘检测增强边缘;
4. 对比度受限的低对比度区域使用自适应直方图 均衡化提升对比度;
5. 用中值滤波去除噪声点;
6. 分析比较不同阶段的图像效果;
7. 将上述所有滤波方法进行优化组合获得增强图。
四、编程
img = imread('1.png'); % 替换为你的图像路径 % 从指定路径读取图像文件
img_gray = rgb2gray(img); % 转换为灰度图像 % 将读取的彩色图像转换为灰度图像A=-8; % 定义一个变量A,用于后续模板中的计算% 拉普拉斯模板(示例,你可以根据需要定义其他模板)
laplacian_templates = { % 定义一个cell数组,存储不同的拉普拉斯模板[0 1 0; 1 -4 1; 0 1 0], % 模板1[1 1 1; 1 -8 1; 1 1 1], % 模板2[0 -1 0; -1 4 -1; 0 -1 0], % 模板3[-1 -1 -1; -1 8 -1; -1 -1 -1], % 模板4% 增强模板5(负中心,增强边缘检测效果)[0 1 0; 1 (A-4) 1; 0 1 0], % 模板5,中心系数为A-4% 增强模板6(负中心,同样增强边缘检测效果)[1 1 1; 1 (A-8) 1; 1 1 1], % 模板6,中心系数为A-8% 增强模板7(正中心,用于强调中心像素)[0 -1 0; -1 (A+4) -1; 0 -1 0], % 模板7,中心系数为A+4% 增强模板8(正中心,增强中心像素的影响)[-1 -1 -1; -1 (A+8) -1; -1 -1 -1] % 模板8,中心系数为A+8
};% 拉普拉斯算子处理并显示结果,每个模板一个窗口
for i = 1:length(laplacian_templates)figure; % 创建新窗口 % 为每个模板的处理结果创建一个新的显示窗口% 原图subplot(1, 3, 1); % 在1行3列的子图中占据第1个位置imshow(img_gray); % 显示灰度图像title(['原图 - 模板' num2str(i)]); % 设置标题,显示当前处理的模板编号% 依据模板滤波后filtered_img = imfilter(double(img_gray), laplacian_templates{i}, 'same', 'replicate'); % 使用拉普拉斯模板进行滤波subplot(1, 3, 2); % 在1行3列的子图中占据第2个位置imshow(filtered_img, []); % 显示滤波后的图像,使用空矩阵[]自动调整显示范围title(['依据模板' num2str(i) '滤波后']); % 设置标题% 拉普拉斯锐化后sharpened_img = double(img_gray) - filtered_img; % 通过原图减去滤波后的图像进行锐化sharpened_img = uint8(sharpened_img); % 将结果转换为uint8类型subplot(1, 3, 3); % 在1行3列的子图中占据第3个位置imshow(sharpened_img); % 显示锐化后的图像title(['拉普拉斯锐化后 - 模板' num2str(i)]); % 设置标题
end
结果:








应用代码:
% Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1]; % Sobel算子的x方向模板
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1]; % Sobel算子的y方向模板% 行检测(注释说明了不推荐手动执行卷积操作的原因)
edge_x = imfilter(double(img_gray), sobel_x, 'same', 'replicate'); % 使用Sobel x方向模板进行滤波
edge_x = uint8(255 * mat2gray(edge_x)); % 将滤波结果归一化到0-255范围并转换为uint8类型% 列检测(同理,使用Sobel y方向模板进行滤波)
edge_y = imfilter(double(img_gray), sobel_y, 'same', 'replicate'); % 使用Sobel y方向模板进行滤波
edge_y = uint8(255 * mat2gray(edge_y)); % 将滤波结果归一化到0-255范围并转换为uint8类型% 显示结果
figure; % 创建一个新的显示窗口
% 原图
subplot(1, 3, 1); % 在1行3列的子图中占据第1个位置
imshow(img_gray); % 显示灰度图像
title('原图'); % 设置标题% 行检测
subplot(1, 3, 2); % 在1行3列的子图中占据第2个位置
imshow(edge_x); % 显示行检测的结果
title('行检测'); % 设置标题% 列检测
subplot(1, 3, 3); % 在1行3列的子图中占据第3个位置
imshow(edge_y); % 显示列检测的结果
title('列检测'); % 设置标题
结果:

代码:
% 读取CT图像
ct_img = imread('1.png'); % 替换为你的CT图像路径
ct_img_gray = rgb2gray(ct_img); % 转换为灰度图像% 1. 使用高斯滤波进行预处理,减少噪声
filtered_img = imgaussfilt(ct_img_gray, 2); % 对灰度图像进行高斯滤波% 2. 使用拉普拉斯滤波进行细节增强
laplacian_kernel = [0 -1 0; -1 4 -1; 0 -1 0]; % 拉普拉斯算子
detail_enhanced = imfilter(double(filtered_img), laplacian_kernel, 'same', 'replicate'); % 对滤波后的图像进行拉普拉斯滤波
detail_enhanced = double(filtered_img) - detail_enhanced; % 使用原图减去拉普拉斯滤波结果进行细节增强
detail_enhanced = uint8(detail_enhanced); % 转换为uint8类型% 定义Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1]; % Sobel算子的x方向分量
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1]; % Sobel算子的y方向分量% 3. 使用Sobel 边缘检测增强边缘
edge_x = imfilter(double(detail_enhanced), sobel_x, 'same', 'replicate'); % 对细节增强后的图像进行x方向Sobel滤波
edge_y = imfilter(double(detail_enhanced), sobel_y, 'same', 'replicate'); % 对细节增强后的图像进行y方向Sobel滤波
edge_magnitude = sqrt(edge_x.^2 + edge_y.^2); % 计算边缘强度
edge_magnitude = uint8(255 * (edge_magnitude - min(edge_magnitude(:))) / (max(edge_magnitude(:)) - min(edge_magnitude(:)))); % 归一化到0-255范围% 4. 对比度受限的低对比度区域使用自适应直方图均衡化提升对比度
adapthisteq_img = adapthisteq(detail_enhanced); % 对细节增强后的图像进行自适应直方图均衡化% 5. 用中值滤波去除噪声点
final_img = medfilt2(adapthisteq_img, [3 3]); % 对自适应直方图均衡化后的图像进行中值滤波% 6. 分析比较不同阶段的图像效果
figure;
subplot(2, 3, 1);
imshow(ct_img_gray);
title('原图');subplot(2, 3, 2);
imshow(filtered_img);
title('高斯滤波后');subplot(2, 3, 3);
imshow(detail_enhanced);
title('拉普拉斯细节增强后');subplot(2, 3, 4);
imshow(edge_magnitude);
title('Sobel边缘检测后');subplot(2, 3, 5);
imshow(adapthisteq_img);
title('自适应直方图均衡化后');subplot(2, 3, 6);
imshow(final_img);
title('最终增强图');
% 7. 将上述所有滤波方法进行优化组合获得增强图(已在上一步完成)
结果:

五、结语
uu们!本章实验的实验结果到此就结束了,临近春节,给自己放个假才让我们更好的去面对崭新的2025,uu们,下一章我们见!
相关文章:
数字图像处理:实验六
uu们!大家好,2025年的新年就要到来,咸鱼哥在这里祝大家在2025年每天开心快乐,天天挣大钱,自由自在,健健康康,万事如意!(要是咸鱼哥嘴笨的话,还望大家多多包涵…...
C++——list的了解和使用
目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…...
移动光猫怎么自己改桥接模式?
环境: 型号H3-8s 问题描述: 家里宽带用的是H3-8s 光猫,想改桥接模式。 解决方案: 1.默认管理员账号和密码: 账号:CMCCAdmin 密码:aDm8H%MdAWEB页面我试了登陆不了,显示错误 …...
jupyter配置说明
使用以下命令修改jupyter的配置文件参数: vim /root/.jupyter/jupyter_lab_config.py #这里填写远程访问的IP名,填*则默认是主机IP名 c.ServerApp.ip * # 这里的密码填写上面生成的密钥 c.ServerApp.password ************************************…...
MiniMax-01中Lightning Attention的由来(线性注意力进化史)
目录 引言原始注意力线性注意力因果模型存在的问题累加求和操作的限制Lightning AttentionLightning Attention-1Lightning Attention-2 备注 引言 MiniMax-01: Scaling Foundation Models with Lightning Attention表明自己是第一个将线性注意力应用到如此大规模的模型&#…...
Vue中的动态组件是什么?如何动态切换组件?
什么是动态组件? 动态组件是 Vue.js 中的一项强大功能,它允许开发者根据程序的状态或用户的操作,动态地切换组件。动态组件的优势在于,开发者可以根据具体需求灵活地渲染不同的组件,从而提高应用的通用性和可维护性。…...
Day33:字符串的切片
在 Python 中,**切片(Slicing)**是对字符串(以及其他序列类型,如列表、元组等)进行提取部分内容的强大工具。通过切片,你可以非常方便地提取字符串的子字符串、倒序字符串,甚至进行步…...
汽车网络信息安全-ISO/SAE 21434解析(中)
目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…...
rust feature h和 workspace相关知识 (十一)
feature 相关作用和描述 在 Rust 中,features(特性) 是一种控制可选功能和依赖的机制。它允许你在编译时根据不同的需求启用或禁用某些功能,优化构建,甚至改变代码的行为。Rust 的特性使得你可以轻松地为库提供不同的…...
从规则到神经网络:机器翻译技术的演进与未来展望
从规则到神经网络:机器翻译技术的演进与未来展望 引言 还记得早些年用翻译软件翻译一句简单的英文句子,却发现翻译结果让人啼笑皆非的日子吗?从“我喜欢吃苹果”被翻译成“我喜欢吃苹果电脑”,到今天的神经网络机器翻译(Neural Machine Translation, NMT)能够生成语义流…...
LLaMA-Factory 微调LLaMA3
LoRA介绍 LoRA(Low-Rank Adaptation)是一种用于大模型微调的技术, 通过引入低秩矩阵来减少微调时的参数量。在预训练的模型中, LoRA通过添加两个小矩阵B和A来近似原始的大矩阵ΔW,从而减 少需要更新的参数数量。具体来…...
Debian或Ubuntu系统中重置MySQL的root密码
你提供的步骤是针对在Debian或Ubuntu系统中重置MySQL的root密码的过程。以下是对你提供的步骤的详细说明和补充: 步骤 1.1 - 1.3:进入MySQL配置目录并使用debian-sys-maint账户登录MySQL # 进入MySQL配置目录 cd /etc/mysql/ # 使用vim编辑器打开debia…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.17 时间魔法:处理千万级时间序列的秘籍
1.17 时间魔法:处理千万级时间序列的秘籍 目录 #mermaid-svg-fa6SvjKCpmJ6C2BY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fa6SvjKCpmJ6C2BY .error-icon{fill:#552222;}#mermaid-svg-fa6SvjKCpmJ6…...
WPS数据分析000009
一、函数与数据透视表统计数据时效率差异 函数 F4绝对引用 数据透视表 二、数据透视表基础操作 数据透视表:一个快速的生成报表的工具 显示详细信息 方式一; 方式二: 移动数据透视表 删除数据透视表 复制粘贴数据透视表 留足空间,否则拖动字…...
Ansible自动化运维实战--script、unarchive和shell模块(6/8)
文章目录 一、script模块1.1、功能1.2、常用参数1.3、举例 二、unarchive模块2.1、功能2.2、常用参数2.3、举例 三、shell模块3.1、功能3.2、常用参数3.3、举例 一、script模块 1.1、功能 Ansible 的 script 模块允许你在远程主机上运行本地的脚本文件,其提供了一…...
K8S 快速实战
K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…...
用Python和PyQt5打造一个股票涨幅统计工具
在当今的金融市场中,股票数据的实时获取和分析是投资者和金融从业者的核心需求之一。无论是个人投资者还是专业机构,都需要一个高效的工具来帮助他们快速获取股票数据并进行分析。本文将带你一步步用Python和PyQt5打造一个股票涨幅统计工具,不…...
linux naive代理设置
naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...
猿人学第一题 js混淆源码乱码
首先检查刷新网络可知,m参数被加密,这是一个ajax请求 那么我们直接去定位该路径 定位成功 观察堆栈之后可以分析出来这应该是一个混淆,我们放到解码平台去还原一下 window["url"] "/api/match/1";request function…...
【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)
能源、电力与先进热力系统设计是指结合物理理论、工程技术和计算机模拟,对能源转换、利用和传输过程进行设计的学科领域。它涵盖了从能源的生产到最终的利用整个流程,旨在提高能源利用效率,减少能源消耗和环境污染。 重要信息 官网…...
对神经网络基础的理解
目录 一、《python神经网络编程》 二、一些粗浅的认识 1) 神经网络也是一种拟合 2)神经网络不是真的大脑 3)网络构建需要反复迭代 三、数字图像识别的实现思路 1)建立一个神经网络类 2)权重更新的具体实现 3&am…...
.strip()用法
.strip("") 是 Python 字符串方法 strip() 的一个用法,它会去除字符串两端指定字符集中的字符。 基本语法: string.strip([chars])string: 这是你要操作的字符串。chars: 可选参数,表示你想要去除的字符集(默认为空格…...
redis的分片集群模式
redis的分片集群模式 1 主从哨兵集群的问题和分片集群特点 主从哨兵集群可应对高并发写和高可用性,但是还有2个问题没有解决: (1)海量数据存储 (2)高并发写的问题 使用分片集群可解决,分片集群…...
【29】Word:李楠-学术期刊❗
目录 题目 NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片,对应位置填入对应文字 (手动调整即可)复制样式:开始→样式对话框→管理…...
基于 AI Coding 「RTC + STT」 Web Demo
文章目录 1. 写在最前面1.1 旧测试流程1.2 新测试流程 2. Cursor 编程 vs Copilot 编程2.1 coding 速度2.2 coding 正确性 3. 碎碎念 1. 写在最前面 为了 Fix 语音转文字(STT)产品在 Json 协议支持上的问题,笔者需要将推送到 RTC 的数据按照…...
doris:Parquet导入数据
本文介绍如何在 Doris 中导入 Parquet 格式的数据文件。 支持的导入方式 以下导入方式支持 Parquet 格式的数据导入: Stream LoadBroker LoadINSERT INTO FROM S3 TVFINSERT INTO FROM HDFS TVF 使用示例 本节展示了不同导入方式下的 Parquet 格式使用方法…...
L2TP使用举例
下面是一个使用C和POSIX套接字API实现L2TP协议的简单示例。这个示例展示了如何创建一个L2TP客户端,连接到L2TP服务器并发送数据。请注意,这只是一个基本的示例,实际的L2TP实现会更复杂,通常需要处理更多的协议细节和错误处理。 L…...
dup2 + fgets + printf 实现文件拷贝
思路 将源文件的内容读取到内存中,然后将这些内容写入到目标文件。 1: 打开源文件、目标文件 fopen() 以读模式打开源文件。 open ()以写模式打开目标文件。 2: 读取源文件、写入目标文件 fgets ()从源文件中读取内容。 printf ()将内容写入目标文件。 printf…...
实验六 带函数查询和综合查询(1)
实验六 带函数查询和综合查询(1) 一、实验目的 1.掌握Management Studio的使用。 2.掌握带函数查询和综合查询的使用。 二、实验内容及要求 1统计年龄大于30岁的学生的人数。 select count(*) from student where year(getdate…...
塔罗牌(基础):大阿卡那牌
塔罗牌(基础) 大啊卡那牌魔术师女祭司皇后皇帝教皇恋人战车力量隐士命运之轮正义吊人死神节制恶魔高塔星星月亮太阳审判世界 大啊卡那牌 魔术师 作为一个起点,象征:意识行动和创造力。 一个【显化】的概念,即是想法变…...
