图像直方图

图像直方图

    • 定义
    • 作用
    • 灰度直方图累加
    • 灰度直方图的归一化
    • 直方图的特征
    • 直方图应用
    • 直方图代码实现
    • 为什么需要图像增强?
    • 什么是图像增强?
    • 如何进行图像增强?

定义

灰度级的函数,具有该灰度级的像素的个数
h ( r k ) = n k h(r_k)=n_k h(rk)=nk

  1. r k r_k rk是灰度值
  2. n k n_k nk是对应灰度级像素的个数

举例将图像灰度矩阵转为灰度直方图,如下图2-1。灰度值为10的像素的个数有3个,灰度值为15的像素有2个等等。

图像直方图_第1张图片

图2-1

作用

灰度直方图:反映了图像灰度的分布。

灰度直方图累加

∑ k = 0 L − 1 h ( r k ) = ∑ k = 0 L − 1 h ( n k ) = N \sum_{k=0}^{L-1}h(r_k)=\sum_{k=0}^{L-1}h(n_k)=N k=0L1h(rk)=k=0L1h(nk)=N (图像中像素的总个数)

灰度直方图的归一化

p ( r k ) = p(r_k)= p(rk)= n k N {n_k}\over{N} Nnk

直方图的特征

  1. 一幅图像对应唯一直方图
  2. 一个直方图可能对应多个图像,如下图2-2

图像直方图_第2张图片

图2-2

直方图应用

  1. 图像增强-------->直方图均衡
  2. 图像分割-------->根据直方图获取阈值分割
  3. 图像分类-------->根据直方图判断图像的相似性

直方图代码实现

灰度值的表示,如下图2-3

图像直方图_第3张图片

图2-3
   //计算图像直方图
   int histFlag; 
   BYTE hist[256]; //存储图像直方图,256灰度级
   void histCompute(BYTE*, int, int);  //计算图像直方图函数
void CMFCApplicationlView::histCompute(BYTE*image, int width, int height:){
     int n;
     
     // 直方图初始化
     for(n = 0; n < 256; n++)
         hist[n] = 0;
         
     int i, j;    // (i, j)表示像素的位置
     BYTE gray;

     for(i=0;i<height;i++){
         for(j=0;j<width; j++){
             gray = image[i * width + j]; hist[gray]++;
         }
     }
}

为什么需要图像增强?

  1. 视觉效果不佳
  2. 噪声污染
  3. 难以分析理解

如下图2-4

图像直方图_第4张图片

图2-4

什么是图像增强?

按照需要去除或者突出图像中某些信息

  1. 没有增加图像中的信息量,还有可能损失。
  2. 没有统一的客观评价标准,特定用途,特定方法。

如何进行图像增强?

  1. 灰度变换:线性变换、非线性变换
  2. 代数运算:加法运算、减法运算、乘法运算
  3. 空间域滤波:低通滤波、高通滤波
  4. 频域滤波:低通滤波、高通滤波

直接对图像中像素的灰度级进行操作(空间域增强):灰度变换、代数运算、空间域滤波
图像进行傅里叶变换等,对变换后的系数进行操作(频域增强):频域滤波

你可能感兴趣的:(数字图像处理与机器学习,计算机视觉,图像处理)