灰度直方图(MATLAB)

1.概念

灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中每种灰度出现的频率,如图所示。灰度直方图的横座标是灰度级,纵座标是该灰度级出现的频度,它是图像最基本的统计特征。
在这里插入图片描述
即三步:
1.首先需要统计它的灰度级
2.统计各个灰度级想像素个数
3.以图的形式来表示,横座标灰度级,纵座标概率或像素个数

横座标的r代表图像中像素灰度级,作归一化处理后,范围在[0, 1]之间。在灰度级中,r=0代表黑,r=1代表白。对于一幅给定的图像来说,每一个像素取得[0, 1]区间内的灰度级是随机的,也就是说r是一个随机变量。假定对每一瞬间,它们是连续的随机变量,那么就可以用概率密度函数pr ( r )来表示原始图像的灰度分布。如果用直角座标系的横轴代表灰度级r,用纵轴代表灰度级的概率密度函数pr( r ),这样就可以针对一幅图像在这个座标系中作出一条曲线来。这条曲线在概率论中就是概率密度曲线,如图所示。

d1.png

2.性质

  1. 灰度直方图表征了图像的一维信息。
  2. 灰度直方图与图像之间的关系是一对多的映射关系
  3. 子图直方图之和为整图的直方图
    即:一个直方图可以对应多幅图像,而一个图像只能对应一副直方图。
    需要注意的是直方图并没有反映像素在图中的位置信息

3.直方图的计算

灰度直方图的计算非常简单,依据定义,在离散形式下,用rk代表离散灰度级,用pr(rk)代表pr( r ),并且有下式成立:

d3.png

式中:nk为图像中出现rk级灰度的像素数,n是图像像素总数,而nk/n即为频数。在直角座标系中做出rk与pr(rk)的关系图形,即称为该图像的直方图。

4.重要知识点

(1)直方图与图像不是一一对应的:一幅图像对应一个直方图,但直方图并不一定只对应一幅图像。

(2)直方图仅能统计灰度像素出现的概率,反映不出该像素在图像中的位置,即在直方图中,没有体现图像所具有的空间信息。

(3)灰度直方图能够反映灰度图像的对比度。

(4)利用matlab计算图像直方图函数为imhist();具体用法:

  • imhist( i );直接显示图像i的灰度直方图;

  • imhist(i,n)n为指定灰度级显示直方图;

  • [count, x] = imhist( i ) 获取直方图信息,count为每一级灰度像素个数,x为灰度级,x也可以在imhist(i,x)中指定,可以通过stem(x,count)画相应直方图;

(5)所以说直方图不同,大致的能够反映出图像的视觉效果的好坏。

  • 低灰度级集中,则表示比较暗。
  • 高灰度级集中,则表示比较亮。
  • 中灰度级集中,动态范围不足,对比度比较差。
  • 均衡分布的图像,从低到高,像素占据比较均衡。

5.MAITLAB程序

1.灰度图

%灰度直方图
f=imread('lena.jpg');
subplot(121);imshow(f);title('原图');
subplot(122);imhist(f);title('灰度直方图');

2.柱状直方图
bar(horz,v,width);
v:vertical垂直,向量,包含了将要被绘制的点
horz:horizion水平灰度级间隔,等分成几段来降低分辨率
width:宽度 范围0<=width<=1,默认值0.8

h = imhist(f);
h1 = h(1:10:256);
horz = 1:10:256;%1-25610刻度画一条柱状
bar(horz,h1);
axis([0 255 0 3000]);#x,y轴的最大最小值范围
set(gca,'xtick',0:50:255);%0-255 座标间隔50,get CurrentAxes获取当前轴
set(gca,'ytick',0:500:3000);%座标间隔500

3.杆状图/火柴梗图
stem(horz,v,1,‘color_linestyle_marker’,‘fill’);
v:行向量
horz:水平标度值增量
color_linestyle_marker:线条颜色,线型,标记符号,见下图。
在这里插入图片描述

h = imhist(f);
h1 = h(1:10:256);
horz = 1:10:256;%1-25610刻度画一条柱状
stem(horz,h1,'r--s','fill');%红色虚线方形
axis([0 255 0 3000]);#x,y轴的最大最小值范围
set(gca,'xtick',0:50:255);%0-255 座标间隔50,get CurrentAxes获取当前轴
set(gca,'ytick',0:500:3000);%座标间隔500

4.拟合曲线图
plot(horz,v,1,‘color_linestyle_marker’);

h = imhist(f);
plot(h);
axis([0 255 0 15000]);
set(gca,'xtick',0:50:255);
set(gca,'ytick',0:2000:15000);

5.实现灰度直方图的显示

I = imread('beauty.jpg');
J=rgb2gray(I);
imhist(J);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章