数字图像处理实验记录二(直方图和直方图均衡化)
文章目录
- 一、基础知识
- 1,什么是直方图
- 2,直方图有什么用
- 3,直方图均衡化
- 4、原理代码实现
- 二、实验要求
- 任务1:
- 任务2:
- 三、实验记录
- 任务1:
- 任务2:
- 四、结果展示
- 任务1:
- 任务2:
- 五、反思,总结与收获
- 1,matlab函数怎么写:
- 2,坑,图像数据的类型是uint8:
- 3,均衡化后:
- 4,规定化后:
前言:由于踩了一些坑,进度就慢了很多,争取尽快赶上进度
一、基础知识
1,什么是直方图
在我看来,直方图就是展示一个图像中每个灰度的数量的图
如下图所示:
右边这张图就是灰度直方图,横坐标表示灰度,纵坐标表示这个灰度的数量
2,直方图有什么用
有什么用?目前看来就是有个展示作用。当然,我们可以点击这个链接查看直方图对应变化对图像的影响。
3,直方图均衡化
感觉直方图均衡化是一种对直方图进行调整的方法,将现在的直方图按照我们希望的函数排布。
要进行直方图均衡化,首先我们要求出原始图像的直方图,再计算积累直方图:
对应灰度级的积累直方图就是按照上面公式计算,最后将对应像素的值改成四舍五入后的值就实现了这个操作了
4、原理代码实现
原理:求出积累概率密度后,不能改变灰度像素的数量,就改变灰度值,改变原对应灰度的灰度值
对应积累概率密度*255 = 均衡后灰度
这里以一张灰度图为例的代码实现:
function [value,Sk] = his_teq(S,L)
% 进行均衡化操作
% S是输入的数据
[height,width] = size(S); %获取输入值的高和宽
if(~exist('L','var'))L = 256; % 如果未出现该变量,则对其进行赋值
end
[count,x] = imhist(S,L);p = count; %原始图像中各个灰度出现次数
size(count);% 这里算每个灰度的概率
for i=1:Lp(i) = count(i)/height/width;
endSk = p;
for i=1:L %计算积累直方图tmp = 0;for j = 1:itmp=tmp+p(j);endSk(i) = (L-1)*tmp;Sk(i) = round(Sk(i));
end
% 替换
for i=1:heightfor j=1:widtha = int16(S(i,j))+1; %这里是一个坑,我在这里犯了很多次value(i,j) = Sk(a);endend
endvalue = uint8(value);
end
二、实验要求
任务1:
使用函数imhist及histeq对原图进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并讨论为什么数字图像均衡化后其直方图并非完全均匀分布。
任务2:
使用函数histeq对原图进行直方图规定化处理,同屏显示处理前后图像及其直方图,比较异同。
三、实验记录
任务1:
使用函数imhist及histeq对原图进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并讨论为什么数字图像均衡化后其直方图并非完全均匀分布。
这里我们使用imhist()函数展示直方图,用histeq函数进行均衡化:
clc;
clear;
close all;
% 实验三 直方图均衡化
a1 = imread('图片1.png');
a2 = imread('图片2.png');
a2 = rgb2gray(a2);a1_im = imhist(a1);
a2_im = imhist(a2);a1_teq = histeq(a1);
a2_teq = histeq(a2);
figure('NumberTitle','off','Name','任务1');
subplot(241); imshow(a1);title('图片1');
subplot(242); imshow(a1_teq);title('图片1均衡化');
subplot(243); imshow(a2);title('图片2');
subplot(244); imshow(a2_teq);title('图片2均衡化');
subplot(245); imhist(a1);title('图片1的直方图');
subplot(246); imhist(a1_teq);title('图片1均衡化的直方图');
subplot(247); imhist(a2);title('图片2的直方图');
subplot(248); imhist(a2_teq);title('图片2均衡化的直方图');
任务2:
使用函数histeq对原图进行直方图规定化处理,同屏显示处理前后图像及其直方图,比较异同。
规定化步骤:
1,获取模板:a1_im = imhist(a1);
像这样,就是先获取直方图
2,使用函数:a3 = histeq(a2,a1_im);
像这样,a2是图片,a1_im是直方图模板
代码:
clc;
clear;
close all;
% 实验三 直方图均衡化a1 = imread('图片1.png');
a2 = imread('图片2.png');
a2 = rgb2gray(a2);a1_im = imhist(a1);
a2_im = imhist(a2);a1_teq = histeq(a1);
a2_teq = histeq(a2);
figure('NumberTitle','off','Name','任务1');
subplot(241); imshow(a1);title('图片1');
subplot(242); imshow(a1_teq);title('图片1均衡化');
subplot(243); imshow(a2);title('图片2');
subplot(244); imshow(a2_teq);title('图片2均衡化');
subplot(245); imhist(a1);title('图片1的直方图');
subplot(246); imhist(a1_teq);title('图片1均衡化的直方图');
subplot(247); imhist(a2);title('图片2的直方图');
subplot(248); imhist(a2_teq);title('图片2均衡化的直方图');
figure('NumberTitle','off','Name','任务2.1');
a3 = histeq(a2,a1_im);
subplot(221); imshow(a2);title('图片2');
subplot(222); imhist(a2);title('图片2的直方图');
subplot(223); imshow(a3);title('图片2规定化');
subplot(224); imhist(a3);title('图片2规定化的直方图');
figure('NumberTitle','off','Name','任务2.2');
a3 = histeq(a1,a2_im);
subplot(221); imshow(a1);title('图片1');
subplot(222); imhist(a1);title('图片1的直方图');
subplot(223); imshow(a3);title('图片1规定化');
subplot(224); imhist(a3);title('图片1规定化的直方图');
四、结果展示
任务1:
任务2:
按图片1的直方图规定化图片2:
按图片2直方图规定化图片1:
五、反思,总结与收获
1,matlab函数怎么写:
function [output] = name(input1,input2)
% 注释,说明函数的功能
output = 1 %内容
end %结束标志
2,坑,图像数据的类型是uint8:
图像数据类型是uint8,也就说明了这个没有符号,范围在0~255,所以如果你想取其作为下标或者进行计算的话需要注意。
如在这里:
S(i,j)可能会为255,当我们直接显示Sk(S(i,j)+1)时,S(i,j)=255,S(i,j)+1也等于255,因为matlab把它默认成了uint8数,所以在运算之前,我们要对其类型进行改变,这样才能运算
3,均衡化后:
均衡化后,其结果并不会如我们想象那样那么均衡,往往会如以下:
这个是按256个灰度值进行均衡化的
为什么数字图像均衡化后其直方图并非完全均匀分布呢?在我看来,其实是因为原图像的直方图本来就不是很均衡,甚至有突出的地方,在后续计算概率密度直方图时,哪个灰度值的数量多,对应的概率也就大,这样也就导致了均衡化后的直方图变成和原图差不多的样子。
4,规定化后:
不难看出,规定化是按照一个直方图的模板对另一个直方图进行变换,规定化后的直方图和模板直方图很相似
相关文章:

数字图像处理实验记录二(直方图和直方图均衡化)
文章目录 一、基础知识1,什么是直方图2,直方图有什么用3,直方图均衡化4、原理代码实现 二、实验要求任务1:任务2: 三、实验记录任务1:任务2: 四、结果展示任务1:任务2: 五…...

大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数
文章目录 SQL 函数的解析顺序和系统内置函数 一、SQL 函数...

TODO Vue typescript forEach的bug,需要再核實
forEach 一個string[],只有最後一個匹配條件有效,其它條件無效。 所以,只能替換成普通的for循環。 console.log(taskList)// for (const _task of taskList.value) {// if (_task invoiceSendEmail) {// form.value.invoiceSendEmail…...
简记一个错误
简记一个Flutter错误: Using hardware rendering with device sdk gphone64 x86 64. If you notice graphics artifacts, consider enabling software rendering with “–enable-software-rendering”. Launching lib\main.dart on sdk gphone64 x86 64 in debug …...

第四次作业
1.打印各种图形 A.矩形 a int(input("请输入行数: ")) i 0 while i < a:print("*"*10)i1 结果: B.直角三角形 a int(input("请输入行数: ")) i 0 while i<a:print("*"*(i1))i1 结果: C.反直角三角形 …...
面试问题整理总结
1.自我介绍 2.为什么想转测试 想换一个方向,测试开发在一定程度上也是属于开发,而且站在测试的角度能看到全局的东西更多,对需求的理解需要更深”,之前的开发工作比较专一,测试的视野更加开阔,想要站在更高…...

进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式
目录 1.0 Collection 类的说明 1.1 Collection 类中的实例方法 2.0 Collection 集合的遍历方式(重点) 2.1 使用迭代器( Iterator )进行遍历 2.2 使用增强型 for 循环进行遍历 2.3 使用 Java 8的 Stream API 进行遍历(使…...

CentOS | 添加普通用户并授权sudo
sudo -i adduser peter passwd peter whereis sudoers nano /etc/sudoers添加一行新用户到root组 ## Allow root to run any commands anywhere root ALL(ALL) ALL peter ALL(ALL) ALL如果提升权限后无法cd到其他目录等,修改 /etc/passwd 文件&…...

【MyBatis】mybatis工具类迭代
目录 MyBatis工具类的迭代 ThreadLocal使用 mybatis工具类终极版: MyBatis工具类的迭代 public class MyBatisUtil {//工具类构造方法私有化private void MyBatisUtil() {}//方法一public static SqlSession getSqlSession(){try {SqlSessionFactoryBuilder sql…...

MSQL系列(六) Mysql实战-SQL语句优化
Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构,BTree的索引结构,以及索引最左侧匹配原则,Explain的用法,可以看到是否使用了索引,今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…...

kaggle新赛:UBC卵巢癌亚型分类和异常检测大赛【图像分类】
赛题名称:UBC Ovarian Cancer Subtype Classification and Outlier Detection (UBC-OCEAN) 赛题链接:https://www.kaggle.com/competitions/UBC-OCEAN 赛题背景 卵巢癌是女性生殖系统最致命的癌症。目前,卵巢癌诊断依赖病理学家评估亚型。…...

基于nodejs+vue云旅青城系统
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
《孙哥说Spring5》笔记汇总
时隔两个多月,终于将《孙哥说Spring5》的笔记文章全部整理完了,在这里做个汇总。孙哥的Spring课讲的非常好,深度和广度都有所兼顾,推荐大家去看 点击学习《孙哥说Spring5》 基础铺垫 1️⃣ Spring5应用之基础扫盲2️⃣ Spring5应…...
在使用了spring-cloud-starter-gateway后,为什么还会发生cors问题
//1.需要配置类 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.sp…...

CentOS7安装MySQL8.0.28
CentOS7安装MySQL8.0.28 一、下载MySQL安装包二、安装配置mysql 一、下载MySQL安装包 点击以下链接可以自动跳转:MySQL官网 接下来按如图所示依次点击进入。 选择自己所需要版本 此处如需下载历史版本可以点击 二、安装配置mysql 1、登录ssh或其他相关软件上…...

AutoSAR入门:应用背景及简介
1、应用背景 在我们现在的汽车行业里面,汽车电子的发展过程中,我们发现有一些新的趋势汽车电子系统的复杂性不断增长。 我们现在可以看到车辆有越来越多的功能,那么这些功能呢,也在往这个控制器上进行集中,比如说我们现…...

C++初阶(三)
文章目录 一、auto关键字(C11)1、auto简介2、auto使用规则1、 auto与指针和引用结合起来使用2、 在同一行定义多个变量 3、auto不能推导的场景1、 auto不能作为函数的参数2、 auto不能直接用来声明数组3、特性总结 二、基于范围的for循环(C11)1、范围for的语法2、 范围for的使用…...

PHP的学习入门建议
学习入门PHP的步骤如下: 确定学习PHP的目的和需求,例如是为了开发网站还是为了与数据库交互等。学习PHP的基础语法和程序结构,包括变量、数据类型、循环、条件等。学习PHP的面向对象编程(OOP)概念和技术。学习与MySQL…...

骰子涂色(Cube painting, UVa 253)rust解法
输入两个骰子,判断二者是否等价。每个骰子用6个字母表示,如图4-7所示。 例如rbgggr和rggbgr分别表示如图4-8所示的两个骰子。二者是等价的,因为图4-8(a)所示的骰子沿着竖直轴旋转90之后就可以得到图4-8(b&a…...

elasticsearch的docker安装与使用
安装 docker network create elasticdocker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.4# 增加虚拟内存, 此处适用于linux vim /etc/sysctl.conf # 添加 vm.max_map_count262144 # 重新启动 sysctl vm.max_map_countdocker run --name es01 --net …...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...