博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像缩放算法
阅读量:5425 次
发布时间:2019-06-15

本文共 1219 字,大约阅读时间需要 4 分钟。

图像缩放算法较多,下面仅以最邻近插值算法和双线性插值算法作介绍。

如下图1所示,表示原始图像和缩放以后的图像。

图1 图像缩放(原始图像à缩放图像)

图像缩放就是将原始图像中的点经过某一算法映射到目标图像的点的行为,即要找到目标图像中的点p1对应在原始图像中点p0,简单而言就是找点p0。

假设:

  1. 原始图像src的分辨率为(srcW * srcH);
  2. 目标图像dst的分辨率为(dstW * dstH)。

那么:

原始图像宽与目标图像宽的比例

原始图像高与目标图像高的比例

所以,原始图像中的点p0的坐标求出分别为x0, y0(可能含有小数)。

  1. 最邻近插值

    1. 原理

由上述推导过程可以求得原始图像中的点p0(x0, y0),但是,在此过程可以看出,该点的坐标值可能含有小数,所以,我们必须采取一定方法(如:四舍五入)来舍弃小数部分,从而取得整数表示的像素点坐标, 该过程即为最邻近插值方法。

  1. 优缺点

最邻近插值简单且直观,但得到的图像质量不高,特别在图像放大后可能产生明显锯齿。

  1. 双线性插值

    1. 原理

如图2所示,最邻近插值是当求得p0后,直接找其邻近的点p1, p2, p3, p4中的一个的像素值作为目标点的像素;而双线性插值,则是根据p0点与周围4点(p1, p2, p3, p4)距离关系计算目标点的像素值。

图2 双线性插值坐标图示

通过计算得到的原始点为p0(x0, y0),则其4周的点分别为:

x0的可能取值为:sx1 = (int)x0, sx2 = sx1 + 1

y0的可能取值为:sy1 = (int)y0, sy2 = sy1 + 1

图2中:

s1 = y0 – sy1

s2 = sx2 – x0

s3 = 1.0 – s1

s4 = 1.0 – s2

假设p1, p2, p3, p4的像素值分别为v1, v2, v3, v4,

则双线性插值计算p0点像素值v0公式为:

v0 = v1*s1*s4 + v2*s1*s2 + v3*s2*s3 + v4*s3*s4

  1. 优缺点

    1. 双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。
    2. 双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。
  1. 三次卷积法

    1. 原理

在双线性插值中,考虑计算得到的点p0(x0, y0)周围4个点的距离关系来取得像素值;而在三次卷积法中,考虑点p0(x0, y0)的周围的16邻点。

假设:

由上述计算得到的点p0(x0, y0)的像素值表示为

其中:

i为x0整数部分,u为x0的小数部分;

j为y0的整数部分,v为y0的小数部分。

则可表示为:

其中:

S(x)是对的逼近(pi是圆周率—π)

  1. 优缺点

三次卷积法能够克服最邻近插值和双线性插值两种算法的不足,计算精度高,但计算亮大。

转载于:https://www.cnblogs.com/sycy/p/4743620.html

你可能感兴趣的文章
Apache Hadoop配置Kerberos指南
查看>>
C#比较时分秒大小,终止分钟默认加十分钟,解决跨天、跨月、跨年的情况
查看>>
回文数字判断
查看>>
kmp算法
查看>>
抛弃火狐……
查看>>
objective-c中是如何实现线程同步的?
查看>>
jq工具函数(八)使用$.extend()扩展工具函数
查看>>
elasticsearch kibana 安装 配置
查看>>
python3 不知文件编码情况下打开文件代码记录
查看>>
打开eclipse出现JVM terminated.Exit Code=-1错误的解决办法
查看>>
SSH连接时出现Host key verification failed的原因及解决方法【转载】
查看>>
2017.6.7
查看>>
7. 炒股怎么看盘
查看>>
【采集层】Kafka 与 Flume 如何选择(转)
查看>>
【BZOJ1803】Spoj1487 Query on a tree III 主席树+DFS序
查看>>
jQuery 遍历 - map() 方法
查看>>
jQuery事件绑定、解绑、命名空间
查看>>
C#类,对象,构造方法
查看>>
学习笔记: AOP面向切面编程和C#多种实现
查看>>
学习笔记: 特性Attribute详解,应用封装
查看>>