图像与滤波关系
来源:互联网 发布:如何分析财务报表数据 编辑:程序博客网 时间:2024/06/05 09:32
http://www.ruanyifeng.com/blog/2017/12/image-and-wave-filters.html
我对图像处理一直很感兴趣,曾经写过好几篇博客(1,2,3,4)。
前几天读到一篇文章,它提到图像其实是一种波,可以用波的算法处理图像。我顿时有一种醍醐灌顶的感觉,从没想到这两个领域是相关的,图像还可以这样玩!下面我就来详细介绍这篇文章。
一、为什么图像是波?
我们知道,图像由像素组成。下图是一张 400 x 400 的图片,一共包含了 16 万个像素点。
每个像素的颜色,可以用红、绿、蓝、透明度四个值描述,大小范围都是0 ~ 255
,比如黑色是[0, 0, 0, 255]
,白色是[255, 255, 255, 255]
。通过 Canvas API 就可以拿到这些值。
如果把每一行所有像素(上例是400个)的红、绿、蓝的值,依次画成三条曲线,就得到了下面的图形。
可以看到,每条曲线都在不停的上下波动。有些区域的波动比较小,有些区域突然出现了大幅波动(比如 54 和 324 这两点)。
对比一下图像就能发现,曲线波动较大的地方,也是图像出现突变的地方。
这说明波动与图像是紧密关联的。图像本质上就是各种色彩波的叠加。
二、频率
综上所述,图像就是色彩的波动:波动大,就是色彩急剧变化;波动小,就是色彩平滑过渡。因此,波的各种指标可以用来描述图像。
频率(frequency)是波动快慢的指标,单位时间内波动次数越多,频率越高,反之越低。
上图是函数sin(Θ)
的图形,在2π
的周期内完成了一次波动,频率就是1。
上图是函数sin(2Θ)
的图形,在2π
的周期内完成了两次波动,频率就是2。
所以,色彩剧烈变化的地方,就是图像的高频区域;色彩稳定平滑的地方,就是低频区域。
三、滤波器
物理学对波的研究已经非常深入,提出了很多处理波的方法,其中就有滤波器(filter):过滤掉某些波,保留另一些波。
下面是两种常见的滤波器 。
- 低通滤波器(lowpass):减弱或阻隔高频信号,保留低频信号
- 高通滤波器(highpass):减弱或阻隔低频信号,保留高频信号
下面是低通滤波的例子。
上图中,蓝线是原始的波形,绿线是低通滤波lowpass
后的波形。可以看到,绿线的波动比蓝线小很多,非常平滑。
下面是高通滤波的例子。
上图中,黄线是原始的波形,蓝线是高通滤波highpass
后的波形。可以看到,黄线的三个波峰和两个波谷(低频波动),在蓝线上都消失了,而黄线上那些密集的小幅波动(高频波动),则是全部被蓝线保留。
再看一个例子。
上图有三根曲线,黄线是高频波动,红线是低频波动。它们可以合成为一根曲线,就是绿线。
上图中,绿线进行低通滤波和高通滤波后,得到两根黑色的曲线,它们的波形跟原始的黄线和红线是完全一致的。
四、图像的滤波
浏览器实际上包含了滤波器的实现,因为 Web Audio API 里面定义了声波的滤波。这意味着可以通过浏览器,将lowpass
和highpass
运用于图像。
lowpass
使得图像的高频区域变成低频,即色彩变化剧烈的区域变得平滑,也就是出现模糊效果。
上图中,红线是原始的色彩曲线,蓝线是低通滤波后的曲线。
highpass
正好相反,过滤了低频,只保留那些变化最快速最剧烈的区域,也就是图像里面的物体边缘,所以常用于边缘识别。
上图中,红线是原始的色彩曲线,蓝线是高通滤波后的曲线。
下面这个网址,可以将滤波器拖到图像上,产生过滤后的效果。
浏览器实现滤波的范例代码,可以看这个仓库。
(完)
- 图像与滤波关系
- 图像卷积与滤波
- 图像与滤波
- 线性滤波与图像卷积
- 中值滤波与图像锐化
- 图像滤波与滤波器基础知识
- 中值滤波与图像锐化
- 图像处理--图像滤波与滤波器
- 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 图像基础17 图像滤波与除噪——高斯滤波、双边滤波
- 图像逆滤波与维纳滤波的程序代码
- 图像滤波与创建预定义的滤波算子
- 视频与图像噪声滤波相关博客
- Matlab图像滤波imfilter与fspecial
- 高斯滤波器理解与图像滤波
- 图像卷积与滤波的一些知识点
- 图像卷积与滤波的一些知识点
- 图像卷积与滤波的一些知识点
- 请求数据的封装类
- HTML5 本地存储是一个window 属性,包括localStorage 和 sessionStorage,
- json类型的字符串取值
- 在一个宽字节注入习题的情况下得到的知识集合
- 通俗易懂CSS(一)-相对定位和绝对定位position和float
- 图像与滤波关系
- Elasticsearch、Kibana权限控制
- 存储过程和函数的区别
- java核心基础--jdk源码分析学习--LinkedList
- nGrinder(使用方法)
- 项目架构设计总结:基于阿里云搭建的轻量级架构
- 单例模式加载配置文件
- HorizontalScrollView与Fragment基础使用
- 本地测试微信公众号推送模板