简介
本文主要介绍数字图像灰度直方分布图的绘制方法,包括使用matlab的imhist函数和自己编写对应的功能程序。
背景知识
数字图像在计算机中的保存形式为矩阵,矩阵中每个元素值保存着图像对应像素的信息。彩色图片为三维矩阵,每一维各自包含彩色图片的RGB信息。灰色图片为二维矩阵,每个元素的取值为[0,255]之间的整数。数字图像的灰度分布直方图即统计矩阵中值为0,1,2…255的元素的个数,观察其比重。
imhist函数
matlab中的imhist函数的使用方法主要有以下三种形式
imhist(I)
imhist(I,n)
[counts,x] = imhist (…)
1.第一种方式比较常见,其中参数I表示灰度图,即二维矩阵。利用lena图显示其输出效果:
image=imread('图像保存的路径');
image_gray=rgb2gray(image);%0.2989R+ 0.5870G + 0.1140B
image_gray=rgb2gray(image);%转换为灰度图
imhist(image_gray);
输出结果如下
2.方法2中参数I也是表示灰度图数据,n便是将灰度划分成n个区间,统计每个区间中元素的个数绘制灰度分布直方图。n默认为256。
image = imread('图像保存的路径');
image_gray=rgb2gray(image);%0.2989R+ 0.5870G + 0.1140B
image_gray=rgb2gray(image);%转换为灰度图
imhist(image_gray,50);
输出结果
3.方法3中imhist函数不再输出图像,直接返回参数。其中参数count保存各个灰度区间元素个数,x保存各个区间的灰度值边界。
image = imread('图像保存的路径');
image_gray=rgb2gray(image);%0.2989R+ 0.5870G + 0.1140B
image_gray=rgb2gray(image);%转换为灰度图
[count,x]=imhist(image_gray,5);
结果
count=
349
73353
128298
59681
463
x=
0
63.7500
127.5000
191.2500
255.0000
编写简单的功能函数
利用matlab编写简单的功能函数实现输出图像的灰度分布直方图功能。
代码如下:
function my_hist(n,image)
close all;
k=256/n;
histograms(n)=0;
for i=1:1:n
a=size(find(image<=k*i))-size(find(image<=k*(i-1)));
histograms(i)=a(1);
end
bar(0:k:n*k-1,histograms,'grouped');title('手写代码lena灰度分布直方图')
n=256时结果:
和imhist函数对比:
两者一致
n=100:
n=50:
若有不足,感谢指正。