matlab数字图像灰度分布直方图函数

matlab数字图像灰度分布直方图函数

  • 简介
  • 背景知识
  • imhist函数
  • 编写简单的功能函数

简介

本文主要介绍数字图像灰度直方分布图的绘制方法,包括使用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);

输出结果如下
matlab数字图像灰度分布直方图函数_第1张图片
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);

输出结果
matlab数字图像灰度分布直方图函数_第2张图片
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时结果:
matlab数字图像灰度分布直方图函数_第3张图片
和imhist函数对比:
matlab数字图像灰度分布直方图函数_第4张图片
两者一致
n=100:
matlab数字图像灰度分布直方图函数_第5张图片
n=50:
matlab数字图像灰度分布直方图函数_第6张图片若有不足,感谢指正。

你可能感兴趣的:(matlab数字图像灰度分布直方图函数)