图像直方图笔记

news2024/12/23 18:09:49

图像直方图

        在统计学中,直方图是一种对数据分布情况的图形化表示方法。

        图像直方图是用来表示数字图像中亮度分布的直方图,使用图像直方图可以很直观地观察到该图的亮度分布情况。在图像直方图中,横轴从左到右分别表示了从纯黑到纯白区域的亮度值的分布。

        横坐标:图像中各个像素点的灰度级。

        纵坐标:在该像素灰度的像素的个数。

   

         原图:Understanding Digital Camera Histograms: Tones and Contrast

        如上图所示,从这张图片的直方图我们可以很清楚地看到。图片中像素亮度分布情况是在左右两端分布多,中间分布少。较暗的像素占比较大。

        我们以一个非常简单的例子来看直方图如何绘制,假设有一张3x3的图片,各个像素的灰度值如下:

         可以看到,像素有5种灰度值(x),因此横坐标我们设置为5个单位;y表示每种灰度值的像素个数统计,根据直方图的定义我们绘制出这个3x3图片的折线直方图为:

         用柱状直方图表示如下:

        这两种图本质上是没有区别的, 另外还可以用归一化的直方图来表示。

        归一化直方图的横轴仍然是像素的灰度级,但纵轴表示的是对应灰度级像素个数在图片中所占的比例。

        对应的归一化直方图(折线)绘制出来如下:

 

         下面再来看一个实际的例子:

         从这三张直方图来看,顶部图片的直方图较为均衡,看起来效果比较正常;中间图片亮度分布集中在中间区域,且中心较为密集,图片看起来对比度不高,整体偏灰;底部图片的直方图在较暗区域基本没有像素,较亮区域分布较少,整体稍微偏向亮区多一点,分布也不均匀。一般来说,除了一些特殊场景,第一种直方图分布均衡的视觉效果更好。

直方图的一些术语

        dims:需要统计的特征的数量。例如dims = 1表示只统计灰度值。

        bins: 每个特征空间子区段的数量。

        range:灰度值的范围,一般为[0,255]。

         如上图,最初bins = 5,我们将bins设置为3,将像素灰度级变为3个范围(bins),每个范围包含两个灰度级。统计每个灰度范围内的像素个数并绘制出来。

        对于bins,下图是另一个例子:

直方图均衡化

         直方图均衡化是通过调整像素亮度分布范围,让像素在[0.255]灰阶上分布地更加均匀,从而提高图像的对比度,改善图像视觉效果。一般对于对比度较低的图像,直方图均衡化比较适合,会增强图像细节。

        扩展原图的亮度范围的操作,从数学上看,我们需要一个映射函数,将原图的像素值均衡映射到新的直方图中,这个函数要满足两个条件:

        1. 不打乱原有像素值大小顺序,映射后亮、暗的大小关系不能变。

        2. 映射后的像素值在原来的像素值范围内(一般是[0,255])。

        做直方图均衡的时候,会使用累积分布函数,因为累计分布函数是单调递增且最大值为1,能够保证上述两个太哦啊金。关于直方图均衡和累计分布函数关系推导,可以参考这篇文章:

数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍_LaoYuanPython的博客-CSDN博客本文介绍了《数字图像处理》第三章直方图均衡的主要知识点,直方图均衡法针对非数字图像以及数字图像都存在通用的公式,只需要数字图像和非数字图像自身的信息,二者虽然由于灰度值连续和离散的不同公式有所不同,但本质是一致的。本文的介绍是完全基于《数字图像处理》的介绍,其中有些内容对于不熟悉数字图像处理的人员理解可能存在困难,请等待老猿后续的系列博文答疑解惑。_直方图均衡https://blog.csdn.net/LaoYuanPython/article/details/119857829

累积分布函数

        图像由离散的像素点组成,因此图像直方图均衡化通过离散形式的累积分布函数求解。直方图均衡化过程中,映射方法是:

 

        S_{k}是指经过累计分布函数映射后的灰度值;

        MN是像素的个数;

        n_{j}表示灰度为j的像素个数;

        L表示灰度级的数量(8 bit的像素值有256个灰度级)

直方图均衡化过程

        1. 计算原图的统计直方图

        2. 根据统计直方图得到归一化直方图,通过归一化直方图得到累计直方图 

         可以看到,累计直方图的像素级对应的值是这个像素级本身像素出现的概率加上之前所有像素级出现概率的和(图中像素级1对应的值是0.37是因为归一化直方图中未显示第三位小数点,理解过程即可)。

        3. 使用累计直方图做区间转换

           根据离散累计分布函数的公式计算S_{k}。案例中有8个像素级,因此L - 1 = 7。用累计概率乘以(L - 1)就得到了S_{k}。对比一下原始直方图和均衡直方图:

         最后,来看一个实际的直方图均衡化的例子:

​​​​​​​

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

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

相关文章

【C语言初阶】函数的具体用法,有这篇博客就够了

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,今天又又又来给大家更新0基础C语言中的内容啦!今天给大家带来的是C语言当中函数的调用以及使用,废话不多说我们直接开始吧! 函数详解 一.函数…

专治疑难系列 - 解决打印机凭证冲突问题

‍‍🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『专治疑难系列』 🌌上期文章: 专治疑难系列 - 解决Ubuntu忘记root密码问题 📰如觉得博主文章…

深度学习实例分割篇——Mask RCNN原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

如何系列 如何使用SikuliX执行自动化任务

文章目录 什么是SikuliX?SikuliX的使用场景安装SikuliX常用方法查找鼠标键盘其他 示例脚本示例一 自动抢票示例二 自动打开计算器示例三 自动访问CSDN博客搜索博主并关注其他 SikuliX原理SikuliX脚本Sikuli 源文件夹或压缩文件(.sikuli、.skl&#xff09…

电源纹波测试,居然还能这么玩

开关稳压器因其具有非常高的效率优势,正在各个领域逐渐替代线性稳压器。 但由于开关稳压器通常被认为具有很大的输出纹波(Ripple),所以很多工程师在高性能和噪声敏感型系统中只考虑使用低压差(LDO)稳压器。 而事实上,现今很多高性能开关稳压…

人机接口回路原理(三)

四、串行通信接口电路 (一)人机接口与保护CPU之间的串行通信 1.串行通信接口电路及其作用 人机接口与保护CPU之间的串行通信的作用是人机对话和巡检,其电路见图1-33所示。这个串行通信系统是主从分布式的系统&#x…

双向可控硅控制后续篇:过零检测电路、丢波、斩波、定时

概念讲解 当我们在使用AC负载的时候,为了能较好的控制负载工作功率,需要用到继电器、可控硅等对负载进行工作与断开的控制,从而将功率维持在所需的大小上,之前介绍双向可控硅的文章也讲了其控制方式主要有:定时、丢波…

go语言的反射和泛型

反射 反射可以在程序的运行时获取变量的各种信息。Go语言中光反射在reflect包下。 http://c.biancheng.net/view/4407.html 泛型 Go语言中通过断言转化为指定类型。 func main() {arr : []string{"int", "dghjs", "hdk"}printArr(arr)arr1 …

【JavaWeb】servlet实现excel表格数据批量导入到数据库

这是一个教大家使用excel表格,批量将数据导入到数据库的一个教程 通过Javaweb项目 的servlet技术实现,教程详细简单,跟着做就不会报错! 1.下载依赖包: tomcat-jdbc的jar包下载:文件上传批量导入数据库依赖…

一篇打通,性能测试与性能测试瓶颈评估,测试之道...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么是性能测试&a…

硬件系统工程师宝典(30)-----降压式Buck电路分析

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到DC/DC变换中的开关调节模式有功耗小、效率高并且稳压范围宽的特点以及DC/DC的指标参数和设计要求。今天我们来分析一下DC/DC中的一个典型…

嬴图 | 围绕中心性算法在寄生虫网络的研究

算法在实践中的应用有哪些?中心性算法的特点和应用一文了解。 前言 寄生(Parasitism)是两种生物之间的一种“消费者—资源”的关系,即寄生虫(Parasite)和它的宿主(Host)。 寄生虫…

智芯MCU软件开发环境搭建

智芯MCU软件开发环境搭建 目录 智芯MCU软件开发环境搭建前言1 软件安装2 编译环境3 烧录环境4 新建工程结束语 前言 智芯科技的MCU主要应用于汽车行业,属于车规级的MCU,目前上市的MCU型号较少,相关资料也不多,所以这里出一期开发…

医学影像信息系统(PACS源码)基本概况和工作原理

一、医学影像信息系统(PACS)基本概况 医学影像信息系统(PACS)是一种集影像采集、传输、存储、管理、查询、诊断、报告、归档和科研于一体的综合性应用系统。它基于医学影像存储与通信系统(Picture Archiving and Comm…

Seata Saga 模式理论学习、生产级使用示例搭建及注意事项(一) | Spring Cloud57

一、前言 通过以下系列章节: docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…

当我用AI为开发AntV图表插上想象的翅膀后

前言 做前端图表时,最耗时的就是找配置参数,比如你在使用AntV G2时,为了更加美观,拉大数据之间的差距,需要将y轴设置一个最小值,由于每个图表的参数少说十几个,多达二十多个,一个一…

C# 反射 (Reflection) 的常用功能

目录 一、概述 二、实例化类 三、反射赋值 四、获取字段值 五、获取字段名 六、获取字段类型 七、调用方法 结束 一、概述 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块,而模块包含类型,类型又包含成员。反射则…

华为认证 | HCIE-Datacom 考试大纲

01 HCIE-Datacom考试概述 02 HCIE-Datacom考试内容 HCIE-Datacom V1.0 考试覆盖数据通信领域:路由交换高阶技术、企业网络架构全景、园区网络典型架构与技术、华为CloudCampus解决方案设计与部署、广域互联网络典型架构与技术、华为SD-WAN解决方案设计与部署、广域…

人机接口回路原理(四)

五、硬件时钟电路 接口插件设置了一个硬件时钟电路,由一片MC146818时钟芯片及辅助元器件组成,如图1-35所示。 MC146818芯片是智能式硬件时钟,其内部由电子时钟和存储器两部分组成。可计年、月、日、时、分、秒、星期;能…

时间序列中的无监督表示学习

自监督学习中,有一个常用的方法是对比学习; 2.  时间序列的表示学习 1.1 采用对比学习的方式 Time-series representation learning via temporal and contextual contrasting(IJCAI’21) 本文采用对比学习的方式进行时间序列表示学习。首先对于同一…