特征提取与图像处(三) 直方图 点算子
数字图像
因为一帧图像可以由像素矩阵组成,像素亮点是x,y轴
相交的亮度点。这些概念在该系列一
中已经描述的很清楚。
直方图
亮度直方图 : 表示每个亮度级在图像中的占有率
图像对比度: 是通过亮度级范围来度量的
回想一下,在系列一
中我们看到了8位(bit)
的图片,亮度级别是0~255
, 数值越小颜色越暗。
![](https://img.haomeiwen.com/i3094344/300f1041b5d1b2d3.png)
上图记住x轴
和y轴
分别代表的含义 因此我们可以判断这张图白色太多,也就是太亮了。比较好的做法是使得整个分布较为平均,下面有很多图片例子
直方图应用较多的一个场景是摄影师看曝光度,对比度。
我们来看记下来一些列图片,感受一下
数码相机内的展示(该图对比度很均匀所以图片看起来亮暗合适,但亮色很多,因为白色桌子)
![](https://img.haomeiwen.com/i3094344/b0af0862b9b21ca7.jpg)
此图说明x轴
代表亮度0(黑)~255
![](https://img.haomeiwen.com/i3094344/ffb9fc108e738c77.jpg)
看一下彩色图片,不同颜色(红、绿、蓝、黄、白)
这些颜色分别直方图
![](https://img.haomeiwen.com/i3094344/407f850fad819649.jpg)
这幅图曝光太高并且浅色太多
![](https://img.haomeiwen.com/i3094344/044dadd925b7675c.jpg)
这幅图与上方图片刚好相反(看起来像是经过ps处理过对比度的图)
![](https://img.haomeiwen.com/i3094344/a550b4b13279326b.jpg)
应用
说了这么多,直方图到底有什么用呢? 可以让图像变清晰。不信就看下面2张图
原图
![](https://img.haomeiwen.com/i3094344/1aec29ab828dc508.jpg)
经过处理后的图片
![](https://img.haomeiwen.com/i3094344/78dbc7a088303f77.jpg)
该图片未处理时,会使得灰度过多,像素集中在照片中间。这个时候如果能把整个像素拉伸,使得白色和黑色部分靠谱多一些,照片就会变得清晰起来。
直方图计算
直方图的原理我们知道了“x轴是0~255亮度级,y轴代表该亮度的像素个数
” 编程中,通过histogram算子即可得到。非常的简单,返回的是个二维数组。
点算子
图像处理中最基本的运算就是点运算。顾名思义就是针对每个像素点进行计算。比如我想让图片变亮及拉伸对比度,则让每个像素与一个标量,例如标量为2
相乘,使得亮度级扩大一倍。相反的,我们就可以相除。例如我们把第一张眼睛图片变量
![](https://img.haomeiwen.com/i3094344/ec03661aef357eb7.png)
点算子 可以进行加法和乘法操作来增强亮度 如下图
![](https://img.haomeiwen.com/i3094344/4f4780879687966e.png)
锯齿算子
锯齿(sawtooth)算子
是另一种形式的线性算子。锯齿算子是用来增强图片的局部亮度和对比度(因为我们有时候是对照片的局部某个部分亮度对比度不满意)
看眼睛图,用锯齿算子处理后的结果
![](https://img.haomeiwen.com/i3094344/00d4b16e54ab6699.png)
算子有很多种 下面可以看图
![](https://img.haomeiwen.com/i3094344/93821e6ae147f42b.png)
直方图正规化 (专业领域最常用)
就像本文最开始说的,直方图具有的意义是适当处理可以让图像变得更加清晰。我们还记得当时的直方图样子吗,我再发一次
![](https://img.haomeiwen.com/i3094344/300f1041b5d1b2d3.png)
我们使用正规化进行拓展和位移,使得直方图的亮度级可以覆盖256个亮级。另外直方图正规化是线性变化,因此处理后的图片可以恢复到原图。
![](https://img.haomeiwen.com/i3094344/c924242ac44e84db.png)
眼睛清晰了!
但是要记住1,直方图均衡化非线性处理,图片无法还原
但是要记住2,直方图均衡化非线性处理,图片无法还原
但是要记住3,直方图均衡化非线性处理,图片无法还原
25
阈值处理
阈值(thresholding)处理
简单说,亮度范围是0~255,在这里面我取任意一个数,比如127
当图像中的像素值>=127
时设置成255
,相反当像素值<=127
时设置为0
。 在当前矩阵中只存在 0
和255
的值。也就是图片只存在黑白。就像熊猫看到的世界一样。这样做的好处是,适当的取值,可以把我们感兴趣点分离出来。如下面图
![](https://img.haomeiwen.com/i3094344/fd25bb1cb7cda8ae.png)
通常很多时候我们使用Otsu 最受欢迎最优阈值处理方法。它可以选取最恰当阈值。
opencv
上有提供现成算法thresholding
![](https://img.haomeiwen.com/i3094344/0dde58ed5d3e56b7.png)
![](https://img.haomeiwen.com/i3094344/7ee45f4f68c622dc.png)
到目前为止,我们关注的都是全局方法。即对整帧图片继续处理。还有一些局部自适应方法,常常在字符识别前的文件图像二值化。