当前位置: 首页 > ai >正文

关于数字信号与图像处理——基于Matlab的图像增强技术

本篇博客是在做数字信号与图像处理实验中的收获。

具体内容包括:根据给定的代码放入Matlab中分别进行两次运行测试——比较并观察运行后的实验结果与原图像的不同点——画出IJ的直方图,并比较二者差异。接下来会对每一步进行具体讲解。


题目:

①给定以下代码,观察实验结果,写出和原图像有什么不同之处

clear;
I = imread('tire.tif');
J = histeq(I);
imshow(I)
figure, imshow(J)
imhist(I,64)
figure; imhist(J,64)

②输入以下代码,再次比较I、J两幅图像的差别,写出其原因

I=imread('pout.tif');
J=histeq(I);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);

③画出I、J的直方图,写出两者的差别


一、第一次代码

①将题目给定的代码放入Matlab运行测试

②代码运行后,直方图均衡化函数(histeq)会对图像进行处理,目的是增强图像的对比度,使图像的灰度值分布更加均匀。运行结果如下

③原图像与均衡化后的图像的区别

在原始图像中,图像的灰度值只集中在某些范围内,导致图像的对比度较低;但是通过直方图均衡化后,灰度值的分布变得更加均匀,图像的对比度有所增强,尤其在图像亮度较低或者较高的区域,均衡化处理可以使细节更加清晰,亮部和暗部的细节处理更加明显。

二、第二次代码

①将题目给定的代码放入Matlab运行测试

②同上,也是利用histeq函数对图像进行直方图均衡化,代码运行结果如下

③原图像与均衡化后的图像的区别

同样的,直方图均衡化算法通过调整灰度级的映射关系,使得像素的灰度值分布尽可能地拉伸到全范围,均衡化后图像对比度增强,原本暗淡的部分变亮,图像整体更加清晰。

三、二者直方图差异

原始图像的直方图较为集中,说明大部分像素的灰度值集中在某一小范围内,造成图像的对比度较低;而均衡化后的直方图会更加均匀,灰度值的范围在0到255,分布得更加广泛,所以图像的对比度增强,细节更加明显。

四、学习小结

1.遇到的问题及解决

①在最开始读取图像的时候,没有注意要将图像文件在电脑上的路径输入完整,导致无法读取图像,编译失败。在相对路径无法读取后换成了绝对路径,图像读取成功。例如I=imread('C:\Users\生瓜蛋子\Desktop\tire.tif');

②直方图均衡化部分,由于我测试中选择的图像是single类型,而Matlab默认处理类型是png/jpg,二者类型不相等导致无法进行均衡化,此时则需要通过I=uint8(I),将图像类型转化为uint8来确保图像类型匹配。

2.体会和收获

在测试中比较棘手的是图像的维度和数据类型的处理。最开始以为维度都是默认的,没有想到要先降维度转化为一致后才能进行匹配,在这上面费了很多心思,尤其是处理彩色图像时,需要特别注意转换成灰度图像。测试中有些图像经过直方图均衡化后效果并不显著,以为是函数的参数没有选择好,也折腾了很久,后来问了舍友才发现其他人处理后的图像变化也不大,其实是原图对比度已经很高了,所以处理后变化不会很大。

这个问题让我认识到,不同的图像增强方法适用于不同的应用场景,在不同情况下图像增强方法的选择很重要。直方图均衡化主要适用于全局对比度增强,而其他方法如自适应直方图均衡化、锐化、边缘增强等则适用于局部细节增强、噪声去除和图像清晰度的提高。针对上面原本对比度已经很高的图像,可以将直方图均衡化升级为自适应直方图均衡化,或者使用更加高级的卷积滤波等等。在实际应用中,可以根据具体需求选择合适的图像增强方法来提高图像质量。

http://www.xdnf.cn/news/355.html

相关文章:

  • 将软件架构风格定义为数据流风格,调用返回风格,独立构件风格,虚拟机风格和以数据为为中心这五种风格的依据是什么?请介绍这五种风格
  • 区块链木材业务服务平台:商贸物流新变革
  • 模态双侠闯江湖:SimTier 分层破局,MAKE 智炼新知
  • 不确定与非单调推理的可信度方法
  • 【C++算法】67.栈_基本计算器 II
  • IntelliJ IDEA右键快捷方式设置方法
  • 从 LabelImg 到 Label Studio!AI 数据标注神器升级,Web 版真香
  • 8 编程笔记全攻略:Markdown 语法精讲、Typora 编辑器全指南(含安装激活、基础配置、快捷键详解、使用技巧)
  • VsCode搭建
  • Spring Boot + Caffeine:打造高性能缓存解决方案
  • 2.凸包优化求解
  • Viewer.js的使用方法
  • JDBC 数据库连接全解析:从驱动配置到工具类封装
  • yolov8的数据处理lableimg的安装以及使用
  • 黑马商城(五)微服务保护和分布式事务
  • 【Linux篇】探索进程间通信:如何使用匿名管道构建高效的进程池
  • PHP实现简单的爬虫功能
  • 不规则曲面上两点距离求取
  • Replicate Python client
  • 中间件--ClickHouse-12--案例-1-日志分析和监控
  • Datawhale AI春训营学习笔记
  • 吴恩达强化学习复盘(2)K-Means初始化|K的选择|算法优化
  • 基于模板匹配的信用卡号码识别系统
  • Fastdata极数:全球AR/VR行业发展趋势报告2025
  • C#.net core部署IIS
  • 【愚公系列】《Python网络爬虫从入门到精通》056-Scrapy_Redis分布式爬虫(Scrapy-Redis 模块)
  • ai学习中收藏网址【1】
  • Nginx 文件上传大小限制及 `client_max_body_size` 最大值详解
  • C++ 基于多设计模式下的同步异步⽇志系统-1准备工作
  • 数据库表设计