数字图像处理复习(二)
(学习笔记,不属个人作品)
空域图像增强
1. 背景知识
-
主要目标:通过对图像的处理,使图像处理更适合一个特定的应用。
-
常见处理:去除噪声、边缘增强、提高对比度、增加亮度、改善颜色效果、改善细微层次等——通常与改善视觉效果相一致
-
分类:空域图像增强分为点处理和邻域处理。
其中:点处理有 灰度级变换、直方图处理、算术运算 。 领域处理有 空域滤波。
2. 直方图(*)
- 概念
- 直方图 : 对于每个灰度值、求出在图像中具有该灰度值的像素数或概率。横轴代表灰度值,纵轴代表像素数(或者概率)
式中,表示第k个灰度级,表示灰度值为k的像素在图像中出现的频数,L表示灰度级数。
- 概率直方图
式中,n为图像中的像素总数。实际上表示灰度级的概率分布率。
- 累计概率直方图
式中,表示灰度值落在区间 内的像素在图像中出现的总概率。
-
重要性质
- 只能反映该图像中不同灰度值出现的频数,不能表示出像素的空间位置等其他信息
- 不同图像可能具有同样的直方图,图像与直方图之间是多对一的映射关系
- 可叠加性:若将图像分为区,则每个区都可分别作直方图,而原图像的总直方图为各区直方图之和
- 直方图是总体灰度的概念
-
重要应用
- 图像的视觉效果与其直方图之间存在对应关系,改变直方图的形状对图像产生对应的影响。
- 利用直方图可在图像分割中确定合适的阈值,并能够根据直方图对区域进行像素数统计。
- imhist(I)
返回I图像的灰度直方图
imhist(I,n) 计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。
imhist(X,map) 计算和显示索引图像x的直方图,map为调色板。
[counts,x] = imhist(…) 返回直方图响应灰度级数量counts或灰度级数x。
3. 灰度级变换
灰度级变换将各像素灰度,都按同一函数进行变换,这种变换与像素的坐标无关,只与灰度级有关。
常见变换 对数、指数、幂次变换、灰度反转、阈值增强函数曲线。
由图可知
-
对数变换的可以压缩图像中较亮区域的动态范围。减小了最大值与最小值之间的反差值
-
与之类似的是幂次变换:
- 当 幂数<1 时,拉伸直方图灰度级暗端的动态范围,压缩灰度级亮端的动态范围;增强图像中暗区域的对比度,降低亮区域的对比度;图像整体变亮
- 当 幂数>1 时,拉伸直方图灰度级亮端的动态范围,压缩灰度级暗端的动态范围;增强图像中亮区域的对比度,降低暗区域的对比度;整体变暗
-
灰度反转是对图像求反,作用是突出在大片黑色区域中的白色或灰色细节。
-
指数变换,在对数域中将乘法运算转换为加法运算,这样能够利用线性滤波进行图像处理,最后再使用指数变换对图像进行反变
4. 直方图处理
通过对灰度直方图变换是有效实施图像增强的一种方法,具体有:
- 直方图均衡化、 直方图规定化
- 直方图均衡化的目的:是将直方图的灰度级概率分布变换为均匀分布。
这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。
直方图均衡化函数使用
J = histeq(I,n) % I为输入的原图像,J为直方图均衡化后得到的图像,n为指定直方图均衡化后的灰度级数(若n为向量,且长度小于等于I的灰度级数,则此时为直方图规定化映射,映射灰度区间为n),默认值为64 |
- 灰度变换的寻找
寻找一个灰度级变换 , 使变换后图像的直方图服从均匀分布。
实现:计算灰度级r的概率密度函数的累积分布函数,就是所要找的灰度级变换 s = T® 。
- 灰度直方图均衡化计算步骤
步骤1:计算输入图像灰度级的概率分布率,统计各灰度级的像素出现的概率为 ;
步骤2:计算输入图像灰度级的累积概率分布率:
步骤3:确定输入与输出灰度级之间的映射关系,将输入图像中灰度级为的像素映射到输出图像中灰度级为的对应像素;
步骤4:统计输出图像各灰度级的像素数,并计算输出图像灰度级的概率分布率。
练习
均衡化过程注意:
- 在灰度级为离散形式下,灰度级映射后的灰度值一般并非落在量化的灰度级上,而是将灰度值近似为最接近的量化灰度级。
- 在近似过程中可能会造成将多个不同的值近似到相同的灰度级。
- 像素重新分配时,只能把同一灰度级的像素成组移动,同一组的像素不允许拆分为多个灰度级,不同组的像素可以合并成一种新的灰度级。
- 通常新直方图分布比原直方图分布疏散,的级数比少。
5. 算术运算
图像相加
主要应用:
- 对同一场景的多幅序列图像求取平均值,降低加性随机噪声;
- 将一幅图像叠加到另一幅图像上,实现二次曝光效果。
举例:
- 通过对多个不同背景的同一字幕视频帧进行相加,可以显著削弱背景的影响
图像相减(*)
-
主要运用:
- 显示两幅图像的差异,检测同一场景两幅图像之间的变化,如:视频中镜头边界的检测
- 图像分割:如分割运动的车辆,减法去掉静止部分,剩余的是运动像素和噪声(背景减除法)
-
运算过程中遇到负数灰度值的处理方法:
减法运算可能产生负值,设显示系统要求像素值为无符号整型,在显示之前需要将差值进行重新标度,用数学公式可表达为
式中 round{*} 表示四舍五入符号,表示重新标度的差值图像。通用的显示设备使用8位无符号整型256个灰度级显示图像,在这种情况下为255。
举例:
6. 空域滤波
- 概念:
- 是一种邻域处理方法,通过直接在图像空间中对领域内像素进行处理。
- 作用域:
- 像素及其领域
- 目的:
- 实现图像平滑与锐化。
- 空滤模板:即空域滤波器,在使用滤波模板与图像的空域卷积来实现的滤波中也叫卷积模板。
卷积示意图:
空域滤波器分类
线性滤波输出信号是输入信号的线性表达,而非线性滤波输出信号的表达式则是非线性的。
判断一个函数(滤波器)线性非线性的最重要的手段就是,如下的等式是否成立:
比如中值滤波、最小。最大滤波器是非线性的,均值滤波是线性的。
图像平滑
-
主要作用:
- 模糊
- 对大图像处理前,删去无用的细节
- 连接中断的线段和曲线
- 平滑化处理,恢复过分锐化的图像
- 图像创艺(阴影、软边、朦胧效果)
- 降低噪声
- 模糊
-
分类
- 主要分为线性平滑滤波和统计排序平滑滤波(又为非线性平滑滤波)
特征:权系数全为正值,且系数之和等于1,不会增加总体灰度程度。
- 最简单的线性平滑滤波模板是均值平滑滤波模板
- 其次更有效的平滑模板——加权平均模板
- 指模板不同位置对应的像素具有不同的权系数,
- 中间权系数大,周围权系数小,
- 最常用的是高斯平滑模板
- 空域线性平滑滤波的问题:若图像处理的目的是去除噪声,则低通滤波在去除噪声的同时也平滑化了边缘和细节。
统计排序平滑滤波:
将模板对应的邻域内像素的灰度值进行排序,将统计排序结果作为模板中心对应像素的输出值。
- 最常见的是中值滤波
- 特点
- 在去除噪声的同时,可以比较好地保留边缘的锐度和图像的细节。
- 能够有效去除脉冲噪声(椒盐噪声)。
- 特点
- 最大值滤波、最小值滤波
中值滤波和均值滤波对椒盐噪声的平滑滤波比较,中值滤波更好
原因:椒盐噪声点是图像中为奇异,孤立的像素点,在灰度值上常表现为很大或者很小。所以在中值滤波处理时,更易将这些孤立点排除,中值滤波则会将该灰度计入最终结果,相比而言会对图像造成一定的影响。
- 模板尺寸对滤波器效果的影响:模板尺寸越大,图像越模糊,图像细节丢失越多
- 空域线性平滑滤波的问题:若图像处理的目的是去除噪声,则低通滤波在去除噪声的同时也平滑化了边缘和细节。
图像锐化(*)
主要作用
- 增强图像中的边缘和细节, 如边缘增强
- 减弱或清除灰度变化缓慢的区域,如边缘检测
差分
用差分近似于偏导数
- why:差分算子的响应程度与图像在该点灰度值的突变程度有关,图像锐化使用差分算子
对于一维离散函数,一阶导数用一阶差分近似为
特点
- 一阶差分特点: 一阶差分在边缘处有一个强的响应,形成一个峰。
同样二阶导数用二阶差分近似:
- 二阶差分特点:在二阶差分中边缘的表现是过零点,在过零点两侧,分别形成一个峰和一个谷,这就是二阶差分算子的双响应
- 原函数中的坡在一阶差分后形成强响应(波峰或者波谷),而波峰或者波谷在一阶差分后形成双响应。
- 二阶差分是一阶差分基础上再次差分。
分别用途:
- 一阶差分:利用图像梯度突出边缘和细节,主要用于图像的边缘检测。
- 二阶差分:线性算子,通过线性算子提取的边缘和细节叠加在原图像上,主要用于图像的边缘增强。
举例差分模板
-
Roberts算子(一阶差分算子)
对角线方向的梯度算子:
- Prewitt 算子
水平方向
垂直方向:
对角线方向:
-
Soble(边缘检测) - 一阶差分算子
Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声
一维一阶差分算子变换到二维,要分两个方向对其计算梯度。
x方向:
y方向:
从而我们的soble算子为
Sobel模板中的系数之和为0,表明灰度恒定区域的响应为0。
-
拉普拉斯算子(边缘增强) - 二阶差分算子
一维的一阶差分变换到二维的二阶差分
- 所以得到的算子为
整体系数之和为0,在灰度变化平坦区域不响应。
- 作用
Laplacian算子是一个用于检测边缘的二阶微分算子。在Laplacian结果中,边缘并不处于最大值处,而是处于最大正值和最小负值之间的零值处,称为过零点、零交叉(Zero Crossing)。
-
拉普拉斯算子的分析
- 缺点
对噪声的敏感;会产生双边效果;不能检测出边的方向。
- 应用
利用二阶导数零交叉,确定边的位置。
检测一个像素是在边的亮的一边还是暗的一边;(由拉普拉斯的二阶微分函数可知,负数为亮,正数为暗)
拉普拉斯算子不直接用于边的检测,通常只起辅助的角色。
边缘检测函数 edge
BW = edge(I) |