第三章 图像处理
上一章图像形成,介绍了如何通过3D场景元素、光照、摄像机光学和传感器的交互作用来形成图像。
这一章介绍计算机视觉应用中的第一步,使用图像处理方法对图像进行预处理,比如:曝光校正、彩色平衡、图像噪声减少、图像锐化、通过旋转校正图像。内容包括下面这些:
点运算(3.1):最简单的图像变换,对每个像素的操作不依赖它的领域像素。
基于区域的领域算子(3.2,3.3):每个像素的输出值依赖于其领域像素。
傅立叶变换(3.4):分析算子的一个工具。
图像金字塔、小波(3.5):由领域算子级联形成,可以在不同分辨率(尺度)下对图像进行分析和对算子进行加速。
几何变换(3.6):一种重要的全局算子,如旋转、切变、透视形变。
全局优化算法(3.7):贝叶斯马尔科夫随机场模型进行最优估计。
3.1 点算子 Point operators
图像中每个像素的输出值取决于其输入值,比如亮度和对比度的调整、彩色的校正和变换。
3.1.1 像素变换 Pixel transforms
简单来说是一个函数,输入为一个或多个图像,输出为一个图像。下面是一个常用的点算子
a为增益参数,b为偏差参数。分别控制对比度和亮度,这个很好理解,a是对图像中各个像素进行变换,b是对整体的。高级一点的形式,这两个参数可以随着位置不同而变换。
上面是输入一个图像,进行处理,输入两个图像的看这个:
其中这个 阿尔法 变换范围是0~1,可以实现两个图的淡入淡出。
这个算法还有一个用途是在图像预处理阶段进行伽马校正(2.3.2),这玩意不懂。
3.1.2 彩色变换
彩色的变换比上面讲的复杂一些,直接对彩色的各个通道增加同一个值,不仅会增加亮度,还会影响像素的色调和饱和度。所以,需要通过转换成色度坐标(2.3.2),操作亮度Y,然后转换回来。类似的还有色彩平衡,不甚了解。
3.1.3 合成与抠图
这一小节讲的是把一张图中的一部分抠出来,放到另外一张图中,所以分两个步骤:抠图、合成。
所以,在RGB三个彩色通道的基础上,引入一个新的通道:阿尔法 A,描述不透明度。(会点PS的都知道)
回归到3.1开始讲的,其实两个图像合成,也是点算子的一种,与周边像素无关。那么合成方法是使用覆盖算子
B和F两个图像,用 阿尔法 来确定各自透明的比重。两者加起来为1,是一种简单的合成方法。
但是,不适用于另外一种情况,比如光线在透明玻璃上的反射,这时将穿过玻璃的光线和反射光线简单相加。这叫做透明运动分析(transparent motion),出现在运动的照相机观察场景的情况下。
计算机摄影学中许多工作与自然图像的抠图有关,从单一自然图像或视频序列中抽取遮罩。
3.1.4 直方图均衡化
前面讲到,点算子用于对图像的对比度和亮度进行调整,那么如果调整呢?
一般来说,图像中各个像素的色彩累积起来有一个分布,让这个分布更加均衡就是调整的目标。均衡的方法:一种是寻找最亮和最暗像素值,将它们映射到纯白和纯黑;另一种是寻找像素值的平均值作为中间灰度值。(不太理解)
这就用到了各个彩色通道的直方图和亮度直方图,用到其中的一些统计量,如最大值、最小值以及平均亮度值。
处理的方法如下:
其中,h(I)为原始的直方图,I为某个像素值(0~255),N为图像中的像素数目,c(I)为累积分布函数。
这里有一个问题,具体到每个位置的像素点,应该如何操作?书中并未明确说明,后面深究。
为了增加一些对比度,将累积分布函数和恒等变换(一条直线)进行线性混合。
数学上面很好理解,物理现实中,感觉像是用某一权重对原有累积分布函数进行削弱?
直方图均衡化的一个潜在问题位于暗区域的噪声可能会变大,变得可见。
局部自适应直方图均衡化
当然,有些情况下(我理解是图像本身对比度比较大,均衡化一抹,也许会坏事),对整体均衡可能不是最好的方法,对图像中不同区域采用不同的均衡化方法可能更好。
将图像直接分区块,每个区块用上面方法,那么区块的边界处亮度不连续,产生人为的区块效应。
解决方法有两种:
1、自适应直方图均衡化:就是先分区块进行均衡化,然后对块与块之间的转换函数进行平滑差值。确定具体像素值时,根据距离设置周围区块对它的影响(权重)。
2、通过角点出设置查找表(不明白)
还有相位累积直方图:
(双线性权重函数,软直方图,孤陋寡闻了。。。)
3.1.5 应用:色调调整
点算子应用于对照片的对比度或色调的操作,很多图片处理软件都有,比如PS的色阶、色调、饱和度等等。