数字图像处理:实验六

       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们,下一章我们见!

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

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

相关文章

Langchain+文心一言调用

import osfrom langchain_community.llms import QianfanLLMEndpointos.environ["QIANFAN_AK"] "" os.environ["QIANFAN_SK"] ""llm_wenxin QianfanLLMEndpoint()res llm_wenxin.invoke("中国国庆日是哪一天?") print(…

上海亚商投顾:沪指冲高回落 大金融板块全天强势 上海亚商投

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天冲高回落,深成指、创业板指午后翻绿。大金融板块全天强势,天茂集团…

kaggle比赛入门 - House Prices - Advanced Regression Techniques(第二部分)

本文承接上一篇 1. 分析住宅类型(BldgType)的分布以及它们与销售价格(SalePrice)的关系 # 1. distribution of dwelling types and their relation to sale prices # BldgType: Type of dwellingdwelling_types df[BldgType].v…

使用shell命令安装virtualbox的虚拟机并导出到vagrant的Box

0. 安装virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…

MySQL--》深度解析InnoDB引擎的存储与事务机制

目录 InnoDB架构 事务原理 MVCC InnoDB架构 从MySQL5.5版本开始默认使用InnoDB存储引擎,它擅长进行事务处理,具有崩溃恢复的特性,在日常开发中使用非常广泛,其逻辑存储结构图如下所示, 下面是InnoDB架构图&#xf…

Redis高阶5-布隆过滤器

Redis布隆过滤器 ​ 由一个初始值都为零的bit数组和多个哈希函数构成,用来快速判断集合中是否存在某个元素 目的减少内存占用方式不保存数据信息,只是在内存中做一个是否存在的标记flag 布隆过滤器(英语:Bloom Filter&#xff0…

DeepSeek学术题目选择效果怎么样?

论文选题 一篇出色的论文背后,必定有一个“智慧的选题”在撑腰。选题足够好文章就能顺利登上高水平期刊;选题不行再精彩的写作也只能“当花瓶”。然而许多宝子们常常忽视这个环节,把大量时间花在写作上,选题时却像抓阄一样随便挑一…

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进,Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程,大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具,与 Docker 的结合进一步增强了开发…

Qt 5.14.2 学习记录 —— 이십 QFile和多线程

文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系,不过Qt也可以使用C,C,Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…

多版本并发控制:MVCC的作用和基本原理

多版本并发控制:MVCC的作用和基本原理 1、MVCC简介1.1 快照读与当前读的区别1.1.1 快照读1.1.2 当前读 1.2 数据库的读写问题1.3 MVCC的作用 2、MVCC实现原理之ReadView2.1 什么是ReadView2.2 ReadView的设计思路2.3 MVCC整体操作流程 1、MVCC简介 1.1 快照读与当前…

神经网络|(二)sigmoid神经元函数

【1】引言 在前序学习进程中,我们已经了解了基本的二元分类器和神经元的构成,文章学习链接为: 神经网络|(一)加权平均法,感知机和神经元-CSDN博客 在此基础上,我们认识到神经元本身在做二元分类,是一种非…

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法:通过type函数返回数值的类型,然后通过setValue来构造一个QVariant类型的返回值。 函数: QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…

BAHD酰基转移酶对紫草素的手性催化-文献精读105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化,而另一个BAHD酰基转移酶则仅催化紫草素的对映…

CLion开发Qt桌面

IDE:CLion Qt Qt版本:5.12 学习正点原子的嵌入式Linux开发板时,使用Qt Creator写代码不是很方便,遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1,配置工具链 找到Qt的安装目录,此处为E:\Tools\…

【学术会议-第五届机械设计与仿真国际学术会议(MDS 2025) 】前端开发:技术与艺术的完美融合

重要信息 大会官网:www.icmds.net 大会时间:2025年02月28日-03月02日 大会地点:中国-大连 会议简介 2025年第五届机械设计与仿真国际学术会议(MDS 2025) 将于2025年02月28-3月02日在中国大连召开。MDS 2025将围绕“机械设计”…

84,【8】BUUCTF WEB [羊城杯 2020]Blackcat

进入靶场 音乐硬控我3分钟 回去看源码 <?php // 检查 POST 请求中是否包含 Black-Cat-Sheriff 和 One-ear 字段 // 如果任意一个字段为空&#xff0c;则输出错误信息并终止脚本执行 if(empty($_POST[Black-Cat-Sheriff]) || empty($_POST[One-ear])){die(请提供 Black-C…

人工智能:从基础到前沿

目录 目录 1. 引言 2. 人工智能基础 2.1 什么是人工智能&#xff1f; 2.2 人工智能的历史 2.3 人工智能的分类 3. 机器学习 3.1 机器学习概述 3.2 监督学习 3.3 无监督学习 3.4 强化学习 4. 深度学习 4.1 深度学习概述 4.2 神经网络基础 4.3 卷积神经网络&#…

漏洞情报:为什么、要什么和怎么做

漏洞一直是网络攻防的焦点所在&#xff0c;因为漏洞直接或间接影响安全性的核心方面——权限。攻击者挖掘和利用漏洞&#xff0c;获取非授权的权限&#xff1b;防御方定位和消除漏洞&#xff0c;监测和阻断漏洞的利用&#xff0c;使攻击者无法利用漏洞达到其目的。漏洞信息本质…

leetcode——删除链表的倒数第N个节点(java)

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xf…