zoukankan      html  css  js  c++  java
  • 图像卷积、相关以及在MATLAB中的操作

    图像卷积、相关以及在MATLAB中的操作

    2016年7月11日 20:34:35, By ChrisZZ

    区分卷积和相关

    图像处理中常常需要用一个滤波器空间滤波操作。空间滤波操作有时候也被叫做卷积滤波,或者干脆叫卷积(离散的卷积,不是微积分里连续的卷积);滤波器也有很多名字:卷积模版、卷积核、掩模、窗口等。

    空间滤波可以分为线性滤波和非线性滤波。非线性滤波常见的有中值滤波、最大值滤波等,相当于自定义一个函数,在数学上由于不满足线性变换因此叫做非线性滤波。这里不细研究它。

    线性滤波则通常是:将模版覆盖区域内的元素,以模版中对应位置元素为权值,进行累加。看起来挺简单的,但是要区分相关(cross-correlation)卷积(convolution)两种模式。为什么呢?因为在MATLAB里是有所区分的,而且不少中文书里面把它们混淆了。

    我们最容易的理解是:将模版中元素从左到右、从上到下,作为使用顺序,那么卷积操作的结果,就是模版第一个元素乘以它覆盖的元素,加上模版第二个元素乘以它覆盖的元素,再加上模版第三个元素乘以它覆盖的元素,...,一直加到模版最后一个元素乘以它覆盖的元素。好吧,其实就是:模版覆盖区域内,元素逐一相乘然后累加,此时的对应位置就是上下投影后被覆盖的位置。

    上面这个理解确实是看起来最容易理解的,因而很多中文书把它叫做"卷积"。然而这个概念其实叫做相关,而卷积则相当于:将同样的模版旋转180°后,再做"相关"操作。当然,如果模版是180°对称的那么卷积和相关是相同的。但是并不是所有的模版都对称。因此,我建议,在滑窗操作、计算图像梯度等场合,不要使用“卷积”,而要使用“滤波”或者“相关”。因为,我们通常讲的卷积,其实是相关,那就不要用卷积这个词以免引起混淆。

    MATLAB下的操作

    在MATLAB中用imfilter来实现线性空间滤波:

    imfilter(f, w, filtering_mode, boundary_options, size_options)
    f:图像
    w:滤波模版
    filtering_mode:滤波模式
        'corr':相关滤波。[默认值]
        'conv':卷积滤波。
    boundary_options:边界选项
        P:(没有引号)边界外围补充0。[默认值]
        'replicate':边界外围复制边界值
        'symmetric':边界外围使用边界镜像
        'circular':图像的大小通过讲图像处理为二维周期函数的一个周期来扩展(这是什么?)
    size_options:大小选项
        'same':输出大小与输入图像f大小相同。[默认值]
        'full':输出与扩展(填充)后的图像大小相同。
    

    最常用的是这句:

    imfilter(f, w, 'replicate') %相关滤波,边界外围填充0,输出大小与输入图像f相同
    

    当然,如果硬要做真正的卷积滤波,除了指定imfilter中的的conv参数,也可以先将模版旋转180°:

    rotated_filter=flipud(fliplr(filter))
    

    总结

    说了这么多废话,总结起来就是3句话:

    1. 很多中文书里(数字图象处理一类)讲的卷积过滤其实应当叫做相关过滤
    2. 平时滤波最常用的是相关滤波,也就是“覆盖位相乘,然后累加”
    3. MATLAB中的写法为imfilter(f, w, 'replicate')

    ref

    https://www.zhihu.com/question/29121110

  • 相关阅读:
    Docker和k8s的区别与介绍
    NFS网络文件系统详解
    NFS文件系统及搭建NFS共享服务
    Tomcat 端口配置,及原理详解
    svn使用教程
    buff/cache内存占用过多
    关于xcode:如何在Objective-C中使用符号断点获取参数
    iOS开发消除编译警告
    建模的能力才是一个人和核心能力
    android sutdio 环境搭建
  • 原文地址:https://www.cnblogs.com/zjutzz/p/5661543.html
Copyright © 2011-2022 走看看