机器视觉学习笔记(五)-- 图像增强

        尽管我们尽力来选择最佳的硬件配置,但是有时图像还是不够好,本节我们将介绍几种通用的图像增强技术。

3.2.1  灰度值变换

        除控制照明光源外,某些情况下通过算法调整图像的灰度值是必要的。调整图像灰度值的一个原因是由于图像对比度太弱,通过对照明光源的调整,这个问题通常只会局部发生,所以,我们也许只需增强局部的对比度。调整灰度值的另一个原因是图像的对比度或亮度同系统设定时已经发生了变化。比如在工作一段时间后由于光源的老化而造成图像对比度变弱。

        灰度变换可被视为一种点处理。这意味着变换后的灰度值t_{r,c}仅仅依赖于输入图像上同一位置的原始灰度值g_{r,c}:t_{r,c} = f(g_{r,c})。这里,f(g)是表示进行灰度值变换的函数。注意该函数的值域范围是离散的。为了提高变换的速度,灰度值变换通常通过查找表(LUT)来进行,即将每个汇入灰度值变换后得到的输出值保存在这个查找表内。

        最重要的灰度值变换是灰度值线性比例缩放:f(g)=ag+b。若g\in \mathbb{G}_{b},我们需要保证输出的灰度值也在该范围内。所以,我们需要按下式对输出灰度值进行裁剪和四舍五入处理:

f(g)=min(max([ag+b+0.5],0),2^b-1)

        当|a|>1时,对比度增加,当|a|<1时,对比度则降低。当a<0时灰度值反转,b>0时,亮度值增加,b<0时亮度值降低。

        线性灰度值变换的参数必须根据不同的应用以及不同的照明进行合理的选择。由于选择合适的参数是相当麻烦的,我们希望能又一种可基于当前图像情况自动确定a和b的方法。

        一种显而易见的方法使通过设置参数让变换后的图像灰度值覆盖\mathbb{G}_{b}的最大取值范围。可按照如下方法进行操作:用g_{min}g_{max}分别保存当前ROI图像中的最小灰度值和最大灰度值。然后,当a=(2^b-1)/(g_{max}-g_{min})b=-ag_{min}时转换后的输出灰度值可以覆盖\mathbb{G}_{b}的最大的取值范围。这种变换可以被理解为灰度值的归一化处理。

        如果图像中存在一个非常亮或非常暗的像素值,通过上述的灰度值归一化就无法得到想要的灰度值范围,想要得到鲁棒的灰度值归一化处理方法,我们只要忽略直方图中所包含的一小部分最暗的灰度值以及一小部分最亮的灰度值即可。鲁棒的灰度归一化处理是一种非常有效的方法,例如,在光学字符识别中进行特征提取时,采用本方法可以使OCR特征提取不受照明变化的影响。但是,它需要对图像的灰度值进行变换,这需要大量的计算。如果要使一个算法在光照变换下更加鲁棒,通常更可行的方法是通过调整该算法的参数以适应光照变化,如在3.1.4节中介绍的图像分割方法。

3.2.2  辐射标定

        很多图像处理算法时间里在传感器收集的能量和图像灰度值之间存在线性相应这一事实基础上的:G=aE+b,式中E是传感器累积到的能量,G是图像上的灰度值。理想情况下,b=0,这意味着传感器上两倍的能量会得到两倍的图像灰度值。但是,b=0对测量的准确度不是必须的,只需要响应是线性的就可以了。如果是非线性的响应,一些算法结果的准确度将会降级,例如,亚像素精度阈值分割,灰度值特征提取,尤其对亚像素精度边缘提取影响最为显著。

        然而,有时灰度值响应就是非线性的,也就是说,摄像机或者图像采集卡产生了对能量的非线性响应。在这种情况下,如果我们需要进行准确的测量就必须确定非线性响应并求其逆响应。如果对非线性响应的图像使用了逆响应,那么结果图像就是线性响应的。确定逆响应函数的过程就被称作辐射标定。

        在实验室配置中,传统的方法是采用经过标定的目标物(典型的标定目标物是灰阶卡)来进行辐射标定。因此,相应的算法被称作基于图标的标定算法,它测量不同梯度条的灰度值并将这些灰度值与这些梯度条已知的反射系数进行比较。这种比较将产生一系列的独立测量,通过这一组测量完成函数的拟合。

        这种方法存在一些问题。首先,它需要整个视野内有非常均匀的照明以便能够正确地检测出梯度条的灰度值。在实验室中这或许是可以实现的,但在生产现场环境下是必需进行此类标定的。此外,晕影效应可能导致表面光向边界分散,这也会妨碍我们提取正确的灰度值。这个问题在任何测试环境下都是存在的。另一个问题是标定板的格式没有被标准化,所以很难实现一个通用的算法来寻找标定板上的梯度条并检测它们和真实反射系数之间的响应关系。此外,密度标定板的反射比通常是为各种照相应用定制的,这意味着反射系数与密度是线性级数关系,密度与反射系数是对数相关的。例如,图3.4所示的标定板有一个线性密度级数,即一个对数灰度值级数。这就是说拟合曲线上的样本不是均匀分布的,这将导致拟合得到的结果在曲线上样本间距较大的部分存在较低的精度。最后,摄像机响应函数的值域受通过数据拟合得到的单一函数限制。

        因为上述这些原因,我们更需要不适用标定板的辐射标定算法。这类算法被称作“无图标辐射标定”。它们基于在不同曝光下对同一场景所拍摄的一系列图像来实现。不同的曝光既可以通过改变镜头的光圈也可以通过该边摄像机曝光时间来实现。因为改变光圈比使用不同长度的曝光时间精度低,且因为大部分工业摄像机可以通过软件来禁锢额地设定曝光时间的长度,所以设定不同长度的曝光时间以得到不同曝光条件下的一系列图像是我们的首选方法。本算法的好处是既不需要标定板,也不需要在视野内有均匀的照明。而且,所有可能的灰度值取值范围能够被多幅图像所覆盖,而使用标定板的标定算法仅能使用一幅图像所覆盖的灰度值范围。对图像内容的唯一要求就是在每幅图像的灰度直方图中,图像灰度值所覆盖的范围内不应存在空隙。而且,稍加努力,即使过度曝光的(即饱和的)图像也可以被处理。

        为推导出无图标定算法,让我们先看看使用不同的曝光拍摄的两幅图像都可以提供给我们哪些与响应函数有关的信息。我们知道图像中的灰度值G是传感器在曝光过程e中累计能量E的一个非线性函数r

G=r(eE)

        式中e与曝光时间成比例,也与镜头入射光孔的面积成比例,即与(1/F)^2成比例。此处的F是镜头的f数。如上所述,在工业应用中我们通常固定光圈而改变曝光时间。因此,可以将e看作曝光时间。

        辐射标定的目的是确定逆响应q=r^{-1}。通过一个查找表LUT,逆响应能够被应用到一幅图像上以实现输出图像灰度值与传感器累积的能量之间的线性响应。

        现在,假设我们用不同的曝光e_{1}e_{2}采集了两幅图像。故而,G_{1}=r(e_{1}E)G_{2}=r(e_{2}E)。通过对这两个等式应用逆响应q,得到q(G_{1})=e_{1}Eq(G_{2})=e_{2}E。将两个等式相除来消去未知能量E可以得到:
\frac{q(G_{1})}{q(G_{2})} = \frac{e_{1}}{e_{2}}=e_{1,2}

        可以看出,q仅依赖于图像的灰度值和曝光比值e_{1,2}而不依赖于e_{1}e_{2}的取值。上式是所有无图表辐射标定算法的定义式。

3.2.3  图像平滑

        每幅图像都包含某种程度的噪声。为了达成本章的叙述目标,我们将噪声看作是由多种原因造成的灰度值的随机变化,比如光子通量的随机性而产生的噪声。在大多数情况下,图像中的噪声必须通过图像平滑处理进行抑制。

        在更正规的方式下,噪声被视为一种平稳随机过程。这表示真正的像素值g_{r,c}被一噪声项n_{r,c}干扰后得到的灰度值:\hat{g_{r,c}} = g_{r,c}+n_{r,c}。我们可以视噪声n_{r,c}为一个针对每一像素的平均值为0且方差是\sigma ^2的随机变量。假定噪声的平均值是0是因为任何非0的平均值将构成一个系统偏置值,该系统偏置值会作用于每个获取到的像素值上,而这是我们无法检测的。“平稳”是指噪声与图像上像素的位置无关,也就是,对于图像上的每个像素,噪声都是同样地分布。特别是方差\sigma ^2被认为在整个图像上都是不变的。后一个假设,即方差不变,是为了方便起见而引入的一个抽象概念,所以不一定必须满足,因为噪声的方差有时是由图像上的灰度值来决定的。但是,我们将假设噪声总是“平稳”的(同样分布的)。

        通过以上的讨论,噪声抑制能被视为随机估计问题,也就是说,用实测到的包含噪声的像素值\hat{g_{r,c}}来估计像素值的真值g_{r,c}。一个最显而易见的降噪方法就是采集同一场景的多幅图像并对这些图像进行平均。由于多幅图像是在不同时间采集的,我们称此方法为时域平均或时域平均值。如果采集了n幅图像,时域平均值的计算方法如下:

g_{r,c}=\frac{1}{n}\sum_{i=1}^{n}\hat{g_{r,c;i}}

        上式中\hat{g_{r,c;i}}代表第i幅图像上位置(r,c)处的灰度值。本降噪方法在X光检测系统中应用广泛,因为通常X光系统中采集的图像会有较多的噪声。

        时域平均法的缺点之一就是必须采集多幅图像才能进行噪声抑制。在对速度要求很高的机器视觉应用中此方法就不那么有吸引力了。因此,在大多数情况下,需要其他的降噪方法。理想情况下,我们希望仅仅在一幅图像上就可以对灰度值真值进行估计。

        如果再看一下随机过程理论,我们就可以发现:如果某随机过程(即某图像)是遍历的,时域平均法就可以被空间平均法所取代。这是遍历性的定义,假设此时他对图像也是适用的。这样,空间平均或者空间平均值可以通过像素数是(2n + 1)*(2m + 1)的一个窗口(也称作掩码)按如下方法进行计算:

g_{r,c}=\frac{1}{(2n+1)(2m+1)}\sum_{i=-n}^{n}\sum_{j=-m}^{m}\hat{g_{r-i,c-j}}

        此空间平均操作也被称为均值滤波器。与时域平均法类似,采用了几次平均值测量,噪声的方差就降低到原来的几分之一,也就是降低到1/(2n+1)(2m+1)

        上面的等式忽略了图像在二维空间上是有限的这一事实。因此,如果掩码靠近图像的边界,掩码中就会有部分延伸到图像外而导致访问到未定义的灰度值。有几种办法可以解决这一问题。很简单的一个办法是只针对掩码能完全覆盖的图像内的像素进行滤波计算。这就意味着处理后的结果图像要比处理前的输入图像小,这样不便于对输入图像进行一系列的滤波处理。我们也可以将图像外的灰度值都定义为0。对于均值滤波器,这意味着再滤波后的结果图像上,像素越靠近图像边界越暗,这也是不能令人满意的。另一个方法是令图像边界以外的像素灰度值等于图像边界上最邻近的像素点的灰度值。此方法也会在结果图像的边界上产生原本不希望产生的边缘。因此,通常以图像边界为中心,令图像外某位置上未定义的灰度值等于图像内其镜像位置的灰度值,这样处理将对结果产生最小程度的人为干扰。

        如前所述,从单幅图像上降低噪声对于对速度有一定要求的机器视觉应用是更使用的,因此,我们来考察一下与均值滤波器相关的操作次数。基于前向等式进行均值滤波处理时,对图像中的每个像素需要进行(2n+1)(2m+1)次操作,即计算的复杂度为O(whmn),此处的w和h分别代表图像的宽度和高度。这个计算次数是相当可观的,所以我们应试图尽可能地降低运算次数。降低运算次数的一个办法是采用加法结合律,如下式:

g_{r,c}=\frac{1}{(2n+1)(2m+1)}\sum_{i=-n}^{n}(\sum_{j=-m}^{m}\hat{g_{r-i,c-j}})

        这种改进看起来微不足道,但如果我们仔细观察就可以发现,圆括号内包含的项仅需要计算一次且可以保存下来,比如保存到某一临时图像中。这意味着我们可以先计算输入图像在纵向上的和,并将此结果保存在一幅临时图像中,然后再计算临时图像的在纵向上的和。因此,前相等式中的复杂度O(nm)被复杂度O(n+m)所取代。整体计算的复杂度也相应地得以下降。

        上述变换是很重要的,只要一个滤波器在运算时允许分别在行和列上求和,那么此滤波器就被称为可分滤波器。可分滤波器的优点是显而易见的,并且通常是提升计算速度的最佳方法。但是在这里,我们还有更佳的方法。让我们查看纵向的和,也就是等式中圆括号内的部分,用t_{r,c}来表示纵向的和,就有:

t_{r,c}=\sum_{j=-m}^{m}\hat{g}_{r,c-j}=t_{r,c-1}+\hat{g}_{r,c+m}-\hat{g}_{r,c-m-1}

        即,在位置(r,c)处的和可以基于已经计算出来的位置(r,c-1)处的和以及两次加法得到。这个规则当然也适用于横向。应用这个规则,我们仅需要在第一行和第一行上计算完整的和,然后在这些结果上高效率地进行少量加法就可以得到需要的新的结果。这样,计算的总复杂度是O(wh)。注意此时掩码窗口的尺寸不影响滤波器的执行时间。同可分滤波器一样,这种重要的变换规则也有自己的名字。只要某滤波器在运算时能采用此种机制,即在前一个计算出的值的基础上计算出新的值,这种滤波器叫做递归滤波器。

        在上面的讨论中,我们把空间平均处理的过程称为均值滤波,但并没有说明此处的滤波一词是指说明此处的滤波一次是指什么。滤波指的是一个操作,此操作采用某个函数作为输入并产生某个函数作为输出。既然图像能被看作函数,所以,滤波可以将一幅图像变换成另一幅图像。

        均值滤波器是线性滤波器中的一个例子。线性滤波器的特点如下:应用一个滤波器到两幅输入图像的一个线性组合上所产生的结果,与对这两幅图像分别应用此滤波器后将结果按同一线性规则进行组合得到的结果完全一致。如果用h来表示此线性滤波器,用f和g表示这两幅图像,则有:

h\{af(p)+bg(p)\}=ah\{f(p)\}+bh\{g(p)\}

        式中p=(r,c)表示图像上的一个点,操作符{ }表示使用滤波器。线性滤波器可以通过卷积来计算。对于在连续域上的一维函数卷积操作如下:

f*h=(f*h)(x)=\int_{-\infty }^{\infty}f(t)h(x-t)dt

        这里,f表示图像函数,滤波器h由另一函数确定,此函数被称为滤波器掩码的卷积核。同理,对于二为函数:

f*h=(f*h)(r,c)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(u,v)h(r-u,c-v)dudv

        显而易见地,可分滤波器与前面讨论的均值滤波的可分实现有着同样的速度优势。因此,相对于不可分滤波器,应该首先使用可分滤波器,对递归线性滤波器的应用也是同样的道理。递归线性滤波器与均值滤波器的递归实现有着同样的速度有时,即运行时间与滤波器的尺寸无关。遗憾的是,很多常用的滤波器不能以递归滤波器的方式来实现,它们通常只能被近似为一个递归滤波器。

        尽管均值滤波器提供了不错的结果,但它还不是最适宜的平滑滤波器。噪声主要是以图像中灰度值高频波动的方式暴露出来。理想情况下,我们希望能有一个平滑滤波器来消除这些高频波动。为了确定某均值滤波器消除高频波动的效果,我们可以检查此均值滤波器对图像中某些频率的相应情况。但是均值滤波器的频率相应不是旋转对称的,也就是说是各向异性的。这意味着倾斜方向上的结构与水平或垂直方向上的结构在应用同一滤波器时会经历不一样的平滑处理。

        由于均值滤波器有上述缺点,自然会出现这样一个问题,即采用何种平滑滤波器最理想。一个解决方法是先定义一组自然准则,平滑滤波器必须完全满足这些准则。然后寻找可以完全满足这些准则的全部滤波器。第一个自然准则就是滤波器应该是线性的,这是因为我们可以想象一幅图像是由多个物体以相加的方式组合而成,因此,滤波处理的输出应该是输入的一个线性组合。而且,滤波应是与位置无关的,也就是说无论一个物体出现在图像中的那个位置,滤波都应该能产生同样的结果。线性滤波器是可以满足这个标准的。我们也希望滤波器是旋转对称的,也就是各向同性的,这样对图像中不同方向的物体应用滤波器后的结果是一致的。正如在前向所述的,均值滤波器是不符合这个标准的。我们也希望能控制正在执行的平滑处理的程度,所以,滤波器应该有一个参数 t 来控制平滑的程度,当 t 值越高时表示平滑程度越大。对于均值滤波器而言,这是与掩码尺寸 m 和 n 相对应的。在上面我们已经看到了均值滤波器不能抑制图像中滤波器的噪声抑制情况。一个可行的准则是:得到的 t 值越大,图像中就应该有更多的局部最大值被消除。由于滤波器是线性的,所以当我们仅需要要求消除局部最大值,这自然意味着局部最小值也被消除掉了。最后,我们有时希望连续地多次执行平滑滤波器。如果这样做时,我们也会需要一个简单的办法来预测组合滤波操作的结果。因此,先用 t 滤波,然后再用 s 滤波应该与用 t+s 进行的单一滤波器处理是一样的。在所有的平滑滤波器中,高斯滤波器是唯一可以符合上述全部准则的滤波器。

        高斯滤波器是可分的,所以可以被非常高效地计算出来。实际上,他是唯一的各向同性的可分平滑滤波器。不幸的是,他不能以递归的方式来执行。高斯滤波器的频率相应也是一个高斯函数。与均值滤波器相比,高斯滤波器更好地抑制了高频部分。在使用较大的滤波器尺寸时,均值滤波器将边缘变成了灰度值缓慢变化的斜坡,这导致了即便使用肉眼观察都很难准确地确定边缘的位置,而高斯滤波器产生了相对锐利的边缘。因此,高斯滤波器能输出更好的结果,在更关注结果的质量时,高斯滤波器是首选的平滑滤波器,而在更关注执行速度时,首选使用均值滤波器。

        中值滤波器是不可分的。但是通过使用优化的算法,中值滤波器的运行时间和一个可分线性滤波器的运行时间相差无几。虽然中值滤波器的特性很难分析,但我们还是注意到他不是对输入的灰度值进行平均,而仅仅是从这些灰度值中选择一个值。这往往能导致很多令人惊讶的结果。中值滤波器有时显示的结果会是一幅全黑的图像,这是因为全部的亮线条在窗口中小于50%。这个特性有时用来将图像中的某些物体完全删除。特别需要注意的是,即便使用大窗口尺寸的中值滤波器也不会降低边缘的锐利程度。但是,与线性滤波器不同的是,使用中值滤波器时,处理后图像所包含的边缘是否会产生变化,变化程度是多少并不能预先估计到。而且,同线性滤波器相比,也不能估计处中值滤波器抑制噪声的程度,因此对于高精度的测量任务,我们仍应采用高斯滤波器。

3.2.4  傅里叶变换

        傅里叶变换能被用来在频率域内计算与任意线性滤波器的卷积。这点可被用来配合标准滤波器掩码实现滤波操作,比如与均值滤波器或高斯滤波器配合,但通常仅在与相对大尺寸滤波器配合使用时才有速度优势。使用傅里叶变换进行滤波处理的真正好处是:可以通过使用定制的滤波器来消除图像中某些特定的频率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值