数字图像处理实验记录五(图像的空间域增强-锐化处理)
前言:
文章目录
- 一、基础知识
- 1,什么是锐化?
- 2,为什么要锐化?
- 3,怎么进行锐化?
- 二、实验要求
- 任务1:
- 任务2:
- 任务3:
- 三、实验记录:
- 任务1:
- 任务2:
- 任务3:
- 四、结果展示
- 任务1:
- 任务2:
- 任务3:
- 五、反思总结与收获
- 1,取绝对值:
- 2,取0:
- 总结:
一、基础知识
1,什么是锐化?
百度到:图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。
在我看来,锐化就是将图像的边缘进行增强。
2,为什么要锐化?
既然锐化是将图像边缘增强,那么我认为往往是图像边缘模糊的时候需要进行锐化。在上一个实验中我们学到了平滑处理滤波器,不难发现滤波器往往会在清除噪声的时候让我们的图像变得模糊,所以我认为在我们处理完噪声以后就可以通过锐化来增强边缘。如下:
虽然锐化后不是很清晰,但至少边缘明显了很多
3,怎么进行锐化?
锐化是增强边缘,那么首先我们就要找到边缘,接下来关键的部分就是怎么找边缘了。
什么是边缘?在图像的一个区域内,出现了灰度的突变,突然变小或突然变大,这里突变的中间区域就是边缘。
怎么找边缘?
在计算机里是一个像素一个像素进行处理,怎么处理?这里就提到了几种算子(在我看来就是一种计算的模板方法):
以4领域的Laplacian算子为例:对于一个像素f(i,j),我们就使用它的上下左右四个像素和它自身进行运算得到g(i,j):
如果4领域的像素值都和中心差不多,那么g(i,j)最后的值就是0,显示是黑色,g(i,j)越大,就越白,最后处理完得到的g,就是边缘图像。
边缘检测函数sharpen_value():
function [Ig] = sharpen_value(S,kind)
% 锐化函数 输入S,锐化算子 kind
if(~exist('kind','var'))kind = -1; % 如果未出现该变量,则对其进行赋值
end
[m,n] = size(S);if(kind == -1)%拉普拉斯4H = [0,-1,0;-1,4,-1;0,-1,0];
elseif(kind == 0)%拉普拉斯8H = [-1,-1,-1;-1,8,-1;-1,-1,-1];
elseif(kind == 1)%prewitt 横H = [1,1,1;0,0,0;-1,-1,-1];
elseif(kind == 2)%prewitt 竖H = [1,0,-1;1,0,-1;1,0,-1];
elseif(kind == 3)%Sobel 竖H= [1,2,1;0,0,0;-1,-2,-1];
elseif(kind == 4)%Sobel 竖H= [1,0,-1;2,0,-2;1,0,-1];
elseif(kind == 5)H= [1,0,0;0,-1,0;0,0,0];end
a=1;
S = im2double(S);
Ig =S;for i=2:m-1for j=2:n-1if(kind == 5)Ig(i,j) = abs(S(i,j)-S(i+1,j+1))+abs(S(i+1,j)-S(i,j+1));elseIg(i,j) = 0;for a = -1:1for b = -1:1Ig(i,j) = Ig(i,j)+H(a+2,b+2)*S(i+a,j+b); endendif(Ig(i,j)<0)Ig(i,j) = 0;endendIg(i,j) = uint8(Ig(i,j)*255);end
end
Ig = uint8(Ig);end
最后将边缘图和原图相加,就可以实现边缘增强了。
二、实验要求
任务1:
利用Laplacian 锐化算子(α=-1)对256 级灰度的数字图像进行锐化处理,显示处理前、后图像。
任务2:
在添加了噪声的图像上进行拉普拉斯锐化处理,和未添加噪声图像的处理结果进行比较。
任务3:
分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对数字图像进行边缘检测,计算图像梯度图。显示图像x和y方向偏导图像和梯度幅值图像。
三、实验记录:
任务1:
利用Laplacian 锐化算子(α=-1)对256 级灰度的数字图像进行锐化处理,显示处理前、后图像。
figure('NumberTitle','off','Name','任务1');
I = imread('stone.jpg');
I2 = sharpen_value(I,-1);
I2 = I2+I;
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(I2);title('增强后');
任务2:
在添加了噪声的图像上进行拉普拉斯锐化处理,和未添加噪声图像的处理结果进行比较。
figure('NumberTitle','off','Name','任务2');
Ib = imnoise(I,'salt',0.02);%添加椒盐噪声
I3 = sharpen_value(Ib,-1);
I3 = I3+Ib;
subplot(1,2,1);imshow(I2);title('原图增强图');
subplot(1,2,2);imshow(I3);title('噪声增强图');
任务3:
分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对数字图像进行边缘检测,计算图像梯度图。显示图像x和y方向偏导图像和梯度幅值图像。
figure('NumberTitle','off','Name','任务3');
I = rgb2gray(I);
H1 = sharpen_value(I,5);
H2 = sharpen_value(I,2);
H3 = sharpen_value(I,3);
subplot(2,2,1.5);imshow(H1);title('Roberts图像梯度图');
subplot(2,2,3);imshow(H2);title('Prewitt x方向偏导');
subplot(2,2,4);imshow(H3);title('Sobel y方向偏导');
四、结果展示
任务1:
利用Laplacian 锐化算子(α=-1)对256 级灰度的数字图像进行锐化处理,显示处理前、后图像。
任务2:
在添加了噪声的图像上进行拉普拉斯锐化处理,和未添加噪声图像的处理结果进行比较。
可以明显看出噪声对锐化的影响很大。
椒盐噪声:
高斯噪声:
任务3:
分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对数字图像进行边缘检测,计算图像梯度图。显示图像x和y方向偏导图像和梯度幅值图像。
五、反思总结与收获
对Laplacian锐化算子的处理结果中,对小于0的部分,采用不同的方法标准化到[0,255]时,图像的显示效果有什么不同?为什么?
在我看来有两种方法来标准化:1,取绝对值。2,取0。
改了改函数,让我们看看效果:
1,取绝对值:
边缘:
2,取0:
边缘:
总结:
取绝对值:负值转正值,会增加对比度,但可能导致某些细节过度增强,看起来更加锐利。会引入图像中的一些噪声或产生不自然的效果。
取0:负值保持为零,因此对比度不会显著增加。这种方法可以保留一些图像细节,但可能不会产生像绝对值标准化那样强烈的锐化效果。
相关文章:

数字图像处理实验记录五(图像的空间域增强-锐化处理)
前言: 文章目录 一、基础知识1,什么是锐化?2,为什么要锐化?3,怎么进行锐化? 二、实验要求任务1:任务2:任务3: 三、实验记录:任务1:任…...

基于水基湍流优化的BP神经网络(分类应用) - 附代码
基于水基湍流优化的BP神经网络(分类应用) - 附代码 文章目录 基于水基湍流优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.水基湍流优化BP神经网络3.1 BP神经网络参数设置3.2 水基湍流算法应用 4.测试结果…...
0010【Edabit ★☆☆☆☆☆】Maximum Edge of a Triangle
【Edabit 算法 ★☆☆☆☆☆】Maximum Edge of a Triangle algorithms math numbers Instructions Create a function that finds the maximum range of a triangle’s third edge, where the side lengths are all integers. Examples nextEdge(8, 10) // 17 nextEdge(5, 7…...

Godot 官方2D C#重构(3):TileMap使用
文章目录 前言Godot Tilemap使用Tilemap使用TileSet和TilemapTilemap 图片资源添加TileSet,开始切图导入图片切图 简单添加TileMap如何使用 Auto Tilemap使用Auto Tilemap 前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 Godot Tilem…...

6.DApp-用Web3实现前端与智能合约的交互
题记 用Web3实现前端与智能合约的交互,以下是操作流程和代码。 准备ganache环境 文章地址:4.DApp-MetaMask怎么连接本地Ganache-CSDN博客 准备智能合约 文章地址: 2.DApp-编写和运行solidity智能合约-CSDN博客 编写index.html文件 <!…...
数据异常值检测
数据异常值检测 参考: 数据异常值的检测方法-基于Python 独家 | 每个数据科学家应该知道的五种检测异常值的方法(附Python代码) 异常检测主要方法总结 14种数据异常值检验的方法! 14种数据异常值检验的方法 浅谈数据挖掘中的…...
监听redis键失效事件实现延迟功能
用Redis实现延迟队列,我研究了两种方案,发现并不简单 SpringBoot实现Redis失效监听事件—KeyExpirationEventMessageListener Redis 监听过期的key(KeyExpirationEventMessageListener) 项目背景 需求上说,需要延迟…...

使用UniApp实现视频数组自动下载与播放功能:一步步指导
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

C语言笔试面试必刷题
🎊【面经】专题正在持续更新中,内含C语言,数据结构,Linux,网络编程等✨,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 - …...

window11安装Python环境
python环境安装 访问Python官网:https://www.python.org/ 点击downloads按钮,在下拉框中选择系统类型(windows/Mac OS/Linux等) 选择下载最新版本的Python cmd命令如果出现版本号以及>>>则表示安装成功 如果出现命令行中输入python出现如下错误 可能…...

SpringBoot中的日志使用
SpringBoot的默认使用 观察SpringBoot的Maven依赖图 可以看出来,SpringBoot默认使用的日志系统是使用Slf4j作为门户,logback作为日志实现 编写一个测试代码看是否是这样 SpringBootTest class SpringbootLogDemoApplicationTests {//使用Slf4j来创建LOG…...
微信小程序中监听横屏竖屏
直接上代码 第一步:在你想要监听页面的json文件中添加此节点 "pageOrientation": "auto" 第二步:wx.onWindowResize() page({ onLoad() {this.kstd()},kstd(){ // 监听屏幕旋转事件 wx.onWindowResize((res)>{// …...

云原生概述
1. 何谓云原生 云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,CloudNative。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设…...

消失的它:网络层分片包中的第一个分片包去哪了?
在网络层IP包分片的过程中,遇到了大麻烦! 主机A: IP地址:192.168.0.10/24 MAC地址:02:00:00:00:00:10 主机B: IP地址:192.168.0.20/24 MAC地址:02:00:00:00:00:20 MTU:1…...

LeetCode刷题---有效的括号
这里用到了栈的思想 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,…...
QT学习笔记-QT访问各种关系数据库笔记汇总
QT学习笔记-QT访问各种关系数据库笔记汇总 1、QT访问Oracle数据库2、QT访问SQLServer数据库3、QT访问MySQL数据库4、QT访问PostgreSQL数据库5、QT访问Access数据库6、QT多线程中访问数据库的要点 在使用QT进行应用开发过程中,不可避免的会涉及到访问关系数据库&…...
Shell脚本-常用命令
Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。 由于习惯的原因,简洁起见&a…...
Flink之输出算子Redis Sink
Redis Sink Redis Sinkjedis实现添加依赖自定义Redis Sink使用Sink验证 开源 Redis Connector添加依赖自定义Redis SinkRedisCommandString数据类型示例Hash数据类型示例 使用SinkRedisStringSinkRedisHashSink 验证 Redis Sink 在新版Flink的文档中,并没有发现Redi…...

【数据结构】顺序表实现通讯录
前言 在上一节中我们实现了顺序表,现在我们将使用顺序表完成通讯录的实现。(注:本人水平有限,“小屎山”有些许bug,代码冗余且语无伦次,望谅解!😅) 文章目录 一、数据结构…...

JMeter 随机数生成器简介:使用 Random 和 UUID 算法
在压力测试中,经常需要生成随机值来模拟用户行为。JMeter 提供了多种方式来生成随机值,本文来具体介绍一下。 随机数函数 JMeter 提供了多个用于生成随机数的函数,其中最常用的是 __Random 函数。该函数可以生成一个指定范围内的随机整数或…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...