精华内容
下载资源
问答
  • 一、什么是数组扁平化 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁、简单,突出主题。 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层...

    一、什么是数组扁平化

    1. 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁、简单,突出主题。
    2. 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层的数组。

    flatten 可以使数组扁平化,效果就会如下

    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    
    arr = arr.flat(Infinity);
    

    在这里插入图片描述
    从中可以看出,使用 flatten 处理后的数组只有一层,下面我们来试着实现一下。

    二、简单实现

    2.1普通递归

    • 这是最容易想到的方法,简单,清晰!
    /* ES6 */
    const flatten = (arr) => {
      let result = [];
      arr.forEach((item, i, arr) => {
        if (Array.isArray(item)) {
          result = result.concat(flatten(item));
        } else {
          result.push(arr[i])
        }
      })
      return result;
    };
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    

    在这里插入图片描述

    /* ES5 */
    function flatten(arr) {
      var result = [];
      for (var i = 0, len = arr.length; i < len; i++) {
        if (Array.isArray(arr[i])) {
          result = result.concat(flatten(arr[i]))
        }
        else {
          result.push(arr[i])
        }
      }
      return result;
    }
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    

    在这里插入图片描述

    2.2 toString()

    • 该方法是利用 toString 把数组变成以逗号分隔的字符串,然后遍历数组把每一项再变回原来的类型。
      先来看下 toString 是怎么把数组变成字符串的
    [1, [2, 3, [4]]].toString()
    // "1,2,3,4"
    

    完整展示

    /* ES6 */
    const flatten = (arr) => arr.toString().split(',').map((item) => +item);
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    
    /* ES5 */
    function flatten(arr) {
      return arr.toString().split(',').map(function(item){
        return +item;
      });
    }
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    

    这种方法使用的场景却非常有限,必须数组中元素全部都是 Number。 也可以全部都为 String。

    2.3 [].concat.apply + some

    • 利用 arr.some 判断当数组中还有数组的话,循环调用 flatten 扁平函数(利用 [].concat.apply扁平), 用concat 连接,最终返回 arr;
    /* ES6 */
    const flatten = (arr) => {
      while (arr.some(item => Array.isArray(item))){
        arr = [].concat.apply([], arr);
      }
      return arr;
    }
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    
    /* ES5 */
    /**
    * 封装Array.some
    * @param {function} callback    - 回调函数
    * @param {any}      currentThis - 回调函数中this指向
    */
    Array.prototype.some = function (callback, currentThis){
      let context = this;
      let flag = false;
      currentThis = currentThis || this;
      for (var i = 0, len = context.length; i < len; i++) {
        const res = callback.call(currentThis, context[i], i, context);
        if (res) {
          flag = true;
        } else if (!flag) {
          flag = false;
        }
      }
      return flag;
    }
     
    function flatten(arr){
      while(arr.some(item => Array.isArray(item))){
        arr = [].concat.apply([], arr);
      }
      return arr;
    }
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    

    2.4 reduce

    reduce 本身就是一个迭代循环器,通常用于累加,所以根据这一特点有以下:

    function flatten(arr){
      return arr.reduce(function(prev, cur){
        return prev.concat(Array.isArray(cur) ? flatten(cur) : cur)
      }, [])
    }
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    

    2.5 ES6 中的 解构运算符 …

    • … 每次只能展开最外层的数组,被 [].concat 后,arr 就扁平化一次。
    function flatten(arr){
      while(arr.some(item => Array.isArray(item))){
        arr = [].concat(...arr);
      }
      return arr;
    }
     
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    console.log(flatten(arr));
    

    2.6 JSON.stringify

    • JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => Number(item));
    console.log(arr);
    
    展开全文
  • /*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑……这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑……这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,...

    /*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑……这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑……这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,赶紧google之~ 发现自己以前了解的真的很不全面,在此做一些总结,以后对这种基本概念要深刻学习了~*/


    1.图像卷积(模板)

    (1).使用模板处理图像相关概念:     

         模板:矩阵方块,其数学含义是卷积运算。      

         卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积(权矩阵)的每个元素对应相 乘,所有乘积之和作为区域中心像素的新值。
         卷积核:卷积时使用到的权用一个矩阵表示,该矩阵一个权矩阵。
         卷积示例:
                  3 * 3 的像素区域R与卷积G卷积运算:
                  R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
                

    (2).使用模板处理图像的问题(越界问题):
           边界问题:当处理图像边界像素时,卷积与图像使用区域不能匹配,卷积核的中心边界像素点对应,卷积运算将出现问题。
           处理办法:
                  A. 忽略边界像素,即处理后的图像将丢掉这些像素。
                  B. 保留原边界像素,即copy边界像素到处理后的图像

    (3).常用模板


    我们来看卷积的概念.
    连续空间的卷积定义:  f(x)g(x)的卷积是 f(t-x)g(x) 在t从负无穷到正无穷的积分值. t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在定范围的. 实际的过程就是f(x) 先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象下如果g(x)或者f(x)是个单位的阶越函数. 那么就是f(t-x)g(x)相交部分的面积.这就是卷积了.
    把积分符号换成求和就是离散空间的卷积定义了.那么在图像卷积卷积地是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)g(x)的定义域相交的元素卷积定义上是线性系统分析经常用到的.线性系统就是一个系统的输入和输出的关系是线性关系.就是说整个系统可以分解成N多的无关独立变化,整个系统就是这些变化的累加. 如 x1->y1, x2->y2; 那么A*x1 + B*x2 -> A*y1 + B*y2 这就是线性系统. 表示一个线性系统可以用积分的形式 

    ,

    就是f(t,x)表示的是A B之类的线性系数.看上去很像卷积呀,对,如果f(t,x) = F(t-x) 不就是了吗.从f(t,x)变成F(t-x)实际上是说明f(t,x)是个线性移不变,就是说变量的差不变化的时候, 那么函数的值不变化. 实际上说明一个事情就是说线性移不变系统的输出可以通过输入和表示系统线性特征的函数卷积得到.



    2.图像滤波

    (1)图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接响到后续图像处理和分析的有效性和可靠性。(滤波就是要去除没用的信息,保留有用的信息,可能是低频,也可能是高频)

    (2)滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;  另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

    对滤波处理的要求有两条:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。

    (3)图像的滤波方法: 

    (一)图像的滤波方法很多,主要可以分为频率域法和空间域法两大类。频率域法的处理是在图像的某种变换域内,对图像的变换系数值进行运算,然后通过逆变换获得增强图像。这是一种间接的图像滤波方法。空间滤波方法是一类直接的滤波方法,它在处理图像时直接对图像灰度作运算。

         <1>频率域滤波:是将图像从空间或时间域转换到频率域,再利用变换系数反映某些图像特征的性质进行图像滤波的方法。傅立叶变换是一种常用的变换。在傅立叶变换域,频谱的直流分量正比于图像的平均亮度,噪声对应于频率较高的区域,图像实体位于频率较低的区域。图像在变换具有的这些内在特性可被用于图像滤波。可以构造一个低通滤波器,使低频分量顺利通过而有效地阻于高频分量,即可滤除图像的噪声,再经过反变换来取得平滑的图像。

              低通的数学表达式如下式所示:
                                          

              式中F (u, v)一含有噪声的原图像的傅立叶变换;
              H (u, v)一为传递函数,也称转移函数(即低通滤波器);
              G (u, v)一为经低通滤波后输出图像的傅立叶变换。
              H滤波滤去高频成分,而低频信息基本无损失地通过。滤波后,经傅立叶变换反变换可得平滑图像,即
             
     选择适当的传递函数H (u, v),对频率域低通滤波关系重大。常用的传递函数有梯形函数、指数函数、巴特沃思函数等。
              频域常用的几种低通滤波器为理想低通滤波器(Ideal  circular Iow-passfilter)、巴特沃思(Butterworth)低通滤波器、指数低通滤波器及梯形低通滤波器。这些低通滤波器,都能在图像内有噪声干扰成分时起到改善的作用。
          <2>常用的平面空间域滤波法有两类:  

              一类是拟合图像的方法,包括n阶多项式拟合、离散正交多项式拟合、二次曲面拟合等多种方法; 

              另一类是平滑图像的方法,包括领域平均法、中值滤波法、梯度倒数加权法、选择式掩模法等。

    (二)按频率高低

          <1>高通滤波:边缘提取与增强。边缘区域的灰度变换加大,也就是频率较高。所以,对于高通滤波,边缘部分将被保留,非边缘部分将被过滤;

          <2>低通滤波:边缘平滑,边缘区域将被平滑过渡。

             附: 高斯滤波高斯滤波是一种线性平滑滤波,即低通滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由本身和邻域内的其他像素值经过加权平均后得到。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。3×3的掩模如下:

    3*3掩模×1/16 

    从结构化掩模中可以看到,处于掩模中心的位置比其他任何像素的权值都大,因此在均值计算中给定的这一像素显得更为重要。而距离掩模中心较远的像素就显得不太重要,这样做是为了减小平滑处理中的模糊。

    (三)线性与非线性滤波

           

    <1>线性滤波:线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如(1)均值滤波器(模板内像素灰度值的平均值)、(2)高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。

    <span style="font-family: 'Microsoft YaHei';">         <2>非线性滤波:非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。</span><span style="font-family: 'Microsoft YaHei'; font-size: 10.5pt; line-height: 19.0909px; background-color: rgb(250, 247, 239);">五种常见的非线性滤波算子,这五种滤波算子对不同的图像都会有不同的作用,最常用的是中值滤波,因为它的效果最好且信息损失的最少。</span>
    <p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">       (1).<span style="margin: 0px; padding: 0px;">极大值滤波</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">            极大值滤波就是选取像素点领域的最大值作为改点的像素值,有效率去了灰度值比较低的噪声,也可作为形态学里面的膨胀操作。</span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">            极大值滤波可以表示为: <span style="margin: 0px; padding: 0px;">Maximum(A)=max[A(x+i,y+j)]      (x,y)</span><span style="margin: 0px; padding: 0px;">属于</span><span style="margin: 0px; padding: 0px;">M</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">            注:(<span style="margin: 0px; padding: 0px;">x+i,y+j)</span><span style="margin: 0px; padding: 0px;">是定义在图像上的坐标,</span><span style="margin: 0px; padding: 0px;">(i,j)</span><span style="margin: 0px; padding: 0px;">是定义在模板</span><span style="margin: 0px; padding: 0px;">M</span><span style="margin: 0px; padding: 0px;">上的坐标。</span><span style="margin: 0px; padding: 0px;">M</span><span style="margin: 0px; padding: 0px;">即为运算的模板。</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">       (2).<span style="margin: 0px; padding: 0px;">极小值滤波(与极大值滤波相反)</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">       (3).<span style="margin: 0px; padding: 0px;">中点滤波</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">            中点滤波常用于去除图像中的短尾噪声,例如高斯噪声和均匀分布噪声。终点滤波器的输出时给定窗口内灰度的极大值和极小值的平均值;</span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">  </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">          Midpoint(A)=(max[A(x+i,y+j)]+min[A(x+i,y+j)])/2          (x,y)<span style="margin: 0px; padding: 0px;">属于</span><span style="margin: 0px; padding: 0px;">M</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">            </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">注:(<span style="margin: 0px; padding: 0px;">x+i,y+j)</span><span style="margin: 0px; padding: 0px;">是定义在图像上的坐标,</span><span style="margin: 0px; padding: 0px;">(i,j)</span><span style="margin: 0px; padding: 0px;">是定义在模板</span><span style="margin: 0px; padding: 0px;">M</span><span style="margin: 0px; padding: 0px;">上的坐标。</span><span style="margin: 0px; padding: 0px;">M</span><span style="margin: 0px; padding: 0px;">即为运算的模板。</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">       (4).<span style="margin: 0px; padding: 0px;">中值滤波</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">            中值滤波可以消除图像中的长尾噪声,例如负指数噪声和椒盐噪声。在消除噪声时,中值滤波对图像噪声的模糊极小(受模板大小的影响),中值滤波实质上是用模板内所包括像素灰度的中值来取代模板中心像素的灰度。中值滤波在消除图像内椒盐噪声和保持图像的空域细节方面,其性能优于均值滤波。</span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">            </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">Median(A)=Median[A(x+i,y+j)]              (x,y)<span style="margin: 0px; padding: 0px;">属于</span><span style="margin: 0px; padding: 0px;">M </span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">            注:(<span style="margin: 0px; padding: 0px;">x+i,y+j)</span><span style="margin: 0px; padding: 0px;">是定义在图像上的坐标,</span><span style="margin: 0px; padding: 0px;">(i,j)</span><span style="margin: 0px; padding: 0px;">是定义在模板</span><span style="margin: 0px; padding: 0px;">M</span><span style="margin: 0px; padding: 0px;">上的坐标。</span><span style="margin: 0px; padding: 0px;">M</span><span style="margin: 0px; padding: 0px;">即为运算的模板。</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;"><span style="font-family: 'Microsoft YaHei';">       (5).<span style="margin: 0px; padding: 0px;">加权中值滤波(中值滤波的改进)</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">           </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">加权中值滤波是在中值滤波的基础上加以改进,其性能在一定程度上优于中值滤波。</span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">           </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">下面是自己在算法上的改进:以例子说明</span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">           </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">若说选模板的大小为<span style="margin: 0px; padding: 0px;">5</span><span style="margin: 0px; padding: 0px;">,那么这个模板就唯一确定为:</span></span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">             </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">1  1  5   1   1   </span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">             </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">1  1  5   1   1  </span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">             </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">5  5  5   5   5   </span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">             </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">1  1  5   1   1  </span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">             </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">1  1  5   1   1   </span></span></p><p class="p0" style="margin: 0pt auto; padding-top: 0px; padding-bottom: 0px; font-size: 13.6364px; line-height: 19.0909px; background-color: rgb(250, 247, 239);"><span style="font-family: 'Microsoft YaHei';"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">          </span><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">上图中的数字表式改点像素在序列中出现的次数。然后根据模板平滑图像。实验证明该方法好于传统中值滤波。当然还有其他方法;</span></span></p><span style="font-family: 'Microsoft YaHei';">
    </span>
    <span style="font-family: 'Microsoft YaHei';">
    </span>
    <span style="font-family: 'Microsoft YaHei';">附:噪声
              (高斯噪声:是指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。
                  椒盐噪声:类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。)</span>
    
    


    3.图像平滑

    图像平滑 image smoothing: 压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑常用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。



    关系:

    图像卷积:一种实现手段,不管是滤波还是别的什么,可以说是数学在图像处理的一种延伸。

    图像滤波:一种图像处理方法,来实现不同目的。

    图像平滑:实际上就是低通滤波。

    展开全文
  • /*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑……这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑……这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,...

    /*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑……这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑……这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,赶紧google之~ 发现自己以前了解的真的很不全面,在此做一些总结,以后对这种基本概念要深刻学习了~*/

     

    1.图像卷积(模板)

    (1).使用模板处理图像相关概念:     

         模板:矩阵方块,其数学含义是一种卷积运算。      

         卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相 乘,所有乘积之和作为区域中心像素的新值。
         卷积核:卷积时使用到的权用一个矩阵表示,该矩阵是一个权矩阵。
         卷积示例:
                  3 * 3 的像素区域R与卷积核G的卷积运算:
                  R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
                

    (2).使用模板处理图像的问题(越界问题):
           边界问题:当处理图像边界像素时,卷积核与图像使用区域不能匹配,卷积核的中心与边界像素点对应,卷积运算将出现问题。
           处理办法:
                  A. 忽略边界像素,即处理后的图像将丢掉这些像素。
                  B. 保留原边界像素,即copy边界像素到处理后的图像。

    (3).常用模板:


     

     

    我们来看一下一维卷积的概念.
    连续空间的卷积定义:  f(x)与g(x)的卷积是 f(t-x)g(x) 在t从负无穷到正无穷的积分值. t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在一定范围的. 实际的过程就是f(x) 先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象一下如果g(x)或者f(x)是个单位的阶越函数. 那么就是f(t-x)与g(x)相交部分的面积.这就是卷积了.
    把积分符号换成求和就是离散空间的卷积定义了.那么在图像中卷积卷积地是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)与g(x)的定义域相交的元素卷积定义上是线性系统分析经常用到的.线性系统就是一个系统的输入和输出的关系是线性关系.就是说整个系统可以分解成N多的无关独立变化,整个系统就是这些变化的累加. 如 x1->y1, x2->y2; 那么A*x1 + B*x2 -> A*y1 + B*y2 这就是线性系统. 表示一个线性系统可以用积分的形式 

    ,

    就是f(t,x)表示的是A B之类的线性系数.看上去很像卷积呀,对,如果f(t,x) = F(t-x) 不就是了吗.从f(t,x)变成F(t-x)实际上是说明f(t,x)是个线性移不变,就是说变量的差不变化的时候, 那么函数的值不变化. 实际上说明一个事情就是说线性移不变系统的输出可以通过输入和表示系统线性特征的函数卷积得到.

     

     

    2.图像滤波

     

    (1)图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接响到后续图像处理和分析的有效性和可靠性。(滤波就是要去除没用的信息,保留有用的信息,可能是低频,也可能是高频)

    (2)滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;  另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

    对滤波处理的要求有两条:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。

    (3)图像的滤波方法: 

    (一)图像的滤波方法很多,主要可以分为频率域法和空间域法两大类。频率域法的处理是在图像的某种变换域内,对图像的变换系数值进行运算,然后通过逆变换获得增强图像。这是一种间接的图像滤波方法。空间滤波方法是一类直接的滤波方法,它在处理图像时直接对图像灰度作运算。

         <1>频率域滤波:是将图像从空间或时间域转换到频率域,再利用变换系数反映某些图像特征的性质进行图像滤波的方法。傅立叶变换是一种常用的变换。在傅立叶变换域,频谱的直流分量正比于图像的平均亮度,噪声对应于频率较高的区域,图像实体位于频率较低的区域。图像在变换具有的这些内在特性可被用于图像滤波。可以构造一个低通滤波器,使低频分量顺利通过而有效地阻于高频分量,即可滤除图像的噪声,再经过反变换来取得平滑的图像。

              低通的数学表达式如下式所示:
                                          

              式中F (u, v)一含有噪声的原图像的傅立叶变换;
              H (u, v)一为传递函数,也称转移函数(即低通滤波器);
              G (u, v)一为经低通滤波后输出图像的傅立叶变换。
              H滤波滤去高频成分,而低频信息基本无损失地通过。滤波后,经傅立叶变换反变换可得平滑图像,即
              选择适当的传递函数H (u, v),对频率域低通滤波关系重大。常用的传递函数有梯形函数、指数函数、巴特沃思函数等。
              频域常用的几种低通滤波器为理想低通滤波器(Ideal  circular Iow-passfilter)、巴特沃思(Butterworth)低通滤波器、指数低通滤波器及梯形低通滤波器。这些低通滤波器,都能在图像内有噪声干扰成分时起到改善的作用。
          <2>常用的平面空间域滤波法有两类:  

              一类是拟合图像的方法,包括n阶多项式拟合、离散正交多项式拟合、二次曲面拟合等多种方法; 

              另一类是平滑图像的方法,包括领域平均法、中值滤波法、梯度倒数加权法、选择式掩模法等。

    (二)按频率高低

          <1>高通滤波:边缘提取与增强。边缘区域的灰度变换加大,也就是频率较高。所以,对于高通滤波,边缘部分将被保留,非边缘部分将被过滤;

          <2>低通滤波:边缘平滑,边缘区域将被平滑过渡。

             附: 高斯滤波:高斯滤波是一种线性平滑滤波,即低通滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由本身和邻域内的其他像素值经过加权平均后得到。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。3×3的掩模如下:

    3*3掩模×1/16 

    从结构化掩模中可以看到,处于掩模中心的位置比其他任何像素的权值都大,因此在均值计算中给定的这一像素显得更为重要。而距离掩模中心较远的像素就显得不太重要,这样做是为了减小平滑处理中的模糊。

    (三)线性与非线性滤波

            <1>线性滤波:线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如(1)均值滤波器(模板内像素灰度值的平均值)、(2)高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。

             <2>非线性滤波:非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。五种常见的非线性滤波算子,这五种滤波算子对不同的图像都会有不同的作用,最常用的是中值滤波,因为它的效果最好且信息损失的最少。

    (1).极大值滤波

        极大值滤波就是选取像素点领域的最大值作为改点的像素值,有效率去了灰度值比较低的噪声,也可作为形态学里面的膨胀操作。

        极大值滤波可以表示为: Maximum(A)=max[A(x+i,y+j)]      (x,y)属于M

        注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

    (2).极小值滤波(与极大值滤波相反)

    (3).中点滤波

         中点滤波常用于去除图像中的短尾噪声,例如高斯噪声和均匀分布噪声。终点滤波器的输出时给定窗口内灰度的极大值和极小值的平均值;

        Midpoint(A)=(max[A(x+i,y+j)]+min[A(x+i,y+j)])/2          (x,y)属于M

       注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

    (4).中值滤波

       中值滤波可以消除图像中的长尾噪声,例如负指数噪声和椒盐噪声。在消除噪声时,中值滤波对图像噪声的模糊极小(受模板大小的影响),中值滤波实质上是用模板内所包括像素灰度的中值来取代模板中心像素的灰度。中值滤波在消除图像内椒盐噪声和保持图像的空域细节方面,其性能优于均值滤波。

           Median(A)=Median[A(x+i,y+j)]              (x,y)属于M

    注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

    (5).加权中值滤波(中值滤波的改进)

        加权中值滤波是在中值滤波的基础上加以改进,其性能在一定程度上优于中值滤波。

         下面是自己在算法上的改进:以例子说明

         若说选模板的大小为5,那么这个模板就唯一确定为:

                 1  1  5   1   1   

                 1  1  5   1   1  

                 5  5  5   5   5   

                 1  1  5   1   1  

                 1  1  5   1   1   

        上图中的数字表式改点像素在序列中出现的次数。然后根据模板平滑图像。实验证明该方法好于传统中值滤波。当然还有其他方法;

    
    
    附:噪声
              (高斯噪声:是指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。
                  椒盐噪声:类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。)

     

     

    3.图像平滑

    图像平滑 image smoothing: 压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑常用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。


     

    关系:

    图像卷积:一种实现手段,不管是滤波还是别的什么,可以说是数学在图像处理的一种延伸。

    图像滤波:一种图像处理方法,来实现不同目的。

    图像平滑:实际上就是低通滤波。

     http://blog.csdn.net/yangtrees/article/details/8740933

    http://blog.csdn.net/u012913847/article/details/21093845

    http://blog.csdn.net/ren062/article/details/4268934

    http://blog.csdn.net/frankyzhangc/article/details/6989943

    转载于:https://www.cnblogs.com/pengkunfan/p/3903659.html

    展开全文
  • 平滑项的探讨

    2018-12-03 21:15:31
    (1)平滑是什么意思?  数学上的平滑平滑法是对不断获得的实际数据和原预测数据给以加权平均,使预测结果更接近于实际情况的预测方法,又称光滑法或递推修正法。平滑法是趋势法或时间序列法中的一种具体方法。...

     

    (1)平滑是什么意思?

     数学上的平滑:  平滑法是对不断获得的实际数据和原预测数据给以加权平均,使预测结果更接近于实际情况的预测方法,又称光滑法或递推修正法。平滑法是趋势法或时间序列法中的一种具体方法。

    图像平滑: 图像平滑是指受传感器和大气等因素的影响,遥感图像上会出现某些亮度变化过大的区域,或出现一些亮点(也称噪声)。这种为了抑制噪声,使图像亮度趋于平缓的处理方法就是图像平滑。图像平滑实际上是低通滤波,平滑过程会导致图像边缘模糊化。

    也就是同样的思维就是: 通过某种处理,避免一些突变的畸形值,尽可能接近实际情况

    (2)为什么需要平滑?

           由于在缓慢移动的摄像机摄像过程中,邻近帧的图像往往变化非常微弱,因此在邻近帧的成对的匹配点之间,像素的差别应该是近似不变的。在实际情况中,基于像素点的匹配代价并不能完全正确地反映两幅图像中两个点匹配的正确性;比如噪声、大范围的相似区域等,其结果是错误匹配的代价常常会小于正确匹配代价,从而影响算法在该点的深度估计。 因此,必须增加一些额外的平滑约束到能量的定义中,这种约束通常是采用对深度或者灰度的变化的惩罚,以抑制噪声对匹配结果的影响。为了衡量立体匹配的正确性,我们在我们的能量函数中引入了平滑项。
           这里也就是为了惩罚两幅图像的2点的错误匹配。

    (3)平滑项如何计算?

           

    (4)该项的实际意义是什么?

        如之前提到的:   必须增加一些额外的平滑约束到能量的定义中,这种约束通常是采用对深度或者灰度的变化的惩罚,以抑制噪声对匹配结果的影响。
    --------------------- 

    原文:https://blog.csdn.net/qq_33826977/article/details/79816846 
     

    展开全文
  • 1.0.30 式(1.108)在线性图像处理中的意义是什么? 34 1.0.31 这本书有些什么内容呢? 36 第2章 图像变换 37 2.0.1 本章概况 37 2.0.2 如何能定义一幅基本图像? 37 2.0.3 什么是两个矢量的外积? 37 2.0.4 ...
  • 1.0.30 式(1.108)在线性图像处理中的意义是什么?.......................................34 1.0.31 这本书有些什么内容呢?.............................................................................36 ...
  • cvSmooth(src,SmoothImg,CV_GAUSSIAN,3,3);... 他所说对梯度图加门限,二值化是什么意思? 代码中最后的 if(p[x+y*w]>50) p[x+y*w] = 255; else p[x+y*w] = 0; 是要实现什么功能?和检测零交叉点有什么区别?
  • 这里图像反走样的需要是什么意思,为什么这样做就能反走样呢,如果走样了会怎么样呢? SIFT提取特征点的时候用了DoG来近似LoG,而据我所知LoG是用来检测斑点的,而DoG可以检测角点,SIFT的特征点是斑点还是角点呢,...
  • 小白:师兄,师兄,你在《》、《》中都提到了点云网格化,这个听起来高大上,不过到底是什么意思呢? 师兄:别急,是这样的:你看我们之前处理的都是一个个点,不管是滤波还是平滑,我们都是对一个个离散的空间点...
  • 师兄,师兄,你在《从零开始一起学习SLAM | 给点云加个滤网》、《从零开始一起学习SLAM | 点云平滑法线估计》中都提到了点云网格化,这个听起来高大上,不过到底是什么意思呢?师兄:别急,是这样的:你看我们之前...
  • 第八章——动画控制

    2017-09-06 10:11:38
    动画控制“动画”一词源自拉丁语,意思是“生命的行为”。在您的应用程序中,动画可以将界面元素平滑地带入屏幕或焦点,可以将用户的注意力吸引到可操作的项目上,而他们 可以清楚地表明您的应用程序如何响应用户的...
  • 可以让你非常平滑地(甚至一次性的)从“返回一个永远pending的Promise”过度到这个方案,因为代码及其语义都基本没有变化。在之前,你可以定义一个Promise.stop()方法来返回一个永远...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

平滑处理是什么意思