定义
灰度级的函数,具有该灰度级的像素的个数
h
(
r
k
)
=
n
k
h(r_k)=n_k
h(rk)=nk
- r k r_k rk是灰度值
- n k n_k nk是对应灰度级像素的个数
举例将图像灰度矩阵转为灰度直方图,如下图2-1。灰度值为10的像素的个数有3个,灰度值为15的像素有2个等等。
作用
灰度直方图:反映了图像灰度的分布。
灰度直方图累加
∑ 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=0L−1h(rk)=∑k=0L−1h(nk)=N (图像中像素的总个数)
灰度直方图的归一化
p ( r k ) = p(r_k)= p(rk)= n k N {n_k}\over{N} Nnk
直方图的特征
- 一幅图像对应唯一直方图
- 一个直方图可能对应多个图像,如下图2-2
直方图应用
- 图像增强-------->直方图均衡
- 图像分割-------->根据直方图获取阈值分割
- 图像分类-------->根据直方图判断图像的相似性
直方图代码实现
灰度值的表示,如下图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]++;
}
}
}
为什么需要图像增强?
- 视觉效果不佳
- 噪声污染
- 难以分析理解
如下图2-4
什么是图像增强?
按照需要去除或者突出图像中某些信息
- 没有增加图像中的信息量,还有可能损失。
- 没有统一的客观评价标准,特定用途,特定方法。
如何进行图像增强?
- 灰度变换:线性变换、非线性变换
- 代数运算:加法运算、减法运算、乘法运算
- 空间域滤波:低通滤波、高通滤波
- 频域滤波:低通滤波、高通滤波
直接对图像中像素的灰度级进行操作(空间域增强):灰度变换、代数运算、空间域滤波
图像进行傅里叶变换等,对变换后的系数进行操作(频域增强):频域滤波