了解CV和RoboMaster视觉组(五)参数自适应方法和稳健特征

本文探讨了图像处理中参数自适应方法的重要性,包括亮度自适应、局部阈值自适应及双边滤波等技术,并讨论了如何寻找旋转、尺度和平移不变的形态学特征。

5.5.参数自适应方法和稳健特征

不论是传统的图像增强算法还是神经网络,总有一些参数是需要手工调整的,而这些参数得设置是否恰当,往往会影响整个算法的表现。手动设置的参数往往是针对部分情景和特定目标的,若环境或任务发生改变,之前的参数很可能会失效。这也是为什么我们都追求一种能够适应尽可能多的场景的参数设定方法,亦或是尝试元学习以指导参数的自动选取,减少人为干预。

不过即使再怎么追求hand-crafted free,我们似乎无法逃脱设置参数的魔咒——用于选取参数的算法在另一种角度来看仍然是一种参数,也就是深度学习中常说的超参数,而超参数之上亦有参数,这就是meta learning。如果我们希望不要人为设定meta learning的参数呢?那便有了meta-meta learning,我们可以不断增加meta的前缀直至无穷无尽… 即使是下面介绍的自适应方法本身,也算是一种prior knowledge,或者约束。

因此,参数自适应的方法就显得尤为重要了。我们希望能够在分割图像的时候自动选取合适的阈值,希望在分类图像的时候得到错误率最小的置信度阈值,希望在获取图像特征的时候划分得到最富有语义信息的部分······

本节将会介绍传统的图像处理中常见的参数自动选取和阈值自适应技术,以及运用了这些方法的特征点检测/目标i检测算法如LBP/FAST/SURF/ORB/SIFT/HOG。此节的内容也会更贴近实际应用,会稍微涉及一些比赛中的实用coding方法。

理论上来说,这一部分应该放在神经网络和CNN之前,因为CNN其实算是借鉴传统方法发展起来的,其特征表和提取都算是传统方法的泛化结果。5.5 也是许多同学在学习CV的时候常常忽略的一环,常常是只学习了DNN和CNN,跑了几个数据集和经典网络就认为自己掌握了计算机视觉的基础知识。实际上这部分内容才是CV的基石之一。


5.5.1. 阈值自适应与不变特征

对于黑白图像(彩色图像同理),亮度/像素点的值是最基本的特征。一般的计算机视觉任务都需要对输入进行预处理如标准化、提亮/暗化、锐化/模糊等,所以首先来看看像素级特征和形态学特征。

5.5.1.1. 亮度自适应

由于相机曝光/光圈/外界光线环境的变化,输入的图像常常有着不同的视野亮度。倘若我们希望在预处理中对所有图像进行整体提亮/暗化以达到相同的亮度水平,显然设置一两个一成不变的参数是不够的。不同的 图像要达到相同的 效果,就提醒我们应当使用自适应技术。 最简单的方法是对所有像素值求平均,然后使得所有图像的亮度均值相同,这样在稍后的处理中就可以用一个相同的参数对付所有图像了。

不过增减均值有时候并不是最好的选择,若我们希望在稍后得到图像的形态学特征,常常需要进行二值化处理,这时候阈值的选取就非常关键了,如果部分图像整张都偏暗或偏亮,阈值稍大可能导致特征被删除,太小又可能留下过多不需要的形状;特别有时候我们希望增大图像的对比图突出边缘和纹路等细节,那可以使用直方图均衡化的技巧,其将一张分布不均匀(常常是有大块明暗区域)的图像的直方图变得更接近均匀分布。这能够大大提升图像的对比度,使得明暗的差异增大,让我们更好地分离需要的部分。其基本思想是对在直方图中密度大的区域进行展宽,而对密度小灰度级进行缩减。

在这里插入图片描述

Histogram equalization的例子,图源知乎https://zhuanlan.zhihu.com/p/29772177

经过HE的操作,原本不明显的边缘和纹理也都变得更清晰了,最重要的是现在可以方便的选择阈值进行二值化操作了。

根据预处理目的的不同,我们也可以把没有达到均值部分的像素值与均值的差看作是某种损失,若相差越大就要施以更大的”惩罚“,即在稍后将此像素值增大/缩小得更多一些。比如L1 loss或L2 loss都是可用的,也可以采用一些更平滑的曲线。


5.5.1.2. 局部阈值自适应

前述的亮度自适应方法在一定程度上可以解决图像亮度变化造成的影响,但是考虑这种情况:我们分割出一张报纸上的文字(黑色字体),但是报纸的一侧暴露在阳光下,而另一侧则在黑暗中。那么即使进行了直方图均衡化,由于其亮度的”两极分化“,高亮和强暗区域仍然是糊成一团。这时候就应该选用局部阈值局部直方图的方法了,其本质是使用比全局统计特征(即直方图)更精细的分类。

在这里插入图片描述

使用局部动态阈值和单一阈值的对比

可以看到,采用动态阈值后很好地解决了这个问题。其实现过程也应该很容易想到:使用一个mean slide window或者gaussian slide Window处理整个图像,对部分区域统计均值/加权均值并由此设置均值的1/5或1/4(这个值仍然是人为设定的,取决于对细节的取舍,高斯窗则是做加权均值统计)作为阈值,便可以得到上面的效果了。

在这里插入图片描述

使用局部直方图均衡化对比全局均衡化,中间下方的纹路差别更大了

局部直方图均衡化可以取得的效果和动态阈值相仿,不过和全局直方图均衡化希望得到形态学特征相比其更注重的是纹理和细节:对比上图中的global equlize和local equalize的结果就可以看到,若只希望得到外形轮廓即形态学特征,应该使用全局直方图均衡化,中间下方的沙坑轮廓非常明显;而要获取所有纹理特征,则应该选用局部直方图均衡化。

其步骤也同样非常简单,取滑动窗口和一定的步长(你看吧,滑动窗口的大小的步长以及是否加padding仍然是需要人为设定的超参数,使用不同的参数可以得到不同的效果,可以自己想想试试看),对滑窗内进行均衡化即可。

动态阈值分割前景背景的经典方法还包括大津法,其思路为使得分割后的前景与背景类间方差最大,因此算法就是要找到一个合适的阈值以实现前述目标,一般用暴力搜索即可,从0-255遍历阈值得到类间方差的最大值。大津法对分类边缘的处理效果较好,因为一旦有伪正类或伪负类被划入对应类别,类间方差都会极大地减小,这使得损失函数对于分类错误的敏感性很高。

OpenCV对上两者都提供了接口,被统一写入cv::Threshold()内,通过传递不同的阈值类型参数就可以选用自适应阈值或大津法。


5.5.1.3. 双边滤波

我们常使用一些降噪滤波器如高斯、中值、均值等对图像进行平滑处理以去除噪声,但是它们都有一个缺点,就是容易损伤高频信息,随机噪声、椒盐噪声等都属于高频噪声,而前述的几个滤波器本质上都是low pass filter,所以高频纹理和边缘的损伤是在所难免的。那么我们能否开发出一种参数自适应的滤波器以避开边缘,只在平坦区域寻找噪声?这就是双边滤波的思想。它同时考虑空间域(xy两个维度)和值域(像素值的高低,即图像的"第三维"),力求减轻对边缘的模糊。

高斯滤波器的计算方式如下:
FGussian=1Wg∑p∈UGg(p)∗Ip F_{Gussian}=\frac{1}{W_{g}} \sum_{p \in U} G_{g}(p)* I_{p} FGussian=Wg1pUGg(p)I

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值