图像还可以这样玩!如何用波的算法处理图像


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


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


一、为什么图像是波?


我们知道,图像由像素组成。下图是一张 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正好相反,过滤了低频,只保留那些变化最快速最剧烈的区域,也就是图像里面的物体边缘,所以常用于边缘识别。



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


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

http://fellipe.com/demos/lena-js/



浏览器实现滤波的范例代码,可以看这个仓库(https://github.com/rssilva/web-audio-image-filtering)


来源:阮一峰的网络日志



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[存档]CxServer的项目周期管理

2019独角兽企业重金招聘Python工程师标准>>> 主题:大学生创新性实验计划 项目周期管理 作者:宋志民备注:本文为《 基于CxServer的大学生科学研究项目管理实践探索》的一部分 内容: 一般情况下大学生科研计划的种类较多…

C# 在PC上的通过蓝牙(bluetooth)发送数据到手机

概述在PC端用.NET开发一个蓝牙下载的程序。实现在PC上查找周围的蓝牙设备(主要是手机),并将PC上的文件通过蓝牙传输到手机上。目前我采用的是OpenNETCF.Net.Bluetooth,能够正常发现周围的蓝牙设备,手机也能够正常进行蓝…

新浪股票接口 java_新浪股票接口Android SDK(非官方)

新浪股票接口AndroidSDK昨天想到一个点子,需要访问股票行情。于是在网上搜了一下免费的股市行情的接口。发现新浪股票的数据接口比较稳定,于是就用它了。网上对于新浪股票的数据接口介绍比较详细,并且实现也很简单,所以花了一下午…

VC++的dll中接收消息

LRESULT CALLBACK MessageWinProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter)//用于处理消息窗口接收到的消息{switch(uMsg){case WM_CLOSE:DestroyW…

在职场中,长得漂亮真的有用吗?

非常有用。下面五张图,每张图介绍一个研究,都可以从一个侧面回答问题。01 企业对求职者的颜值有多看重?这张图来自两位学者对国内某网站超过100万份招聘广告的分析结果。总的来看,有7.7%的企业会对应聘者的外貌提出要求&#xff0…

TIOBE 3月榜单:新功能将加入,C语言仍高居榜首

喜欢就关注我们吧!TIOBE 公布了 2021 年 3 月的编程语言排行榜。本月 TIOBE 指数没有什么有趣的变化。因此,TIOBE CEO Paul Jansen 表示,其打算透露一些近期将加入至榜单中的新功能。第一个问题涉及到一个 bug 修复。由于使用了复杂的算法&am…

java jdk win10安装_Java 安装 JDK WIN10

JDK的全称是Java SE Development Kit它的官方网站只要用Goole搜索下即可找到,官方提供JDK8、11、12的下载入口。我们点击Java SE Development Kit 8进入下载。我们下载的版本是jdk-8u91-windows-x64.exe安装过程按导向默认安装,中途什么选项都不改。安装…

twitter达人不能不知的缩写

今天上午有人在新闻编辑室问“嘿,Twitter上的MT是什么意思?”,让我们觉得编制一个Twitter缩写的列表可能会有帮助。 这就是为什么我们要做这些的原因。想要全面地完成其实不容易,所以请在评论中增加这个列表中缺失的缩写吧。技术类…

50张神图……好不容易才找到完整版!

描述:1.耶鲁大学耗时5年的研究成果。 如果你看见这个舞女是顺时针转,说明你用的是右脑 如果是逆时针转,说明你用的左脑。 据说,14%的美国人可以两个方向都能看见 可以和别人一起看,测试下,一般不同人同时看…

BeetleX.Http.Clients V1.5发布

组件开始设计是针对以接口的方式来定义HTTP/HTTPS访问,虽然基于接口来操作有很大的便利性,但定义起来就比较麻烦了。所以在1.5版本中实现了一个HttpClient类来简化调用。HttpClient 该类支持HTTP的GET,POST,DELETE和PUT操作,通过这几个…

java set spliterator_Java HashSet spliterator() 方法

Java HashSet spliterator() 方法spliterator() 用于在HashSet中的元素上创建后绑定和故障快速的Spliterator。将后期绑定的Spliterator绑定到元素的来源意味着HashSet在第一次遍历,第一次拆分或第一次查询估计大小时,而不是在创建Spliterator时。它可以…

系统的crontab设定:/etc/crontab

crontab -e 是针对用户的cron来设计的,如果是系统的例行性任务,该怎么办?是否还是需要以crontab -e来管理例行性命令?当然不需要,您只需要编辑/etc/crontab文件就可以了。需要注意的是:crontab -e的作用其实…

编程到底难在哪里?

写在前面:这篇回答并不是讲述在生活中程序员如何买苹果,而是以买苹果为例说明程序员如何解决问题。程序员需要对问题进行透彻的分析,理清其涉及的所有细节,预测可能发生的所有意外与非意外的情况,列出解决方案的所有步…

DDD实战课--学习笔记

目录学好了DDD,你能做什么?领域驱动设计:微服务设计为什么要选择DDD?领域、子域、核心域、通用域和支撑域:傻傻分不清?限界上下文:定义领域边界的利器实体和值对象:从领域模型的基础…

java 字符utf8编码_java字符串转utf8编码

Java中ASC码与字符互相转化_计算机软件及应用_IT/计算机_专业资料。Java 中 ASC 码与字符互相转化 packagecom.ljq.test; /** * Java 中 ASC 码与字符互相转化......JAVA 字符串转日期或日期转字符串(转) 2010-08-16 16:34:03| 分类: java |字号 订阅 JAVA 字符串转日期或日期转…

如何预测未来房价的发展

1946年2月16日,是一个值得纪念的日子。在这一天,人类历史上真正意义上的第一台电子计算机诞生了,此后计算机便随着科技的发展以强大的生命力飞速发展着。而作为用来定义计算机程序的形式语言——编程语言也紧跟计算机其后蓬勃发展&#xff0c…

《进击吧!Blazor!》系列入门教程 第一章 7.图表

作者备注《进击吧!Blazor!》是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力。视频地址:https://space.bilibili.com/483888821/channel/detail?cid151273Bl…

java 最好 入门_C++和Java哪个比较好入门?初学者该如何选择?

选择好的方向比努力更重要,对于初学编程的人来说选择一门合适的编程语言关系到自己以后的职业发展。c和Java那个更适合作为入门语言?给大家简单科普一下~C语言它是正宗的C语言的嫡系,由C语言发展而来。C支持多种编程范式 --面向对象编程、泛型编程和过程…

为什么要实施服务器虚拟化

实施了服务器虚拟化能为我们带来什么?1.基础架构的利用率。通过将基础架构资源池化并打破一个应用一台物理机的藩篱,虚拟化大幅提升了资源利用率。通过减少额外硬件的采购,企业可以获得大幅成本节约。2. 安全性。通过将操作系统和应用从服务器…

一日一技:ASP.NET Core Api网关Ocelot初探

概述Ocelot面向使用.NET运行微型服务/面向服务的体系结构的人员,这些体系结构需要在系统中具有统一的入口点。特别是我想与IdentityServer参考和承载令牌轻松集成。Ocelot是按特定顺序排列的一堆中间件。Ocelot将HttpRequest对象操作到由其配置指定的状态&#xff0…