直方图均衡化与规定化原理解释以及matlab实现

news2024/9/28 9:29:06

直方图均衡化(HE)

Histogram Equalization (HE)
设灰度水平在 r k , k ∈ [ 0 , L − 1 ] r_k,k\in[0,L-1] rk,k[0L1]
一幅图像 f f f 的非归一化直方图定义为
h ( r k ) = n k h(r_k)=n_k h(rk)=nk
在这里插入图片描述
s = T ( r ) s=T(r) s=T(r)为转换后的灰度,要求函数T满足:
(1)区间内单调递增
(2)有 0 ≤ T ( r ) ≤ L − 1 f o r 0 ≤ r ≤ L − 1 0\le T(r) \le L-1\quad for\quad 0\le r\le L-1 0T(r)L1for0rL1
HE的数学表达
i f s = T ( r ) = ( L − 1 ) ∫ 0 r p r ( w ) d w if\quad s=T(r)=(L-1)\int_{0}^{r}p_r(w)dw ifs=T(r)=(L1)0rpr(w)dw t h e n p s ( s ) = 1 L − 1 then\quad p_s(s)=\frac{1}{L-1} thenps(s)=L11
采用累积分布函数(CDF)作为HE变换函数
在这里插入图片描述
离散化表达形式:
s k = T ( r k ) = ( L − 1 ) ∑ j = 0 k p r ( r j ) = ( L − 1 ) ∑ j = 0 k n j n s_k=T(r_k)=(L-1)\sum\limits_{j=0}^{k}p_r(r_j)=(L-1)\sum\limits_{j=0}^{k}\frac{n_j}{n} sk=T(rk)=(L1)j=0kpr(rj)=(L1)j=0knnj

例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
均衡化前后直方图比较
在这里插入图片描述
小结:
(1)因为直方图是概率密度函数的近似,而且均衡化过程中不产生新的灰度级,所以直方图均衡化很少得到完全平坦的结果;
(2) 变换后灰度级减少,即出现灰度“简并”现象,造成一些灰度层次的损失。

matlab实现

H= imread('lena_gray.jpg');
%获取图片的尺寸 便于计算总像素数 即 m*n
[m,n]=size(H);
%生成一个一行 256 列的矩阵
p=zeros(1,256);
% 统计各灰度的像素个数
%find(H==i) 是在图像矩阵里面寻找灰度为 i 的点坐标
% 因为矩阵是从 1 开始的 所以为 p(i+1)
for i=0:255
	p(i+1)=length(find(H==i))/(m*n);
end
subplot(2,2,1);
imshow(H);
title('原图');
subplot(2,2,2);
% 显示原图的直方图
bar(0:255,p);
title('原图直方图');
% 利用循环 累加概率值
s=zeros(1,256);
for i=1:256
	for j=1:i
		s(i)=p(j)+s(i);
	end
end
%对 s 中的数先乘以 255,再取整
a=round(s*255);
b=H;
%更新原图像的灰度
for i=0:255
	b(find(H==i))=a(i+1);
end
subplot(2,2,3);
imshow(b)
title('均衡化后图像');
%统计更新后的概率
for i=0:255
	GPeq(i+1)=sum(p(find(a==i)));
end
subplot(2,2,4);
bar(0:255,GPeq); title('均衡化后的直方图');

在这里插入图片描述

直方图匹配(规定化)HS

Histogram specification (matching)
在这里插入图片描述
考察使输入图像的直方图均衡化的变换函数: T ( r ) : r → s T(r):r\rightarrow s T(r):rs
s = T ( r ) = ( L − 1 ) ∫ 0 r p r ( w ) d w s=T(r)=(L-1)\int_{0}^{r}p_r(w)dw s=T(r)=(L1)0rpr(w)dw
考察使输出图像的直方图均衡化的变换函数: G ( z ) : z → s G(z):z\rightarrow s G(z):zs
G ( z ) = ( L − 1 ) ∫ 0 z p z ( t ) d t = s G(z)=(L-1)\int_{0}^{z}p_z(t)dt=s G(z)=(L1)0zpz(t)dt=s
z = G − 1 ( s ) = G − 1 [ T ( r ) ] z=G^{-1}(s)=G^{-1}[T(r)] z=G1(s)=G1[T(r)]
离散形式:
s k = T ( r k ) = ( L − 1 ) ∑ j = 0 k p r ( r j ) s_k=T(r_k)=(L-1)\sum\limits_{j=0}^{k}p_r(r_j) sk=T(rk)=(L1)j=0kpr(rj)
z k = G − 1 ( s k ) = G − 1 ( T ( r k ) ) z_k=G^{-1}(s_k)=G^{-1}(T(r_k)) zk=G1(sk)=G1(T(rk))
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
##备注:直方图规定化的代码后面有空再补充

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

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

相关文章

【统计模型】心脏病患病影响因素探究

目录 心脏病患病影响因素探究 一、研究目的 二、数据来源和相关说明 三、描述性统计分析 四、数据建模 4.1 全模型 (1)模型构建 (2)模型预测 4.2 基于AIC准则的选模型A 4.3 基于BIC准则的选模型B 4.4 模型评估 五、结论…

Vector - CAPL - CANoe硬件配置函数 - 02

Hardware Configuration 硬件配置中包含CAN或者CANFD的参数配置,其中包含波特率、时间片1、时间片2、时间量子中的同步跳跃宽度、采样点数等信息;随着研发系统中各类型的平台化,测试想要跟上研发的进度,也必须进行平台化&#xff…

linux【网络编程】之网络套接字预备

linux【网络编程】之网络套接字 一、必备知识1.1 端口号1.2 端口号方面疑问及解决方案 二、TCP/UDP协议三、网络字节流四、socket编程4.1 认识接口4.2 浅析sockaddr结构 一、必备知识 在【网络基础】中我们提到了IP地址,接下来了解一下网络通信中其他方面的知识 1…

浏览器的渲染

浏览器的渲染 浏览器的渲染过程分为两大阶段,八大步骤,由两个线程完成, 下面是总的过程 第一个 渲染主线程 它包括5个步骤, 1、html解析 parse 解析我们的HTML,生成DOM树结构 2、样式计算 computed style 比如我们…

系统运维(Git篇)

Git基础 Git Git是一种分布式版本控制系统,可以帮助我们管理代码的版本和变更。通过学习Git,我们可以更好地理解版本控制的原理和应用,同时也可以掌握Git的使用和管理技巧。 Docker Docker是一种容器化平台,可以将应用程序及其依赖…

华为OD机试真题2023(JAVA)

目录 华为OD机试是什么?华为OD面试流程?华为OD机试通过率高吗?华为OD薪资待遇?华为OD晋升空间? 大家好,我是哪吒。 本专栏包含了最新最全的华为OD机试真题,有详细的分析和Java代码解答。已帮助…

web前端的同源策略是什么?

一、同源策略 1995年,同源政策由 Netscape 公司(网景公司)引入浏览器。目前,所有浏览器都实行这个政策。同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。随着互联网的发展,“同源政策”越来越严格…

深入理解java虚拟机精华总结:运行时栈帧结构、方法调用、字节码解释执行引擎

深入理解java虚拟机精华总结:运行时栈帧结构、方法调用、字节码解释执行引擎 运行时栈帧结构局部变量表操作数栈动态连接方法返回地址 方法调用解析分派静态分派动态分派 基于栈的字节码解释执行引擎 运行时栈帧结构 Java虚拟机以方法作为最基本的执行单元&#xf…

栈在表达式中的应用(中/后前缀的转换)机算,手算模拟。

一.中缀表达式转后缀表达式 初始化一个栈,用于保存 暂时还不确定的运算顺序的“运算符” 。 从 左往右 依次扫描,会遇到三种情况: 1.遇到 操作数,直接加入后缀表达。 2.遇到 界限符:     ①遇到 “(” 入栈。  …

计算机系统-虚拟存储器

例行前言: 本篇不是学习课程时的笔记,是重看这本书时的简记。对于学习本课程的同学,未涉及的内容不代表考试不涉及(mmap,动态存储器分配,linux虚拟存储器)。本章的大部分内容已经在OS中学习过了,但本章内容…

SSM架构项目实战(CRM)

开始时间:7月17日 技术架构 (一)Web开发4层开发 视图层(view):展示数据,跟用户交互。《html,css,js,jquery,bootstrap(ext|easyUI&…

代码随想录算法训练营第三十五天 | 两维贪心、重叠区间

860.柠檬水找零 文档讲解:代码随想录 (programmercarl.com) 视频讲解:贪心算法,看上去复杂,其实逻辑都是固定的!LeetCode:860.柠檬水找零_哔哩哔哩_bilibili 状态:能直接做出来。 思路 只需要维…

【java-04】深入浅出多态、内部类、常用API

主要内容 多态 内部类 常用API 1 多态 1.1 面向对象三大特征 ? 封装 , 继承 , 多态 1.2 什么是多态 ? 一个对象在不同时刻体现出来的不同形态 举例 : 一只猫对象 我们可以说猫就是猫 : Cat cat new Cat();我们也可以说猫是动物 : Animal cat new Cat();这里对象在不…

知识推理——CNN模型总结

记录一下我看过的利用CNN实现知识推理的论文。 最后修改时间:2023.05.08 目录 1.ConvE 1.1.解决的问题 1.2.优势 1.3.贡献与创新点 1.4.方法 1.4.1 为什么用二维卷积,而不是一维卷积? 1.4.2.ConvE具体实现 1.ConvE 论文&#xff1a…

聊聊我在阿里第一年375晋升的心得

前言 思来想去,觉得这个事情除了领导赏识大佬抬爱之外,还是挺不容易的,主观认为有一定的参考价值,然后也是复盘一下,继续完善自己。 绩效 首先晋升的条件就是要有个好绩效,那么我们就先基于绩效这个维度…

基于`IRIS`列存储,我们能做什么

文章目录 基于IRIS列存储,我们能做什么简介使用场景如何使用列存储什么情况下使用列储存统计数据数量count计算字段平均值avg计算字段和sum 列存储与行存储区别总结 基于IRIS列存储,我们能做什么 简介 列存储是一种数据存储方式,与传统的行…

Win11-RTX4060安装Pytorch-GPU干货避坑指南

文章目录 1、版本要和pytorch官网对应,CUDA11.8及其对应版本的cudnn2、CUDA Toolkit安装出现自动重启3、Python版本4、配置永久国内镜像源5、要在激活的虚拟环境里安装pytorch6、进入python后检查是否gpu配置成功7、在虚拟环境中启动jupyter notebook8、conda中inst…

【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)

目录 零、学习内容一、镜像结构二、Dockerfile四、基于 java:8-alpine 构建自己的 Java 项目镜像 零、学习内容 镜像结构Dockerfile 语法构建 Java 项目 ① 之前使用的镜像都是 DockerHub 官方提供的 ② 开发者需要将自己的微服务制作为镜像 一、镜像结构 镜像是由应用程序及其…

【新星计划-2023】什么是ARP?详解它的“解析过程”与“ARP表”。

一、什么是ARP ARP(地址解析协议)英文全称“Address Resolution Protocol”,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确…

ConcurrentHashMap实现原理

1. 哈希表 1.1 介绍 哈希表是一种key-value存储数据的结构,根据key即可查到对应的value。 如果所有的键是整数,我们可用简单的无序数组来表示,键作为数组索引,值即为对应的值 1.2 链式哈希表 链式哈希表本质由一组链表构成。每…