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

《数字图像处理基础》学习05-数字图像的灰度直方图

目录

一,数字图像的数值描述 

1,二值图像

2,灰度图像

3,彩色图像

二,数字图像的灰度直方图


 

一,数字图像的数值描述 

在之前的学习中,我知道了图像都是二维信息,可写成二维函数 f(i,j) , i,j 是空间坐标。

像素值(或称强度,或 灰度):幅值  f(i,j) 。

经过之前的采样和量化之后,图像的坐标  i,j 和幅值  f(i,j)  均为有限, 离散的数值。

因为矩阵是二维结构的数据,同时量化值取整数(使用round函数取整), 因此,一副数字图像可

以用一个整数矩阵来表示。矩阵的元素位置  i,j   ,就对应于数字图像上一个像素点的位置矩阵

元素的值
 f(i,j)  即为对应像素点的像素值

值得注意的是,虽然矩阵是二维结构的数据,可以用来描述图像,但是矩阵中元素 f(i,j) 的坐标含义为:

  • i :行坐标。
  • j: 列坐标。
  • 矩阵坐标系

在学习数字信号处理的时候,一般将数字图像坐标系定义为矩阵坐标系,即用矩阵坐标系来对像素

进行分析和处理。

在不同的场景中,数字图像一般可以大致分为二值图像,灰度图像,彩色图像三类。

接下来分别学习它们的相关概念及数值描述 。

1,二值图像

每个像素非黑即白,其灰度值没有中间过渡的图像,就是二值图像。适合于文字信息图像的描述。

虽然,二值图像对画面的细节信息描述的比较粗略,但是对于一副一般的场景图像,从画面上就已

经完全可以理解其基本内容。如下图:

 二值图像的矩阵取值只有两种,具有数据量小的优点: 

  1. 黑: f(i,j)=0
  2. 白: f(i,j)=1

 现在显示该二值图像矩阵的局部块一部分,就可以直观的看到元素值只有0和1这两种取值:

二值图像已经是离散的,不需要进行量化处理。每个像素的值直接代表了它的状态(黑或白)。 

2,灰度图像

灰度图像是指每个像素的信息由一个量化后的灰度级来描述的数字图像。不包含彩色信息。其中:

  1. 灰度级:图像中可用的不同灰度值的数量。例如,在 8 位灰度图像中,灰度级的范围是从 0

    到 255,总共有 256 个灰度级。虽然灰度级的概念看起来和之前学习的量化级别很像,但灰

    度级是量化结果的一种表现,而量化级别是描述离散化过程的术语。

标准灰度图像中每个像素的灰度由一个字节表示(一个字节8位),灰度级数为 2^{8}=256 级,每个像素可以是从0~255(黑到白)之间的任何一个值。在后面的学习中,默认灰度图像的灰度级数均为 256。如下,是一张灰度图像,并选取该图像矩阵中的局部快的矩阵信息:

3,彩色图像

彩色图像根据三原色成像原理来实现对自然界中的彩色描述。三原色成像原理认为,自然界中的所有颜色都可以由红绿蓝(RGB)三原色组合而成。如果三种基色的灰度分别用一个字节(8bit)表示,则三原色之间不同灰度组合可以形成不同的颜色。如下图,是彩色插图的三原色通道分量图。可以看到,左边红色分量图的灰度值最大,所以彩色图像的画面呈暖色调。

oim = imread('lena_color_256.tif'); oim = im2double(oim);
rc= oim(:, :, 1);
gc= oim(:, :, 2);
bc = oim(:, :, 3);figure;
subplot(2, 2, 1);
imshow(oim);
title('原图像');subplot(2, 2, 2);
imshow(rc);
title('红色分量图');subplot(2, 2, 3);
imshow(gc);
title('绿色分量图');subplot(2, 2, 4);
imshow(bc);
title('蓝色分量图');

 其中:

  1. 使用 im2double 函数可以将图像转换为双精度类型,以确保后续计算的准确性。
  2.  oim(:, :, x);通过索引访问图像矩阵的第三维度来提取红色、绿色和蓝色通道。

    例如,红色:x=1,绿色:x=2,蓝色:x=3。

二,数字图像的灰度直方图

灰度直方图用于表示图像中各个灰度级别(从黑到白)的像素数量。灰度直方图可以帮助我们分析和理解图像的亮度分布、对比度以及图像的整体特征。其中:

  1. 灰度级: 在灰度图像中,每个像素的值表示其亮度,通常范围从 0(黑色)到 255(白色),对于 8 位图像而言。这个范围可以根据图像的位深度而变化,例如 16 位图像的灰度级范围是 0 到 65535。
  2. 直方图: 灰度直方图是一个柱状图,其中横轴表示灰度级,纵轴表示对应灰度级的像素数量。每个柱子的高度表示图像中该灰度级的像素数。直方图可以用来分析图像的对比度、亮度和动态范围。例如,直方图集中在左侧表示图像偏暗,集中在右侧表示图像偏亮。

给出一道题。

设某个图像如下,请计算该图像的灰度直方图
f=\begin{bmatrix} 100 &67 &34 &100 \\ 67& 67 & 34 & 100\\ 67& 56 & 211 & 67\\ 100& 100& 211&100 \end{bmatrix}

灰度级 34: 2个
灰度级 56: 1 个
灰度级 67: 5 个
灰度级 100: 6 个
灰度级 211: 2 个

使用二维坐标系绘制的灰度直方图如下:

使用matlab绘制灰度直方图会更加方便,如下,获取一张彩色图像并绘制其灰度直方图:

第一步,读取图像:
gim= imread('lena_color_256.tif'); 
因为灰度直方图专用于灰度图像并用来显示灰度级的分布,所以,如果是彩色图像(可以用size函数获取图像的颜色通道数,颜色通道数为3,就是彩色图像),使用rgb2gray函数将彩色图像转换成灰度图像。
if size(gim, 3) == 3
    gim= rgb2gray(gim);
end

第二步,使用unique函数获取灰度图像的唯一灰度值,并使用histcounts函数统计每个灰度值的像素数量:
grv= unique(gim); 
pic= histcounts(gim, 0:256); 

第三步,使用plot函数绘制二维图形,由于在 matlab中,数组索引是从 1 开始的,而标准8位灰度图像的灰度值范围是从 0 到 255,因此,在绘制纵坐标的像素数量时,需要将灰度值grv进行加1操作。
为了方便查看,可以使用grid on语句,添加网格线(也可以不添加)。

代码如下👇:

gim= imread('lena_color_256.tif'); 
if size(gim, 3) == 3gim= rgb2gray(gim);
endgrv= unique(gim); 
pic= histcounts(gim, 0:256); figure;
plot(grv, pic(grv+ 1), 'LineWidth', 2);  
xlabel('灰度值');
ylabel('像素个数');
title('灰度直方图');
grid on;

有问题请在评论区留言或者是私信我,回复时间不超过一天。

相关文章:

《数字图像处理基础》学习05-数字图像的灰度直方图

目录 一,数字图像的数值描述 1,二值图像 2,灰度图像 3,彩色图像 二,数字图像的灰度直方图 一,数字图像的数值描述 在之前的学习中,我知道了图像都是二维信息&…...

【漏洞复现】某平台-QRcodeBuildAction-LoginSSO-delay-mssql-sql注入漏洞

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…...

Centos安装ZooKeeper教程(单机版)

本章教程介绍,如何在Centos7中,安装ZooKeeper 3.9.3版本。 一、什么是ZooKeeper ? Apache ZooKeeper 是一个分布式协调服务,用于大型分布式系统中的管理和协调。它为分布式应用提供了一个高性能的通信框架,简化了开发人员在构建复杂分布式系统的任务。ZooKeeper 能够解决一…...

A011-基于SpringBoot的视频点播系统设计与实现

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装视频点播系统软件来发挥其高效地信息处理的作用&#xff0c…...

云原生+AI核心技术&最佳实践

以下内容是我在陕西理工大学2023级人工智能专业和网络专业的演讲内容,分享给大家。 各位老师、同学们,大家好啊!能在这里跟大家一起聊聊咱们计算机专业那些事儿,我真的觉得超级兴奋! 首先,自我介绍一下&am…...

【Android】Service

文章目录 1.service2.startService3.bindService4.区别 1.service 在Android开发中,Service 是一个可以在后台长时间运行的组件,用于执行耗时操作或执行那些不需要与用户界面直接交互的任务。Service 不依赖于用户界面,即使用户切换到其他应…...

2-142【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真

【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真,具有14页文档。假设发射信号载频为1GHz,圆形阵列半径为0.8米,在圆周上均匀布置30个阵元。1.画出指向0度的方向图。2.如果目标在0度,有一不相干的干扰信号在3…...

在目录中按扩展名分类文件(python学习)(11.1)

# -*- coding:utf-8 -*- # FileName :SortBySuffix.py # Time :2024/11/1 15:13 # Author :liyiwei# Python脚本按扩展名在目录中对文件进行排序 import os from shutil import movedef sort_files(directory_path):# 遍历指定目录下的所有文件和文件夹for filename i…...

【网络安全 | 漏洞挖掘】逻辑漏洞+无限制爆破实现业务瘫痪

未经许可,不得转载。 文章目录 前言正文前言 目标:target.com,是一个为设计团队服务的工作平台。 该程序允许用户创建账户并组建团队,指定的领导者担任管理员。团队类型包括: 1、免费团队:限于一个项目,最多三份文件。 2、学生团队:项目和文件无限制,学生可免费获…...

【WRF工具】MPAS(多尺度预测模型)-输出WRF初始和横向边界条件

【WRF工具】MPAS(多尺度预测模型)-输出WRF初始和横向边界条件 MPAS概述模型概述主要特点 使用MPAS输出WRF初始和横向边界条件参考 从WPS的v3.9版本开始,metgrid.exe程序能够从 跨尺度预测模型(The Model for Prediction Across Sc…...

分数阶傅里叶变换与信息熵怎么用于信号处理?

天马行空的理解与思考方式:分数阶傅里叶变换与信息熵怎么用于信号处理? ChiX-Y 快速学习,快速尝试,快速失败 已关注 35 人赞同了该文章 这篇文章希望能写的有趣,同时有质量,学习就是要多维度多角度&…...

web3.0 开发实践

优质博文:IT-BLOG-CN 一、简介 Web3.0也称为去中心化网络,是对互联网未来演进的一种概念性描述。它代表着对现有互联网的下一代版本的设想和期望。Web3.0的目标是通过整合区块链技术、分布式系统和加密技术等新兴技术,构建一个更加去中心化…...

【华为HCIP实战课程三十】中间到中间系统协议IS-IS路由渗透及TAG标识详解,网络工程师

一、路由泄露 1、默认情况Level 1不会学到Level2的明细路由,L2可以学到L1的明细路由 2、FIB数据转发,路由负载,通过随机数据中的五元组hash,hash值决定数据走哪条链路 R1设备ping和telnet通过抓包查看走的都是S1/0/0接口 抓包进行过滤;ip.a…...

大模型论文精华-20241104

工具而不是对等:框架如何影响人们对 Teams 中 AI 代理的看法 研究问题 随着人工智能技术的发展及其在团队环境中日益广泛的应用,人们对于如何理解和评价AI代理的态度和看法变得尤为重要。该研究关注于探讨不同框架下人们对AI代理的感知差异&#xff0c…...

mac ssh 连接 linux 服务器

生成 SSH 密钥对 打开终端: 你可以通过 Spotlight 搜索 “Terminal” 打开终端。 生成密钥对: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 手动复制公钥(可选) 如果 ssh-copy-id 命令不可用&#xff0…...

逻辑卷建立

逻辑卷 lvm逻辑卷即为:logical volume manager逻辑管理卷,是linux系统下管理硬盘分区的一种机制,lvm适合于管理大型存储文件,用户可以动态的对磁盘进行扩容 作用 lvm:linux系统的一个重要的存储技术 不同的硬盘的不…...

算法深度剖析:前缀和

文章目录 前言一、一维前缀和模板二、二维前缀和模板三、寻找数组的中心下标四、除自身以外数组的乘积五、和为 K 的子数组六、和可被 K 整除的子数组七、连续数组八、矩阵区域和 前言 本章将深度剖析前缀和,以及总结前缀和模板。 前缀和是一种在算法和数据处理中…...

【双目视觉标定】——1原理与实践

0 前言 双目视觉定位是目前机器(机器人)等领域中使用得非常广泛的视觉定位技术,双目视觉是模拟人的视觉系统利用两个不同位置的摄像头的视差来确定物体的位置。由于有需要采集两个摄像头的图像共同参与计算,所以双目相机装配要求…...

Java学习笔记(十二)

Mysql explain Extra MySQL的EXPLAIN语句是优化数据库查询的重要手段,其中的Extra列包含了不适合在其他列中显示但十分重要的额外信息。以下是对Extra列的详细介绍及举例: 一、Using filesort 解释:表示MySQL会对数据使用一个外部的索引排序…...

《Java 实现希尔排序:原理剖析与代码详解》

目录 一、引言 二、希尔排序原理 三、代码分析 1. 代码整体结构 2. main方法 3. sort方法(希尔排序核心逻辑) 四、测试结果 一、引言 在排序算法的大家族中,希尔排序是一种改进的插入排序算法,它通过将原始数据分成多个子序…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...