[学习opencv3] 阅读第十章

滤波与卷积

自适应阈值

cv::adaptiveThreshold()
当图像中出现较大的明暗差异时,自适应阈值是非常有效的。这个函数进处理单通道8位或浮点型图像,并且要求源图像和目标图像不同。

平滑

在一些应用中也称为“模糊”,是一种简单而又常用的图像处理操作。

目的:
通常是为了减少噪声和伪影。
在降低图像分辨率的时候,平滑也是十分重要的。

简单模糊和方框型滤波器

cv::blur()实现了简单模糊,目标图像中的每一个值都是源图像中相应位置一个窗口(核)中像素的平均值。

方框型滤波器是一种矩形的并且滤波器中所有值ki,j全部相等的滤波器。通常ki,j为1或者1/A,其中A是滤波器的面积。后一种滤波器称为“归一化方框型滤波器”

中值滤波器(Median Filter)

cv::medianBlur()默认核的中心点为锚点。
将每个像素替换为围绕这个像素的矩形邻域内的中值或“中值”像素(相对于平均像素)。

通过平均的简单模糊对噪声图像,尤其是有较大孤立的异常值(比如数字影像中的拍摄噪声)非常敏感。少量具有较大偏差的点也会严重影响到均值滤波。中值滤波可以采用取中间点的方式来消除异常值。

中值滤波是一种非线性核的实例。

高斯滤波器(Gaussian Filter)

cv::GaussianBlur
最有用的一种滤波器。高斯滤波对输入数组进行以此规范化的高斯核滤波,然后输出目标数组。

opencv实现的高斯平滑还为几个常用的内核提供性能上的优化。33、55以及7*7的标准sigma核(sigmaX=0.0)相对其他核性能更优。高斯模糊支持单通道/三通道的8位/32位浮点型图像等。

双边滤波器(Bilateral Filter)

cv::bilateralFilter
双边滤波器是一种比较大的图像分析算子,也就是边缘保持平滑。相对于高斯平滑,双边平滑更容易理解。高斯模糊的过程是减缓像素在空间上的变化,因此与邻域的关系紧密,而随噪声在像素间的变化幅度又会非常的大(即噪声不是空间相关的)。基于这种前提高斯平滑很好的减弱了噪声并且保留了小信号。不幸的是,这种方式破坏了边缘信息,最终结果是高斯模糊把边缘也模糊了。相似于高斯模糊,双边滤波对每个像素及其领域内的像素进行了加权平均。其权重由两部分组成,第一部分同高斯平滑;第二部分也是高斯权重,不同的是它不是基于空间距离而是色彩强度差计算而来,在多通道(彩色)图像上强度差由各分量的加权累加代替。可以把双边滤波当作是高斯平滑,只是相似程度更高的像素权值更高,边缘更明显,对比度更高。双边滤波的效果就是将原图像变成一副水彩画,这种效果在多次迭代后更加显著,因此这种方法在图像分割领域十分有用。

除源图像和目标图像外,双边滤波器还需要提供三个参数,
第一个是像素领域的直径d;
第二个是颜色空间滤波器的sigma值sigmaColor,其与高斯滤波器中的参数sigma相似;
第三个是坐标空间中滤波器的sigma值sigmaSpace。第二个参数越大,平滑时所包括的强度(色彩)越大(因此图像的不连续性将会更显著)。

滤波器的大小d对算法的效率有很大影响,通常在视频处理时不大于5,但在非实时应用方面这个值可以放大到9.你也可以在调用这个函数时将其设为-1,函数将会自动为图像计算sigmaSpace变量的值。

实际情况中,小的sigmaSpace值比如10会带来一个轻微的但也明显的效果;而大的sigmaSpace比值比如150会对图像产生非常显著的影响,使图像有一种卡通的效果。

导数和梯度

卷积中最重要也是最基础的部分就是(近似)计算导数。

卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列x(n)和h(n),则卷积的结果
在这里插入图片描述
------摘自百度百科 https://baike.baidu.com/item/卷积/9411006?fr=aladdin

索贝尔(Sobel)导数

用来表示微分的最常用的算子是索贝尔(Sobel)导数算子。Sobel算子可以实现任意阶导数和混合偏导数。

cv::Sobel()

Sobel算子有一个好处就是可以将核定义为各种大小,并且可以快速、迭代式地构造这些核。大的核可以更好地近似导数,因为可以消除噪声影响。不过,假如导数在空间上变化剧烈,核太大会使结果发生偏差。

Sobel算子不是真正的导数,因为它定义在离散空间上。Sobel算子实际上表示的是一个多项式,也就是说在x方向上进行二阶Sobel运算表示的并不是二阶导数,而是对抛物线函数的局部拟合。这也就说明了为什么要使用一个更大的核,更大的核拟合了更多的像素。

Scharr滤波器

在离散空间上有很多方法来近似导数,Sobel算子的缺点是核比较小的时候准确度不高。对于大型的核,近似过程中使用了较多的点,因此精度问题不太显著。cv::Sobel()中使用的X、Y滤波器不会出现这种偏差(在X方向或Y方向),因为它们准确地与x、y轴对齐。当你需要计算某一点地梯度时,问题就来了(图像梯度的方向通过计算两个滤波器响应比值y/x的反正切值得来)。

为了将图像内的信息联系起来,你可能需要这样测量一幅图像:在处理过程中,通过在目标附近组织一副梯度直方图来收集其形状信息,这些直方图是许多形状分类器训练和使用的基础。因此,梯度角的误差会降低分类器识别的效果。

对于33的Sobel滤波器,梯度角距离水平或垂直方向越远,误差越明显。在opencv中,调用cv::Sobel()时设置kisecv::SCHARR,即可消除33这样小但是快的Sobel导数滤波器所带来的误差。Scharr滤波器和Sobel滤波器同样很快,但是前者精度更高。因此选择3*3的滤波器时,应当使用Scharr滤波器。

拉普拉斯变换

opencv中的函数Laplacian实现了对拉普拉斯算子的离散近似。

由于Laplacian算子可以通过二阶导数定义,因此可以把它的离散实现与二阶Sobel导数联系起来。实际上,opencv在实现Laplacian算子时使用了Sobel算子。

Laplacian算子可以用于各种场景处理,
一种常见的应用就是匹配“斑点”。
同样可用于边缘检测。

图像形态学

膨胀和腐蚀

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值