图像处理算法其实都很简单「建议收藏」

图像处理算法其实都很简单「建议收藏」要学习高斯模糊我们首先要知道一些基本概念:线性滤波与卷积的基本概念    线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。

大家好,又见面了,我是你们的朋友全栈君。要学习高斯模糊我们首先要知道一些基本概念:

线性滤波与卷积的基本概念

      线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。

图像处理算法其实都很简单「建议收藏」

      对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。

      Correlation 和 Convolution可以说是图像处理最基本的操作,但却非常有用。这两个操作有两个非常关键的特点:它们是线性的,而且具有平移不变性shift-invariant。平移不变性指我们在图像的每个位置都执行相同的操作。线性指这个操作是线性的,也就是我们用每个像素的邻域的线性组合来代替这个像素。这两个属性使得这个操作非常简单,因为线性操作是最简单的,然后在所有地方都做同样的操作就更简单了。

      实际上,在信号处理领域,卷积有广泛的意义,而且有其严格的数学定义,但在这里不关注这个。

      2D卷积需要4个嵌套循环4-double loop,所以它并不快,除非我们使用很小的卷积核。这里一般使用3×3或者5×5。而且,对于滤波器,也有一定的规则要求:

      1)滤波器的大小应该是奇数,这样它才有一个中心,例如3×3,5×5或者7×7。有中心了,也有了半径的称呼,例如5×5大小的核的半径就是2。

      2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。

      3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

      4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

神奇的卷积核

      上面说到,对图像的滤波处理就是对图像应用一个小小的卷积核,那这个小小的卷积核到底有哪些魔法。下面我们一起来领略下一些简单但不简单的卷积核的魔法。

 

1、啥也不做

 

      哈哈,大家可以看到啥了吗?这个滤波器啥也没有做,得到的图像和原图是一样的。因为只有中心点的值是1。邻域点的权值都是0,对滤波后的取值没有任何影响。

 

图像处理算法其实都很简单「建议收藏」

 

      下面我们动点真格的。

 

2、图像锐化滤波器Sharpness Filter

 

      图像的锐化和边缘检测很像,首先找到边缘,然后把边缘加到原来的图像上面,这样就强化了图像的边缘,使图像看起来更加锐利了。这两者操作统一起来就是锐化滤波器了,也就是在边缘检测滤波器的基础上,再在中心的位置加1,这样滤波后的图像就会和原始的图像具有同样的亮度了,但是会更加锐利。

 

图像处理算法其实都很简单「建议收藏」

 

      我们把核加大,就可以得到更加精细的锐化效果

 

图像处理算法其实都很简单「建议收藏」

 

      另外,下面的滤波器会更强调边缘:

 

图像处理算法其实都很简单「建议收藏」

 

      主要是强调图像的细节。最简单的3×3的锐化滤波器如下:

 

                                      图像处理算法其实都很简单「建议收藏」

 

      大家应该也看出来了,锐化滤波器实际上就是计算当前点和周围点的差别,然后将这个差别加到原来的位置上。

 

3、边缘检测Edge Detection

 

      我们要找水平的边缘:需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。

 

图像处理算法其实都很简单「建议收藏」

 

      为什么这个滤波器可以寻找到水平边缘呢?因为用这个滤波器卷积相当于求导的离散版本:你将当前的像素值减去前一个像素值,这样你就可以得到这个函数在这两个位置的差别或者斜率。下面的滤波器可以找到垂直方向的边缘,这里像素上和下的像素值都使用:

 

图像处理算法其实都很简单「建议收藏」

 

      再下面这个滤波器可以找到45度的边缘:取-2不为了什么,只是为了让矩阵的元素和为0而已。

 

图像处理算法其实都很简单「建议收藏」

 

      那下面这个滤波器就可以检测所有方向的边缘:

 

                                      图像处理算法其实都很简单「建议收藏」

 

      为了检测边缘,我们需要在图像对应的方向计算梯度。用下面的卷积核来卷积图像,就可以了。但在实际中,这种简单的方法会把噪声也放大了。另外,需要注意的是,矩阵所有的值加起来要是0.

 

                                       图像处理算法其实都很简单「建议收藏」

 

4、浮雕Embossing Filter

 

      浮雕滤波器可以给图像一种3D阴影的效果。只要将中心一边的像素减去另一边的像素就可以了。这时候,像素值有可能是负数,我们将负数当成阴影,将正数当成光,然后我们对结果图像加上128的偏移。这时候,图像大部分就变成灰色了。

 

      下面是45度的浮雕滤波器

 

图像处理算法其实都很简单「建议收藏」

 

      我们只要加大滤波器,就可以得到更加夸张的效果了

 

图像处理算法其实都很简单「建议收藏」

 

      这种效果非常的漂亮,就像是将一副图像雕刻在一块石头上面一样,然后从一个方向照亮它。它和前面的滤波器不同,它是非对称的。另外,它会产生负数值,所以我们需要将结果偏移,以得到图像灰度的范围。

 

图像处理算法其实都很简单「建议收藏」

 

图像处理算法其实都很简单「建议收藏」

 

                                                      A:原图像。B:锐化。C:边缘检测。D:浮雕

 

5、运动模糊Motion Blur

      运动模糊可以通过只在一个方向模糊达到,例如下面9×9的运动模糊滤波器。注意,求和结果要除以9。

 

图像处理算法其实都很简单「建议收藏」

      这个效果就好像,摄像机是从左上角移动的右下角。

 

  看了一些好玩的滤波器后我们可以进入主题了,首先来看均值模糊:

均值模糊Box Filter (Averaging)

 

      我们可以将当前像素和它的四邻域的像素一起取平均,然后再除以5,或者直接在滤波器的5个地方取0.2的值即可,如下图:

 

图像处理算法其实都很简单「建议收藏」

 

      可以看到,这个模糊还是比较温柔的,我们可以把滤波器变大,这样就会变得粗暴了:注意要将和再除以13.

 

图像处理算法其实都很简单「建议收藏」

 

      所以,如果你想要更模糊的效果,加大滤波器的大小即可。或者对图像应用多次模糊也可以。

 

 

 

图像处理算法其实都很简单「建议收藏」

 

图像处理算法其实都很简单「建议收藏」

 

 

 

高斯模糊

      其实模糊滤波器就是对周围像素进行加权平均处理,均值模糊很简单,周围像素的权值都相同,所以不是很平滑。高斯模糊就有这个优点,所以被广泛用在图像降噪上。特别是在边缘检测之前,都会用来移除细节。那么下面我们就看看高斯模糊的权值是如何分配的。

 

正态分布的权重
图像处理算法其实都很简单「建议收藏」

  正态分布显然是一种可取的权重分配模式。
在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将”中心点”作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

高斯函数
图像处理算法其实都很简单「建议收藏」

  上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布

正态分布的密度函数叫做”高斯函数”(Gaussian function)。它的一维形式是:
一维形式
  其中,μ是x的均值,σ是x的标准差。因为计算平均值的时候,中心点就是原
点,所以μ等于0。即:
进一步推导
  根据一维高斯函数,可以推导得到二维高斯函数:
二维高斯函数
  有了这个函数 ,就可以计算每个点的权重了。
  假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:

权重矩阵
  更远的点以此类推。下面就是5*5的高斯滤波器和平滑效果:

图像处理算法其实都很简单「建议收藏」

 

图像处理算法其实都很简单「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145224.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言数组详解(初学者这一篇就够了,看了不会打我)「建议收藏」

    c语言数组详解(初学者这一篇就够了,看了不会打我)「建议收藏」C语言数组详解1.数组:储存数据类型相同的一系列元素例如inta[100];在这里a数组储存100个int型元素,在这里[]这个符号就是告诉计算机a是一个数组。值得一提的是数组的下标访问数组的,数组中的a[0]一般表示你初始化的第一个值。2.初始化数组前面介绍过了,数组可以储存数据类型相同的一系列元素,所以初始化数组必不可少的一步就是告诉计算机这个数组储存的数据类型!…

    2022年7月11日
    19
  • Docker针对运行JAVA程序的优化

    Docker针对运行JAVA程序的优化

    2021年5月30日
    113
  • 原生 android 平板,前沿体验 原生Android 4.0系统平板推荐「建议收藏」

    原生 android 平板,前沿体验 原生Android 4.0系统平板推荐「建议收藏」【PConline海选导购】尽管早在2011年10月份,谷歌和三星就共同发布了代号为“冰激凌三明治”的Android4.0系统,但时至今日,搭载原生搭载Android4.0系统的平板电脑并不多见。即使有些厂商号称旗下的平板电脑可以升级到Android4.0系统,真正能够迅速付诸行动、为用户提供官方升级包的产品也寥寥无几。前沿体验原生Android4.0系统平板推荐相对于Android…

    2022年6月19日
    50
  • springEL表达式_Spring详解

    springEL表达式_Spring详解文章目录SpEL表达式SpEL表达式概述1、什么是SpEL表达式2、SpEL表达式的作用SpEL的使用方式1、xml配置的方式2、注解的方式SpEL表达式的调用SpEL表达式SpEL表达式概述1、什么是SpEL表达式SpEL:(springexpressionlanguage)是一种表达式语言,是一种强大,简洁的装配Bean的方式。他可以通过运行期间执行的表达式将值装配到我们的…

    2022年9月11日
    0
  • Linux系统结构详解

    Linux系统结构详解Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。1.linux内核Linux内核是世界上最大的开源项目之一,内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程…

    2022年5月25日
    35
  • 选择有这些特点的it行业人力外包公司没错

    选择有这些特点的it行业人力外包公司没错互联网的快速发展加快了传统企业信息化进程,很多传统企业自己组建软件技术部,既缺少技术开发经验,又缺乏软件项目管理经验,因此软件外包成为这些公司的首选。但完全的项目外包,使得其与软件外包公司的沟通变的不畅通,软件外包公司又缺乏传统企业的业务经验,且保密性很差,所以不少传统企业会选择和it行业人力外包公司合作来引进it人才,那么什么样的it行业人力外包公司值得选择?一、选择有一定年限的it行业人力外包公司为什么要选择一个成立时间长的it行业人力外包公司呢?因为it行业人力外包公司成立的时间越长,越能

    2022年5月19日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号