学习 interpolation 算法

2020年11月19日 / 3次阅读 / Last Modified 2020年11月23日
算法

当把一个图片缩放(image scaling),比如放大时,我们可能会看到马赛克(pixelated)的效果,这些马赛克效果就是一种interpolation的处理结果。

放大图片会导致图片显示区域的分辨率超过图片本身的分辨率,这些多出来的pixel不能空白,需要有一种机制去给他们填充内容(颜色),这就是interpolation要做的事情。不仅仅在图片处理上,在科学和其它工程领域,也有很多地方需要interpolate技术,这种技术本质上,就是用相邻的数据点去预测空白的点位。

(缩小图片,就是简单的按比例丢弃pixel吗?)

nearest neighbor interpolation

这是最简单最快速的interpolation算法了,就是直接取临近点位的值来作为空白点位的值。比如下面这个函数图:

nearest neighbor interpolation
nearest neighbor interpolation

红色的点为已知的,蓝色就是用nearest方法来预测的值。

别看nearest算法简单粗暴,在图像处理上常常被使用,比如我们放大一张图片时,使用nearest算法就能得到一张马赛克图:

用nearest算法放大图像
用nearest算法放大图像

一个4x4的图,用nearest放大到8x8,如上图效果。

nearest算法用在图像处理上(2D),会产生很明显的马赛克效果。

linear interpolation

plot的时候,常常剪刀这种算法:

linear interpolation
linear interpolation

由于数据量不足,在画图的时候,看到的效果就入上图。

bilinear

双向线性interpolation,双向,就是x和y两个方向。

比如放大图像,图像是2D的,这个时候bilinear就在两个方向上进行相对平滑的interpolation。

openCV的默认值。

cubic

...

bicubic

...

-- EOF --

本文链接:https://www.pynote.net/archives/2834

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top