【计算机视觉:算法和应用】第三章:图像处理——3.1点处理

原书PDF链接:

Computer Vision: Algorithms and Applications, 2nd ed.

第二章:图像形成

2.1 几何图元与变换

【计算机视觉:算法和应用】第二章:图像形成——2.1 几何图元与变换_Lu.马夋的博客-CSDN博客

2.2 相机辐射成像

【计算机视觉:算法和应用】第二章:图像形成——2.2相机辐射成像-CSDN博客

2.3 数码相机

【计算机视觉:算法和应用】第二章:图像形成——2.3数码相机-CSDN博客

  前言

       既然我们已经知道了图像是如何通过三维场景要素,光和相机光学和传感器的交互而形成的,那么就让我们来看看在大多数计算机视觉算法中的第一阶段,也就是使用图像处理对图像进行预处理并将其转换为适合进行后续分析的形式。这种操作的例子包括曝光矫正和色彩平衡,减少图像噪声,增加锐度,或通过旋转图像矫正图像。其他例子包括图像扭曲和图像融合,通常用于视觉效果(图3.1和3.6.3节)。虽然有些人可能认为图像处理超出了计算机视觉的范畴,但是大多数的计算机视觉应用,例如计算摄影以及识别,都需要仔细设计图像处理阶段来获得可接受的结果。

       在这一节中,我们回顾了标准图像处理操作(将像素值从一幅图像映射到另一幅图像中)。图像处理通常在电气工程系作为信号处理入门课程的后续课程来教授。

       我们首先以最简单的图像变换来开始这一节,即那些操作独立于其邻域的每一个像素的算法(3.1节)。这种变换通常称为点操作或点处理。接下来,我们研究了邻域(基于区域)的操作,其中每一个新的像素值去取决于少数邻域的输入值(3.2和3.3节)。用于分析(有时加速)这种邻域操作的简单工具是傅里叶变换,我们将在3.4节体积。可以通过对邻域操作进行级联来形成图像金字塔和小波,这对于在各种分辨率(尺度)的图像分析和加入某些操作来说是很有用的(3.5节)。另一种重要的全局操作是几何变换,例如旋转,裁剪和视角变形(3.6节)。

       这章涵盖了大多数由线性和非线性滤波操作组成的经典图像处理技术,而后两章介绍了基于能量和贝叶斯的图模型,即马尔可夫场(第四章),以及深度卷积网络(第五章),这两者现在在图像处理应用当中应用十分广泛。

3.1点操作

       最简单的图像处理变换是点操作,其每一个输出的像素值仅仅取决于对应的输入的像素的值(另外,可能地,一些全局收集的信息或参数)。这种操作的例子包括亮度和对比度调整(图3.2)以及色彩修正和变换。在图像处理术语中,这种操作也称之为点处理。

       我们以对简单点操作的回顾开始这一节,例如亮度缩放和图像相加。然后,我们讨论图像中的颜色如何操作。然后我们展示图像合成和抠图操作,这在计算摄影学(第十章)和计算机图形学应用中十分重要。最后,我们描述了更加全局的处理直方图均衡化。我们以一个示例应用程序结束,该应用程序操作色调值(曝光和对比度)以改善图像外观。

3.1.1 像素变换

       一种普遍的图像处理操作是接受一幅和多幅输入图像并生成一幅输出图像的函数。在连续域,可以表示为

其中x在输入和输出函数f和g的D维域中(通常图像的D=2),其在一定的范围内操作,可以是标量也可以是向量值,例如,彩色图像或二维运动。对离散(采样)图像来说,域由有限的像素位置x=(i,j)组成,我们可以写出

图3.3展示了一幅图像如何用其颜色(表面),作为由数字组成的网络或作为二维函数进行表示的。

       两种常用的点处理是乘以或加上一个常数,

参数a>0,b通常称为增益和偏置参数;有时这些参数被认为分别控制了对比度和亮度(图3.2b-c)。偏置和增益参数也可以是空间变化的,

例如,当模拟摄影师用来选择性地变暗天空的分级密度滤镜时,或在光学系统中建模晕影时。

       乘法增益(包括全局和空间变化)是一个线性操作,因为其遵循叠加原理,

(我们将在3.2节中讲解更多关于线性位移不变操作的知识。)例如图像平方(通常用于在带通滤波信号中获取能量的局部估计)的算子不是线性的。

       另一种常用的二进(双输入)算子是线性混合算子,

通过将α从0到1变化,这个算子能够在两幅图像或两个视频之间进行时间交叉溶解,正如在幻灯片放映和电影制作中所看到的,或作为图像变形算法的一个组成部分(3.6.3节)。

       一种在图像进行后续处理之前应用于图像的常用的非线性变换是伽马修正,用来消除输入辐射和量化像素值之间的非线性映射(2.3.2节)。为了转换传感器使用的伽马映射,我们可以使用

其中γ值约等于2.2,合理地适应大多数数码相机。

3.1.2颜色变换

       虽然彩色图像能够被当作随机向量值函数或独立波段的集合,但通常认为他们是高度相关的信号,与图像形成过程(2.2节),传感器设计(2.3节)和人类感知(2.3.2节)有强烈的联系。例如,考虑向所有三个通道添加一个常量来照亮图像,如图3.2b所示。你能知道这是否达到了使图像看起来更亮的预期效果吗?你能看到任何不良的副作用或伪影吗?

       事实上,对每一个颜色通道增加相同的值不仅仅能够增加每一个像素的强度,也会影响像素的色调和饱和度。我们如何定义并操作这些量来获得期望的感知效果呢?

       正如2.3.2节中讨论的,色度坐标(2.105)或更简单的色彩比率(2.117)可以首先计算,然后在调整(如提亮)了亮度Y之后用于重新计算一幅有相同色调和饱和度的合理的RGB图像。图2.33f-h展示了一些色彩比率图像乘以中间灰度值,以获得更好的视觉效果。

       相同的,色彩平衡(例如,补偿白炽灯的照明)能够通过对每个通道乘以不同的缩放因子或通过更负责的处理(映射到XYZ色彩空间,改变标称百点,然后映射回RGB)来实现,能够用一个3×3的线性色彩扭曲变换矩阵写出。练习2.8和3.1让你自己探索相关的问题。

       另一个有趣的程序是(最好在你掌握了本章剩余的内容后再尝试),拍摄一张彩虹的照片,然后增强彩虹的强度(练习3.29)。

3.1.3合成和抠图

       在许多照片编辑和视觉效果应用中,通常希望从一个场景中裁剪出前景对象然后把它放置在一个不同的背景上(图3.4)。将对象从原始图像中提取出来的处理通常称为抠图,而将它插入到另一个图像(没有视觉伪影)的处理称之为合成。

       在这两个阶段之间用于前景对象的中间表示称之为阿尔法-抠图彩色图像(图3.4b-c)。除了三个颜色RGB通道,一个alpha-matted 图像包含了第四个阿尔法通道α(或A),描述了每个像素的相对不透明度或部分覆盖量(图3.4c和3.5b)。不透明度相对于透明度。对象内的像素是完全不透明的(α=1),而对象外的像素是完全透明的(α=0)。对象边缘的像素在这两种极端之间平滑地变化,它隐藏了当只使用二元不透明度时发生的感知可见抖动。

      为了在旧(背景)图像上合成一个新(或前景)图像,使用覆盖算子(首先由Porter等提出,然后被Blinn广泛研究)

这个算子利用一个因子(1-α)减弱了背景图像B地影响,并添加了与前景层F相对应的颜色(和不透明度)值,如图3.5所示。

       在许多情况下,使用预乘的方式表示前景颜色更加简便,即直接储存(和操作)αF值。如Blinn展示的,预乘的RGBA表示更受欢迎,有以下一些原因:模糊或重新采样(例如,旋转)alpha-matted图像的能力,而没有任何额外的困难(只是独立处理每个RGBA波段)。然而,当用局部色彩一致性抠图时,使用的是未乘α的前景颜色F,因为其在物体边缘附近保持恒定(或缓慢变化)。覆盖算子不是仅有的一种能够使用的合成算子。Porter等描述了一些额外的算子,在照片编辑和视觉效果应用中十分有用。在本书中,我们只关注另外一个常见的情况(但请参见练习3.3)。

        当光从干净透明的玻璃上反射,穿过玻璃的光和反射的光被简单地相加起来(图3.6)。这个模型在分析透明运动(当从一个移动相机观察类似的场景时发生)时很有用(见9.4.2节)。

       抠图的实际过程,即从一张或多张图像恢复前景,背景和alpha matte值,有一段丰富的历史,我们在10.4节进行研究。Smith等对传统蓝屏抠图技术进行了深入研究,Toyama等回顾了不同的抠图。在那之后,在有关自然图像抠图计算摄影学领域中有许多活动,尝试从一张自然图像或拓展的视频序列中提取图像。所有这些技术将在10.4节详细介绍。

3.1.4直方图均衡

       3.1.1节中描述的亮度和增益控制能够改善图像的外观,但我们如何自动地决定他们的最佳值呢?一种方法可能是观察图中最暗和最亮的像素值,并把他们映射到纯黑和纯白。另一种方法时找到图中的平均值,使它向中间灰度靠拢,并拓展其范围使其更接近填充显示值。

       我们如何对图像中的亮度值进行可视化来测试这些启发式方法呢?答案是绘制出单个颜色通道和亮度值的直方图,如图3.7b所示。从这个分布中我们能够计算相关的统计量,如最小值,最大值和平均强度值。注意到图3.7a中的图像暗值和亮值都超过了,但是中间范围的值较少。虽然仍然使用可用动态范围的完整范围,但如果我们能同时让一些暗值变量,让一些亮值变暗不是更好吗?

       对于这个问题,一个流行的答案时进行直方图均衡,即找到一个强度映射函数f(I),使得得到的直方图平整。找到这样一个映射的窍门和人们用来从概率密度函数中生成随机样本的窍门是一样的,首先计算累计分布函数,如图3.7c所示。

       将原始的直方图h(I)考虑未课堂上在考试后的成绩分布。我们如何将一个特定的分数映射到对应的百分数,使得75%的学生得分高于3/4的同学呢?答案是累加分布h(I)来获得累加分布c(I),

其中N时图像中的像素的个数或者班上同学的数量。对于任意给定的分数或强度,我们可以茶渣对应的百分数c(I)并决定像素最终的取值。当对八比特像素值操作时,I和c轴缩放至[0,255]。

       图3.7e展示了对原始图像应用f(I)=c(I)的结果。正如我们所看到的,得到的直方图时平整的;得到的图像也是平整的(它是“平坦的”,因为它缺乏对比度,看起来是泥泞的)。一种补偿的方式是仅仅部分补偿 直方图不均匀的地方,例如,使用一个映射函数f(I)=αc(I)+(1-α)I,是累积分布函数和强度变换(一条直线)的线性混合。正如你在图3.7f中看到的,得到的图像保留了其大多数的原始灰度分布且有更好的平衡。

       直方图均衡(或更普遍的,图像提亮)另一种潜在的问题是,暗区域的噪声可以被修改,从而能够被看见。练习3.7提出了一些缓解这个问题可能的方法,以及一些其他的技术来保留原始图像中的对比度和“punch”。

局部自适应直方图均衡

       全局直方图均衡是有用的,对于某些图像来说,偏向于在不同的区域应用不同的均衡。考虑例如图3.8a中的图像,其亮度值范围很广。如果我们将图像细分为M×M像素块,并在每个子块中执行单独的直方图均衡,而不是计算一条曲线呢?正如你在图3.8b中看到的,得到的图像展示出许多块伪影,即在块边界上强度不连续。

一种消除块伪影的方法是使用一个滑动窗口,即重新计算以每个像素为中心的每一个M×M块的直方图。这种处理方式会特别慢(每个像素M²次操作),虽然使用巧妙的编程,只需要更新与输入和离开块的像素对应的直方图条目(在整个图像的栅格扫描中)需要更新(每像素M个操作)。注意到这个操作是我们在3.3.1节中更加详细研究的非线性领域操作的一个例子。

       一个更加有效的方法是像以前一样计算非覆盖基于块的均衡函数,但是接下来当我们在块之间移动的时候对传递函数进行平滑插值。这个技术称之为自适应直方图均衡(AHE),其对比度限制(增益限制)的版本称为CLAHE。给定像素(i,j)的权重函数能够作为在块中其水平和垂直位置(s,t)的函数进行计算,如图3.9a所示。要混合四个查询函数{f00,...,f11},一个双线性混合函数为,

 (见3.5.2节获取这种样条函数的高阶泛化。)注意到我们不是混合每一个输出像素的四个查找表(那将会很慢),而是混合通过四个邻域查找表映射给定像素的结果。

       这种算法的一个变体是将查找表放置在每个M×M块的交点上(见图3.9b和练习3.8)。除了混合四个查找表来计算最终的值,我们也可以在直方图累加阶段将每一个输入像素分布到四个相邻的查找表中(注意到图3.9b中的灰色箭头同时指向了两个方向),即,

其中w(i,j,k,l)是像素(i,j)和查找表(k,l)之间的双线性权重函数。这是软直方图的一个例子,在各种其他应用中会用到,包括SIFT特征描述符构建(7.1.3节)和词汇树(7.1.4节)。

3.1.5应用:色调调整

       图像点处理操作符最广泛的应用之一是修改照片中的对比度或色调,是它们看起来更加引人注目或可解释。通过打开任何照片操作工具,并尝试各种对比度、亮度和颜色操作选项,您可以很好地了解操作范围,如图3.2和3.7所示。

       练习3.1,3.6和3.7需要你矢线这些操作,来熟悉基本的图像处理操作符。色调调整更复杂的技术在高动态范围色调映射中描述(10.2.1节)。

【持续更新,仅供学习参考。部分专业术语可能翻译有误,欢迎大家批评指正】

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lu.马夋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值