攻克视频技术
李江
声网 Agora 视频专家
7494 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 19 讲
攻克视频技术
15
15
1.0x
00:00/00:00
登录|注册

03|缩放算法:如何高质量地缩放图像?

你好,我是李江。
今天,我们一起来聊聊图像的缩放算法。图像的缩放算法在我们的日常生活中使用非常频繁,只是可能你没有留意到。举个例子,你使用网页或者播放器看电影的时候,经常会开启全屏或者退出全屏,电影的播放画面就会变大,或者变小。这个过程里面就会用到图像的缩放算法。
事实上,只要视频的原始分辨率和播放窗口的大小不一致,就需要通过缩放处理来使得视频画面适应窗口的大小。比如说,电影分辨率是 1080P,播放器的窗口大小是 720P,则需要将电影画面从 1080P 缩小到 720P 再播放。如果你点击全屏播放,播放窗口变成了 4K,则需要将电影画面做放大处理,即放大到 4K 之后再播放。这就是一个非常典型的图像缩放的例子。
在视频开发的过程中,图像的缩放就更多了。下面我列举 3 种用到图像缩放的情形:
情形 1:播放窗口与原始图像分辨率不匹配的时候需要缩放。这和我刚才举的例子是一样的情况。
情形 2:我们在线观看视频时会有多种分辨率可以选择,即需要在一个图像分辨率的基础上缩放出多种不同尺寸的图像出来做编码,并保存多个不同分辨率的视频文件。
情形 3:RTC 场景,有的时候我们需要根据网络状况实时调节视频通话的分辨率。这个也是需要缩放算法来完成的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

图像缩放算法是图像处理中的重要组成部分,本文介绍了图像缩放的基本原理和三种常用的插值算法:最近邻插值、双线性插值和双三次插值。最近邻插值算法简单快速,但容易导致块状效应和锯齿;双线性插值算法通过两次线性插值得到中间值,效果较好;而双三次插值算法则需要计算周围16个像素的权重再乘以像素值求和,计算量较大,但插值后的图像效果最好。文章还强调了插值算法和AI超分算法是目前主要的缩放实现方式。总的来说,本文深入浅出地介绍了图像缩放算法的原理和应用,对读者快速了解图像缩放算法具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《攻克视频技术》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • 西钾钾
    补0或者是填充最边上的像素的值

    作者回复: 补0不可以,因为跟周围像素差太大了,用第一行和第一列的像素补就可以了。

    2021-11-26
    2
    6
  • Geek_cbfa0a
    这个图像的缩放原理,是否就是业务开发中所说的图片的重采样过程呢,放大图像称为上采样,缩小图像称为下采样?

    作者回复: 是的

    2021-12-27
    4
  • 天亮了
    缩放图像缩放处理常见的性能优化有哪些呢?比如 ffmpeg 似乎比其它库要快很多。

    作者回复: 汇编优化,就像编码器也是一样的,需要针对不同CPU做汇编优化

    2021-12-30
    2
  • 一身龙骨
    个人觉得,不够像素点的,就用最近邻插值算法代替,简单快捷,而且图像上下边角的位置应该不是最重要的,清晰度不够也还能接受吧

    作者回复: 可以使用第一行、第一列的像素直接填充一下就可以了,这样先补齐周围像素,然后插值,实现起来每个像素点的插值使用同一种逻辑会方便一下。不需要特殊处理。

    2021-11-26
    2
  • 白曦
    李老师,你好。我是视频基础小白,很幸运能上到你的课。我向请教的是:双线性插值计算中,从720p放大到1080p时,目标的(3,3)位置映射到原图像(2,2)时,还需要三次线性计算吗?因为(2,2)刚好在近邻的四个点(2,1)(1,2)(3,2)(2,3)的中心位置上上,m点和n点已经不存在了

    作者回复: 应该是取的(2, 2),(2, 3), (3, 2), (3, 3)这四个点计算的,用公式最后算出来其实还是(2, 2)的像素值。

    2022-10-01归属地:浙江
    1
  • 李新
    这些插值算法是用于openGL 中的纹理过滤嘛? https://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/06%20Textures/

    作者回复: 这些算法是通用的,OpenGL里面也是这些算法。原理差不多。其他的开源库也有实现的,比如ffmpeg

    2021-12-11
    1
  • ForwardsHao
    对于边缘和角落的点,以它为中心不够16个点的话: 1. 如果要补足16个点用双三次插值,可以将4*4的区块像够的方向上移动,比如计算(0.5,0.5)的点,16个像素可以选择原图里的(0 0)(0 1)(0 2)(0 3)......(3 0)(3 1)(3 2)(3 3)来计算,因为计算公式考虑了权重,所以理论上其实原图里的任意16个点都可以拿来放到这个公式里计算本位置的像素值 2. 要么就是不够16个像素的地方就换另外两种方法,因为是边缘2排的像素,如果对边缘要求不那么高可以降低一下算法准确度标准

    作者回复: 一般将第一行和第一列复制填充一下。

    2021-11-27
    1
  • | ~浑蛋~
    lanczos算法的原理是咋样的

    作者回复: 跟bicubic非常像,就是基函数换了

    2022-11-20归属地:浙江
  • 哈珀朋友
    AI超分算法会讲吗?

    作者回复: 不涉及AI算法

    2021-12-06
    2
  • LDxy
    手机上经常能见到那种全屏缩放的动画效果,还有在查看相册时,照片缩放的动画效果也是十分流畅的,要达到这种流畅程度,需要60帧每秒吗?也就是说每秒要进行60次全屏幕大小图像的缩放运算,这个运算量应该很大,为什么还能很流畅?

    作者回复: 你是说点击小图,查看大图中间的缩放吗?这个应该是系统实现的吧。肯定不需要每秒这么多次缩放的。人眼没有这么敏感。我不知道我有没有理解你说的动画指的是哪个。

    2021-12-05
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部