本文的主要内容转载自博客 《图像缩放算法 》或《图形图像处理-之-高质量的快速的图像缩放 上篇 近邻取样插值和其速度优化》,将其中的代码改写在自己的机器上进行实际测试,从而更加体会到代码优化的意义及方向。

正文说明:

       为了便于讨论,这里只处理24bit的RGB颜色; 
       代码使用C++,涉及到汇编优化的时候假定为x86平台;使用的编译器为vs2010;

为了代码的可读性,没有加入异常处理代码
测试环境:
Intel(R) Core(TM) i5-3570 CPU @3.40GHz  3.80GHz
测试说明:
只测试内存数据到内存数据的缩放
缩放原理和公式图示:

 第一个缩放函数:

一个最简单的缩放函数(插值方式为近邻取样,而且我“尽力”把它写得慢一些了。
函数将大小为 srcWidth x srcHeight的图片缩放到 dstWidth x dst.Height的区域中。
 第二个缩放函数:
第一个函数并没有按照颜色数据在内存中的排列顺序读写(内部循环递增 y 行索引),将造成CPU缓存预读失败和内存颠簸导致巨大的性能损失,(很多硬件都有这种特性,包括缓存、内存、显存、硬盘等,优化顺序访问,随机访问时会造成巨大的性能损失)所以先交换x,y循环的顺序:
第三个缩放函数:
x*srcWidth / dstWidth 表达式中有一个除法运算,它属于很慢的操作(比一般的加减运算慢几十倍!),使用定点数来优化它:

第四个缩放函数:

在x的循环中y一直不变,那么可以提前计算与y相关的值;1) 可以发现srcy的值和x变量无关,可以提前到x轴循环之前;2)优化与y相关的指针计算。

第五个缩放函数:

定点数优化使函数能够处理的最大图片尺寸和缩放结果(肉眼不可察觉的误差)受到了一定的影响,这里给出一个使用浮点运算的版本,可以在有这种需求的场合使用:

 第六个缩放函数:
注意到这样一个事实:每一行的缩放比例是固定的;那么可以预先建立一个缩放映射表格来处理缩放映射算法。

针对以上六个缩放函数,对三幅图片进行不同大小的缩放,得到的测试数据如下:

近邻取样插值和其速度优化相关推荐

  1. appollo-二次规划ST速度优化

    二次规划ST速度优化 from https://github.com/ApolloAuto/apollo/blob/master/docs/specs/qp_spline_st_speed_optim ...

  2. 图像缩放算法及速度优化

    原文来自:博客园 小欣子 图像缩放算法及速度优化--(一)最近邻插值 图像缩放算法及速度优化--(二)双线性插值 --------------------以下为原文------------------ ...

  3. YUV视频格式到RGB32格式转换的速度优化 上篇(转)

    YUV视频格式到RGB32格式转换的速度优化 上篇                     HouSisong@GMail.com    2007.10.30   tag: YUV,YCbCr,YUV ...

  4. 页面加载速度优化的12个建议

    1.合并Js文件和CSS 将JS代码和CSS样式分别合并到一个共享的文件,这样不仅能简化代码,而且在执行JS文件的时候,如果JS文件比较多,就需要进行多次"Get"请求,延长加载速 ...

  5. netty系列之:一个价值上亿的网站速度优化方案

    文章目录 简介 本文的目标 支持多个图片服务 http2处理器 处理页面和图像 价值上亿的速度优化方案 总结 简介 其实软件界最赚钱的不是写代码的,写代码的只能叫马龙,高级点的叫做程序员,都是苦力活. ...

  6. 速度优化_网站打开速度慢?如何优化?

    网站打开速度直接影响用户的第一道体验,打开速度偏慢,用户可能就没耐心继续等下去了,造成大量用户流失,今天我们谈谈如何优化网站打开速度: 网站打开速度慢?如何优化? 服务器配置 服务器要安全.稳定性良好 ...

  7. 分享网页加载速度优化的一些技巧?

    日期:2013-2-17  来源:GBin1.com 不管你是不是相信,在最近的几年里,互联网网页的大小已经显著增大了.由HTTP Archive研究得出的结果表明,目前平均一个页面的大小是1.25M ...

  8. LaTeX的编译速度优化方案

    1 运行字体 如果是卡在 eu1lmr.fd 的话,是因为 XeLaTeX 在定位字体. 用管理员运行 fc-cache -fv 一般能够解决. 其它方法: https://www.zhihu.com ...

  9. Ansible执行过程分析、异步模式和速度优化

    Ansible系列(七):执行过程分析.异步模式和速度优化 分类: Linux服务篇 undefined 我写了更完善的Ansible专栏文章:一步到位玩儿透Ansible Ansible系列文章:h ...

最新文章

  1. 数据库:SQLServer中in和 exists函数用法笔记
  2. 基于E18-2G4U04B的ZigBee3.0无线数据抓包安装方法
  3. 互联网医院 2020年突出成就_【关注】中国社科院发布2020中国医院互联网影响力排行榜...
  4. php封装redis类,php封装redis操作类
  5. 转的:SQL执行提高效率的多种方法
  6. 福建农商银行计算机类笔试题目,2020年福建福州农商银行免笔试面试试题
  7. 情怀再次输给现实!中国式星巴克,如今亏到连租金都交不起
  8. tensorflow如何微调时如何只训练后两层_XLNet只存在于论文?都替你封装好了还不来用!...
  9. 流计算精品翻译: The Dataflow Model
  10. 浪潮存储进逼国际一线厂商
  11. 实现了某一个接口的匿名类的例子_“全栈2019”Java多线程第三章:创建多线程之实现Runnable接口...
  12. [2018.07.31 T1] 第一题
  13. alot英文怎么读_iot中文读什么,AloT怎么读,Iot是什么意思中文翻译
  14. 收件服务器位置,如何查看邮箱的收件服务器地址
  15. vue 非父子组件传值
  16. Calibre电子书简繁转换
  17. 广告条幅制作html,一种广告设计用的条幅收卷装置的制作方法
  18. 2018阿里巴巴秋招java笔试题做题记录
  19. 如何从零起步学习AI
  20. http网页返回状态码含义

热门文章

  1. leetcode算法题--全排列
  2. 数据库acid实现原理(二)
  3. ubuntu apt-get彻底卸载软件包
  4. c语言五子棋判断如何胜利,c语言 五子棋危险判断 求大神解释啊
  5. 首尾连接的数组的求和问题
  6. 第二十二章:动画(十五)
  7. mysqldump工具,工作的本质是什么呢?(dump表的时候,是否会产生drop表的语句)
  8. Phalcon入门教程之安装
  9. redis windows
  10. 第一个程序 - Windows程序设计(SDK)001