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

news2024/11/5 10:50:06

目录

一,数字图像的数值描述 

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) == 3
    gim= rgb2gray(gim);
end

grv= unique(gim); 
pic= histcounts(gim, 0:256); 

figure;
plot(grv, pic(grv+ 1), 'LineWidth', 2);  
xlabel('灰度值');
ylabel('像素个数');
title('灰度直方图');
grid on;

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

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

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

相关文章

6.1、实验一:静态路由

源文件获取:6.1_实验一:静态路由.pkt: https://url02.ctfile.com/f/61945102-1420248902-c5a99e?p2707 (访问密码: 2707) 一、目的 理解路由表的概念 会使用基础命令 根据需求正确配置静态路由 二、准备实验 1.实验要求 让PC0、PC1、PC2三台电脑…

集成ruoyi-it管理系统,遇到代码Bug

前言:这次ruoyi框架开发it管理系统,出现很多问题,也有学到很多东西,出现几个问题,希望下次项目不会出现或者少出现问题;其中还是有很多基础知识有些忘记,得多多复习 1:当写的代码没…

解决Redis缓存穿透(缓存空对象、布隆过滤器)

文章目录 背景代码实现前置实体类常量类工具类结果返回类控制层 缓存空对象布隆过滤器结合两种方法 背景 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库 常见的解决方案有两种,分别…

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

vscode 创建 vue 项目时,配置文件为什么收缩到一起展示了?

一、前言 今天用 vue 官方脚手架创建工程,然后通过 vscode 打开项目发现,配置文件都被收缩在一起了。就像下面这样 这有点反直觉,他们应该是在同一层级下的,怎么会这样,有点好奇,但是打开资源管理查看&…

LInux系统编程(二)操作系统和进程

目录 一、前言:冯诺依曼体系结构 1、图中各个单元的介绍 2、值得注意的几点 二、操作系统 1、操作系统分层图 2、小总结 三、 进程(重点) 1、进程的基本概念 2、存放进程信息的数据结构——PCB(Linux 下称作 task_struct…

HNU-小学期-专业综合设计

写在前面 选题:大数据技术-智慧交通预测系统 项目github地址(如果有用麻烦点个star与follow):https://github.com/wolfvoid/HNU-ITPS (全部代码以及如何部署参见README) 项目报告:如下&…

Linux特种文件系统--tmpfs文件系统

tmpfs类似于RamDisk(只能使用物理内存),使用虚拟内存(简称VM)子系统的页面存储文件。tmpfs完全依赖VM,遵循子系统的整体调度策略。说白了tmpfs跟普通进程差不多,使用的都是某种形式的虚拟内存&a…

PLC会被卡脖子吗?冗余技术才是中型和大型PLC的门槛

美方称北京天圣华参与高超音速武器的研发和空对空导弹的生产,因此把北京天圣华列入实体制裁清单。据说因为天圣华向和中国军方相关研究机构出售了西门子的建模软件,并为军工项目的也就做出了积极贡献,因此美方对西门子施压。 西门子是全球最大…

【测试平台】打包 jenkins配置和jenkinsfile文件

背景: 当打包机环境配置完成后,需要挂到master的jenkins中,完成调度。 jenkins启动 命令行直接启动即可。 nohup java -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpListenAddress0.0.0.0 --httpPort80 appending output to n…

【刷题13】链表专题

目录 一、两数相加二、两两交换链表的节点三、重排链表四、合并k个升序链表五、k个一组翻转链表 一、两数相加 题目: 思路: 注意整数是逆序存储的,结果要按照题目的要求用链表连接起来遍历l1的cur1,遍历l2的cur2,和…

人工智能与数据安全:Facebook如何应对隐私挑战

在数字时代,数据隐私和安全成为了用户和企业关注的核心问题。作为全球最大的社交媒体平台之一,Facebook面临着日益严峻的隐私挑战。近年来,频繁发生的数据泄露事件和对用户隐私的质疑,使得Facebook在保护用户数据方面倍感压力。为…

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1:同步发电机稳态相量图 若发电机为凸极式,由于凸极机正、交轴同步电抗不等,即xd≠xq,因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…

C语言模拟实现堆排序

堆排序是一种效率比较高的排序方法,时间复杂度。 堆分为大堆和小堆,如果想要拍升序我们需要建立大堆,而如果想要拍降序则需要建立小堆,在使用堆排序前需要先建立一个堆,如果不会建立可以看我前面写的C语言模拟实现堆的…

HCIA笔记整合

第一部分: OSI七层模型 应用层:人机交互 抽象语言--------编码 表示层:编码------二进制 会话层:提供会话号 传输层:TCP/UDP 分段(收到MTU值的限制) MTU:最大传输单元&#xff…

html简易流程图

效果图 使用htmlcssjs&#xff0c;无图片&#xff0c;没用Canvas demo: <!DOCTYPE html> <html> <head><link href"draw.css" rel"stylesheet" /><script src"draw.js" type"text/javascript"></…

新手BUG:在声明了返回值的函数中不写返回值

本文对两个分别以int和string为返回值类型的函数进行分析&#xff0c;说明了在有返回值的函数中不写返回值会产生的问题。然后给出在编译阶段检查出这样的问题的办法。 一、背景 在软件测试环节发现&#xff0c;函数会在返回之前coredump。经过排查发现&#xff0c;在这个会…

单个相机矫正畸变

1、通过标定助手获取到内参外参&#xff0c;外参在此无效&#xff0c;只用到了内参 2、然后通过halcon算子进行矫正 参考&#xff1a;超人视觉

【骑士放置——最大独立集】

题目 思路 最大独立集n-最小点覆盖n-最大边匹配 代码 #include <bits/stdc.h> using namespace std; #define x first #define y second typedef pair<int, int> PII; const int N 110; int dx[8] {-2, -1, 1, 2, 2, 1, -1, -2}; int dy[8] {1, 2, 2, 1, -1, …

【每日题解】3226. 使两个整数相等的位更改次数

给你两个正整数 n 和 k。 你可以选择 n 的 二进制表示 中任意一个值为 1 的位&#xff0c;并将其改为 0。 返回使得 n 等于 k 所需要的更改次数。如果无法实现&#xff0c;返回 -1。 示例 1&#xff1a; 输入&#xff1a; n 13, k 4 输出&#xff1a; 2 解释&#xff1a…