图像与滤波

作者: 阮一峰

日期: 2017年12月13日

珠峰培训

我对图像处理一直很感兴趣,曾经写过好几篇博客(1234)。

前几天读到一篇文章,它提到图像其实是一种波,可以用波的算法处理图像。我顿时有一种醍醐灌顶的感觉,从没想到这两个领域是相关的,图像还可以这样玩!下面我就来详细介绍这篇文章。

一、为什么图像是波?

我们知道,图像由像素组成。下图是一张 400 x 400 的图片,一共包含了 16 万个像素点。

每个像素的颜色,可以用红、绿、蓝、透明度四个值描述,大小范围都是0 ~ 255,比如黑色是[0, 0, 0, 255],白色是[255, 255, 255, 255]。通过 Canvas API 就可以拿到这些值。

如果把每一行所有像素(上例是400个)的红、绿、蓝的值,依次画成三条曲线,就得到了下面的图形。

可以看到,每条曲线都在不停的上下波动。有些区域的波动比较小,有些区域突然出现了大幅波动(比如 54 和 324 这两点)。

对比一下图像就能发现,曲线波动较大的地方,也是图像出现突变的地方。

这说明波动与图像是紧密关联的。图像本质上就是各种色彩波的叠加。

二、频率

综上所述,图像就是色彩的波动:波动大,就是色彩急剧变化;波动小,就是色彩平滑过渡。因此,波的各种指标可以用来描述图像。

频率(frequency)是波动快慢的指标,单位时间内波动次数越多,频率越高,反之越低。

上图是函数sin(Θ)的图形,在的周期内完成了一次波动,频率就是1。

上图是函数sin(2Θ)的图形,在的周期内完成了两次波动,频率就是2。

所以,色彩剧烈变化的地方,就是图像的高频区域;色彩稳定平滑的地方,就是低频区域。

三、滤波器

物理学对波的研究已经非常深入,提出了很多处理波的方法,其中就有滤波器(filter):过滤掉某些波,保留另一些波。

下面是两种常见的滤波器 。

  • 低通滤波器(lowpass):减弱或阻隔高频信号,保留低频信号
  • 高通滤波器(highpass):减弱或阻隔低频信号,保留高频信号

下面是低通滤波的例子。

上图中,蓝线是原始的波形,绿线是低通滤波lowpass后的波形。可以看到,绿线的波动比蓝线小很多,非常平滑。

下面是高通滤波的例子。

上图中,黄线是原始的波形,蓝线是高通滤波highpass后的波形。可以看到,黄线的三个波峰和两个波谷(低频波动),在蓝线上都消失了,而黄线上那些密集的小幅波动(高频波动),则是全部被蓝线保留。

再看一个例子

上图有三根曲线,黄线是高频波动,红线是低频波动。它们可以合成为一根曲线,就是绿线。

上图中,绿线进行低通滤波和高通滤波后,得到两根黑色的曲线,它们的波形跟原始的黄线和红线是完全一致的。

四、图像的滤波

浏览器实际上包含了滤波器的实现,因为 Web Audio API 里面定义了声波的滤波。这意味着可以通过浏览器,将lowpasshighpass运用于图像。

lowpass使得图像的高频区域变成低频,即色彩变化剧烈的区域变得平滑,也就是出现模糊效果。

上图中,红线是原始的色彩曲线,蓝线是低通滤波后的曲线。

highpass正好相反,过滤了低频,只保留那些变化最快速最剧烈的区域,也就是图像里面的物体边缘,所以常用于边缘识别。

上图中,红线是原始的色彩曲线,蓝线是高通滤波后的曲线。

下面这个网址,可以将滤波器拖到图像上,产生过滤后的效果。

浏览器实现滤波的范例代码,可以看这个仓库

(完)

一灯学堂

优达学城

留言(33条)

Linda的原始全图有吗

三、滤波器 第二个例子中
黄线的原始的波形,高通滤波后变成蓝线的波形,损失了很多信息
这种情况就不能再通过蓝线低通滤波还原回黄线了吧?

引用东方九木的发言:

Linda的原始全图有吗

我有。邮件我我发给你~

希望能介绍深一些

她不是linda,是lena……
https://en.wikipedia.org/wiki/Lenna

我记得里图像处理中有一种叫小波算法,好像是和JPEG有关的,一直不懂原理。
今天看到这个文章,一下醍醐灌顶。

其实这就是AAC编码,JPEG编码这些音频压缩、图片压缩算法的根本原理。

这些算法里面都涉及类似离散余弦变换这种处理,就是把待处理数据从时域变换到频域,都是高频的部分代表变化剧烈的部分,低频部分就是代表变化不剧烈的地方。

换到频域以后,低频的部分使用很少的空间就能保存,高频的部分再做一点有损的压缩,整体的大小就大大降低了,这个就是编码的过程。通过控制有损压缩的程度,就可以控制编码后的质量。

解码的过程就是把频域再还原回时域。

将图像看成波,应该是比较好理解的。

400x400一共16w个像素点, 为什么图画的是400个呢?

非常棒!

请持续!

引用卫书有道的发言:

400x400一共16w个像素点, 为什么图画的是400个呢?

原文说是第一行的

medium好像被墙了,请问你是用什么访问的?可否说一下?

引用东方九木的发言:

Linda的原始全图有吗

请买正版杂志

引用wubing的发言:

medium好像被墙了,请问你是用什么访问的?可否说一下?

可以用lantern

获益良多

确实醍醐灌顶,以前一直没想通图片怎么能像声音一样DSP,也没花功夫去弄明白。现在这个应用也很好理解了:
https://www.zhihu.com/question/50735753

为什么搞图像的人,总喜欢用那张美女的照片,难道离了她就搞不成图像处理了吗?
阮大大,你知道不呀?你晓得这个美女到底是哪个不呀?跟图像处理领域有什么联系不?

David C. Munson. 在“A Note on Lena” 中给出了两条理由:首先,Lenna图像包含了各种细节、平滑区域、阴影和纹理,这些对测试各种图像处理算法很有用。它是一副很好的测试图像!第二,Lena图像里是一个很迷人的女子。所以不必奇怪图像处理领域里的人(大部分为男性)被一副迷人的图像吸引。


横轴纵轴分别代表啥?

研究机器学习把数学全都捡起来了

如果图像波的某个地方已经变得平滑了 根据一些处理能回去的话 那么就可以消除马赛克了 是这样吗?...

讲的真好,听明白了。

引用溏酒深的发言:

为什么搞图像的人,总喜欢用那张美女的照片,难道离了她就搞不成图像处理了吗?
阮大大,你知道不呀?你晓得这个美女到底是哪个不呀?跟图像处理领域有什么联系不?


最早的数字图像处理的论文(6,70年代)就是用的这个照片,被沿用下来了而已。

引用东方九木的发言:

Linda的原始全图有吗

http://www.lenna.org/full/l_hires.jpg

还可以说得更本源一些,图像的形成是借助于光,光本身就是一种可见的电磁波,每种颜色都有不同的波长,用滤波来处理在合适不过

非常感谢阮大大的文章,我有几个问题想请教您。
请问滤波器处理得到模糊效果和边缘识别之后的应用场景是什么呢?
难道只是为了得到视觉的艺术处理么?这个意义或者说用处个人觉得不大。
另外除了滤波器处理,还有别的处理方法以得到别的效果么?
请大大给一些指点,
谢谢。

软老师,你好。每次看到你的博客,都感觉特别好,不是说写的有多好多专业,而是您往往能用一些简单的例子,让我理解一个概念。非常受用,感谢您的博客带我走进了计算机的世界,最近在学习一些计算机图形学方面的知识,发现我的数学知识非常不足。我该怎么办!跪求老师推荐的学习材料指点迷津!

引用freedom的发言:

非常感谢阮大大的文章,我有几个问题想请教您。
请问滤波器处理得到模糊效果和边缘识别之后的应用场景是什么呢?
难道只是为了得到视觉的艺术处理么?这个意义或者说用处个人觉得不大。
另外除了滤波器处理,还有别的处理方法以得到别的效果么?
请大大给一些指点,
谢谢。

说个简单的 边缘识别后可以抽取出图片中的重点部分。比如说对于文字识别任务,各种颜色,旁边的色块都是多余的信息。

您的服务器是阿里的吗?
还是自己搭建的服务器做的路由

引用lwl的发言:


请买正版杂志


好幽默...
https://en.wikipedia.org/wiki/Lenna

@freedom:

请搜一下卷积神经网络(CNN),其中卷积就是一种滤波,同时图像识别也是通过对图像的边缘的识别来实现。

引用东方九木的发言:

Linda的原始全图有吗

是Lenna,不是Linda

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接