问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

数字图像处理基础:数字图像的灰度直方图

创作时间:
作者:
@小白创作中心

数字图像处理基础:数字图像的灰度直方图

引用
CSDN
1.
https://m.blog.csdn.net/weixin_53046747/article/details/143416945

数字图像处理是计算机科学中的一个重要领域,它涉及到图像的获取、处理、分析和理解。在数字图像处理中,灰度直方图是一个非常重要的概念,它可以帮助我们分析和理解图像的亮度分布、对比度以及图像的整体特征。本文将介绍数字图像的数值描述(包括二值图像、灰度图像和彩色图像)以及数字图像的灰度直方图。

一、数字图像的数值描述

在之前的学习中,我们知道图像都是二维信息,可写成二维函数。像素值(或称强度,或灰度)是幅值。经过采样和量化之后,图像的坐标和幅值均为有限、离散的数值。因为矩阵是二维结构的数据,同时量化值取整数(使用round函数取整),因此,一副数字图像可以用一个整数矩阵来表示。矩阵的元素位置对应于数字图像上一个像素点的位置,矩阵元素的值即为对应像素点的像素值。

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

  • :行坐标。
  • :列坐标。

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

在不同的场景中,数字图像一般可以大致分为二值图像、灰度图像、彩色图像三类。接下来分别学习它们的相关概念及数值描述。

1. 二值图像

每个像素非黑即白,其灰度值没有中间过渡的图像,就是二值图像。适合于文字信息图像的描述。虽然,二值图像对画面的细节信息描述的比较粗略,但是对于一副一般的场景图像,从画面上就已经完全可以理解其基本内容。

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

  1. 黑:=0
  2. 白:=1

现在显示该二值图像矩阵的局部块一部分,就可以直观的看到元素值只有0和1这两种取值。二值图像已经是离散的,不需要进行量化处理。每个像素的值直接代表了它的状态(黑或白)。

2. 灰度图像

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

  1. 灰度级:图像中可用的不同灰度值的数量。例如,在 8 位灰度图像中,灰度级的范围是从 0 到 255,总共有 256 个灰度级。虽然灰度级的概念看起来和之前学习的量化级别很像,但灰度级是量化结果的一种表现,而量化级别是描述离散化过程的术语。

标准灰度图像中每个像素的灰度由一个字节表示(一个字节8位),灰度级数为级,每个像素可以是从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. 直方图: 灰度直方图是一个柱状图,其中横轴表示灰度级,纵轴表示对应灰度级的像素数量。每个柱子的高度表示图像中该灰度级的像素数。直方图可以用来分析图像的对比度、亮度和动态范围。例如,直方图集中在左侧表示图像偏暗,集中在右侧表示图像偏亮。

给出一道题。
设某个图像如下,请计算该图像的灰度直方图
灰度级 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;
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号