MATLAB中的灰度直方图

来源:互联网 发布:数控铣床编程方法 编辑:程序博客网 时间:2024/06/05 06:09

灰度直方图


直白的说就是图像灰度值的统计函数图像,统计图像中各个灰度值(黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0)出现的次数或概率。

MATLAB中imhist可以进行图像的灰度直方图运算:
imhist ( I )
imhist ( I , n )
[ counts , x ] = imhist ( … )

参数说明
- I 为要计算灰度直方图的图像数据
- n 为指定灰度级数目。将所有的灰度级均匀的分布在n 个小区间内,如n为64,则可以将0~255总共256个灰度级划分为32个长度为8的灰度空间。调用imhist(I,32)后,此时纵轴分别统计每个长度为8的灰度空间的像素在图像中出现的次数或概率。一般n设为2的整数次幂,这样可以无需圆整

返回值
- counts为直方图数据向量。counts(i)表示第i个灰度区间的像素数目。
- x是保存了对应的灰度小区间的向量。
若调用时不接收这个函数的返回值,则直接显示直方图;在得到这些返回数据之后,可以使用stem(x,counts)来手工绘制直方图。

1. 一般直方图

图1
实验所用到的图1名称qilin.bmp(这里采用的图片其模式都是灰度模式)

对于彩色图片而言可以用下列程序

I=imread('图片名称');    % 读取图片R=I(:,:,1);             % 获取图片红通道信息G=I(:,:,2);             % 获取图片绿通道信息B=I(:,:,3);             % 获取图片蓝通道信息

得到RGB三原色的各自的灰度分布,然后再用inhist(…)显示出其灰度直方图。

% 一般直方图clear,clc;close all;I = imread('qilin.bmp');    % 读取图片figure;                     % 创建窗口imshow(I);title('Source');  % 显示并命名标题figure;subplot(1,2,1);             % 把绘图窗口分成1行2列2块区域,聚焦到第一块区域imhist(I);title('Histogram未分段');subplot(1,2,2);             % 把绘图窗口分成1行2列2块区域,聚焦到第二块区域imhist(I,64);title('Histogram分为64段小区间');

实验结果
图2
由图2可见指定了n后,灰度就变得比较离散。

2. 归一化直方图

在imhist函数返回值中,counts得到每个小区间的像素个数,再计算counts与图像中像素总数的比值就可以得到归一化的直方图。

%归一化直方图clear,clc;close all;I = imread('qilin.bmp');    % 读取图片figure;                     % 创建窗口[M,N] = size(I);            % 计算图像大小[counts,x] = imhist(I,32);  % 计算有32个小区间的灰度直方图counts = counts/(M*N);      % 计算归一化灰度直方图各区间的值stem(x,counts);             % 绘制归一化直方图

运行结果如图
图3


总的来说,分析图像的灰度直方图可以得到很多有效的信息,如可以很直观的了解图像的亮度和对比度等信息。
直方图的峰值分布可以反映图像的亮暗:如果图像较亮,则峰值出现在直方图的靠右部分;如果图像较暗,则峰值出现在直方图的靠左部分。如果直方图只在中间一小段有非零值,则图像的对比度较低;如果直方图的非零值分布广泛且比较均匀,则图像的对比度较高。


本文中的代码MATLAB灰度直方图

原创粉丝点击